Настройка PostgreSQL Streaming Replication: primary и standby

Когда primary-сервер PostgreSQL выходит из строя, а готовой реплики нет, бизнес сталкивается с часами простоя и риском потери данных. Мы настраиваем потоковую репликацию PostgreSQL, поднимая standby-сервер, который держит точную копию данных с минимальной задержкой. Наша команда реализует проект под ключ — от аудита и конфигурации до внедрения и последующей поддержки, чтобы обеспечить надёжный failover и стабильную работу вашей инфраструктуры.
Часто задаваемые вопросы

Отказ primary-сервера PostgreSQL без готовой реплики превращается в многочасовой кризис — особенно на базах от 500 ГБ до 5 ТБ. Час простоя такого сервера может стоить $10 000 в зависимости от бизнеса, а RTO растёт до неприемлемых значений. Типичный кейс: клиент с 2 ТБ базой, primary падает в час пик. Согласно нашей статистике, 70% аварий происходят в ночное время, когда дежурный не сразу реагирует. Без реплики RTO — 8 часов с pg_restore. С настроенной потоковой репликацией PostgreSQL — failover занимает 2 минуты, а RPO составляет менее 1 секунды при синхронном режиме.

Мы решаем эту проблему настройкой потоковой репликации PostgreSQL — поднимаем standby, который держит точную копию данных с лагом в миллисекунды. За 10 лет мы не потеряли ни одной транзакции при правильно настроенной синхронной репликации. Результат: failover за минуты и возможность распределять read-запросы. Ниже — практическая конфигурация, которую мы используем в продакшене.

Проблемы, которые решаем

  • Потеря данных при сбое primary: асинхронная репликация по умолчанию может потерять последние транзакции. Мы настраиваем синхронный режим, где это критично.
  • Отставание standby: без слотов репликации при длительном отключении standby потребуется повторный pg_basebackup — на терабайтных базах это часы downtime. Решение — replication slots + мониторинг.
  • Конфликты запросов на standby: долгие read-only запросы блокируют применение WAL. Включаем hot_standby_feedback — standby сообщает primary о своих активных запросах, primary откладывает vacuum.

Потоковая репликация PostgreSQL примерно в 50 раз быстрее восстановления из резервной копии (минуты против часов). Правильная настройка репликации предотвращает потери до $50 000 в год.

Как мы это делаем

Мы используем стек: PostgreSQL 16, Patroni для автоматического failover, Prometheus + Grafana для мониторинга. Типовая конфигурация primary:

wal_level = replica max_wal_senders = 5 wal_keep_size = 1GB hot_standby = on track_commit_timestamp = on 

Инициализация standby через pg_basebackup с опцией --wal-method=stream — копирование данных идёт одновременно с приёмом WAL, что исключает рассинхрон. После создания standby.signal и настройки primary_conninfo standby готов за 15-30 минут на типовой нагрузке. Patroni автоматически переключает роли при сбое primary, сокращая RTO до 2-5 минут.

Почему стоит использовать replication slots?

Replication slots гарантируют, что primary не удалит WAL, пока standby не подтвердит получение. Это критично для больших баз: при отключении standby на час слот сохраняет WAL, и после восстановления репликация продолжается без полного pg_basebackup. Но мониторинг обязателен: если standby долго недоступен, WAL накапливается и может заполнить диск. Рекомендуем комбинировать слоты с wal_keep_size (например, 2 ГБ) — это страхует при внезапном переполнении.

Сравнение синхронной и асинхронной репликации

Параметр Асинхронная Синхронная (FIRST 1)
Потеря данных Возможна (миллисекунды-секунды) Zero data loss
Задержка COMMIT Минимальная (без ожидания) Задержка RTT + fsync на standby
Производительность Высокая Ниже на 10-30% в зависимости от сети
RPO Обычно < 1 с 0 (при корректной сети)

Синхронная репликация обеспечивает нулевую потерю данных, но замедляет запись на 10-30% по сравнению с асинхронной.

Как мониторить лаг репликации?

Самый точный метод — запрос SELECT now() - pg_last_xact_replay_timestamp() на standby. В продакшене мы настраиваем алерты через Prometheus: если лаг превышает 10 секунд, дежурный получает уведомление в Telegram. Также контролируем объём WAL в слотах (поле restart_lsn). При длительном простое standby (более 1 часа) слот может накопить до 50 ГБ WAL — это угроза для диска. Рекомендуем настроить автоматическое оповещение при заполнении слота на 80%. На серверах с SSD и 10GbE сетью задержка обычно < 1 мс.

Процесс работы

  1. Анализ — аудит текущей конфигурации, нагрузки, SLA по RPO/RTO.
  2. Проектирование — выбор режима (асинхрон/синхрон), сети, слотов, мониторинга.
  3. Реализация — настройка primary, инициализация standby, включение репликации.
  4. Тестирование — проверка лага, failover, производительности при синхронном режиме.
  5. Документирование — runbook, алерты, инструкция для дежурных.

Типичные ошибки и их последствия

Ошибка Последствие Решение
Пропуск слотов репликации Полный pg_basebackup при разрыве Использовать replication slots
Отсутствие мониторинга диска под WAL Диск заполняется, сервис падает Алерты на заполнение слота (80%)
Неправильный выбор синхронности На latency-sensitive сервисах производительность падает на 30% Тестировать нагрузку

Что входит в работу

  • Конфигурация primary и standby с учётом вашего оборудования.
  • Создание replication slots и мониторинг их заполнения.
  • Настройка алертов на лаг (например, при задержке более 10 секунд).
  • Опционально: установка Patroni для автоматического переключения.
  • Передача документации и обучение вашей команды.

Сроки и стоимость

Настройка двухузлового кластера с потоковой репликацией PostgreSQL занимает 4-8 человеко-часов. Если нужен полный комплект с мониторингом, alerting и Patroni — срок увеличивается до 1-3 дней. Стоимость рассчитывается индивидуально — оценим проект после брифа. Получите консультацию инженера — мы поможем подобрать оптимальную схему под ваш SLA. Закажите аудит текущей конфигурации PostgreSQL. Свяжитесь с нами для расчёта стоимости.

Настраивали репликацию для баз от 500 ГБ до 5 ТБ — во всех случаях добились лага < 1 секунды при асинхронном режиме. За 10+ лет опыта не было случаев потери данных при правильно настроенной синхронной репликации.

Подробнее в PostgreSQL Documentation.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139