Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PATRONI_FAILOVER_CONFIG Linux / DevOps

Отказоустойчивый кластер PostgreSQL с автоматическим промоутом через Patroni и etcd

Обновлено: 24.08.2026
  • Единая точка отказа (SPOF) в standalone инстансе PostgreSQL.
  • Необходимость ручного переключения реплики (promote) при падении primary ноды.
  • Риск возникновения ситуации Split-Brain при сетевых изолированностях (Network Partitioning).
  • Рассинхронизация конфигураций реплик в кластере.

1. Архитектура решения

Кластер строится на базе 3 нод с etcd (Distributed Configuration Store) и демонов Patroni, управляющих жизненным циклом экземпляров PostgreSQL.

2. Конфигурация Patroni (/etc/patroni/patroni.yml)

scope: pg-cluster
namespace: /service
name: pg-node-01

restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.10.11:8008

etcd3:
  hosts:
    - 192.168.10.11:2379
    - 192.168.10.12:2379
    - 192.168.10.13:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        wal_level: replica
        max_wal_senders: 10
        max_replication_slots: 10
        hot_standby: "on"

postgresql:
  listen: 0.0.0.0:5432
  connect_address: 192.168.10.11:5432
  data_dir: /var/lib/postgresql/15/main
  bin_dir: /usr/lib/postgresql/15/bin
  pgpass: /var/lib/postgresql/.pgpass
  authentication:
    replication:
      username: replicator
      password: Replicat0rStrongPass
    superuser:
      username: postgres
      password: PostgresSuperSecretPass

3. Управление кластером через patronictl

# Проверка статуса всех нод и лидера кластера
patronictl -c /etc/patroni/patroni.yml list

# Безопасный плановый перенос роли Master (Switchover)
patronictl -c /etc/patroni/patroni.yml switchover

# Просмотр топологии и параметров DCS
patronictl -c /etc/patroni/patroni.yml topology

4. Интеграция с балансировщиком HAProxy

HAProxy опрашивает REST API Patroni на порту 8008 для маршрутизации трафика:

backend pg_cluster_primary
  mode tcp
  option httpchk GET /primary
  http-check expect status 200
  server pg1 192.168.10.11:5432 check port 8008
  server pg2 192.168.10.12:5432 check port 8008
  server pg3 192.168.10.13:5432 check port 8008
💡 Практика специалистов: Всегда настраивайте quorum etcd минимум на 3 независимых нодах. Никогда не размещайте etcd на тех же физических накопителях, где идут интенсивные записи WAL PostgreSQL, чтобы исключить потерю heartbeat из-за дисковых блокировок.

Частые вопросы (FAQ)

Что предотвращает Split-Brain в связке Patroni + etcd?

Лидер удерживает ключ блокировки (Leader Lock) в etcd через регулярный heartbeat. Если связь с etcd теряется, Patroni автоматически понижает локальный Master до Read-Only (demote) до истечения TTL.

Зачем в Patroni включать параметр use_pg_rewind: true?

pg_rewind позволяет бывшему Master, отставшему от нового лидера после failover, синхронизировать разницу журналов WAL без полной повторной инициализации через pg_basebackup.

Полезные материалы
Рекомендуем