← Back to notes

Patroni: high availability
для PostgreSQL


Что делает Patroni

Управляет HA-кластером PostgreSQL: выборы лидера, конфигурация через DCS, health checks, переключение ролей primary/replica, инициализация новых узлов.


DCS

Patroni использует Distributed Configuration Store. Поддерживаемые: etcd (рекомендован, в т.ч. v3 API), Consul, ZooKeeper, Kubernetes API, Exhibitor. В DCS хранятся:

  • leader key с TTL;
  • конфигурация (bootstrap.dcs инициализирует параметры при первом запуске и через patronictl edit-config далее);
  • текущее состояние членов кластера.

Ключевые таймеры (значения по умолчанию):

  • ttl: 30 — TTL leader-lock;
  • loop_wait: 10 — период HA-цикла Patroni;
  • retry_timeout: 10 — таймаут операций с DCS/PostgreSQL.

Инвариант: loop_wait + 2 * retry_timeout <= ttl.


Failover и switchover

  • failover — автоматическое переключение при недоступности primary; кандидат с минимальным lag;
  • switchover — плановое переключение без аварии.

Безопасный сценарий при потере DCS: primary демотируется сам — это исключает split-brain.


pg_rewind

Возвращает бывшего primary в кластер как реплику без полного pg_basebackup. Требует одного из:

  • wal_log_hints = on, либо
  • data checksums (initdb --data-checksums или pg_checksums --enable).

Также нужен full_page_writes = on (включён по умолчанию).


Watchdog

/dev/watchdog (softdog или hardware) — hard fencing: если HA-цикл Patroni зависает, ядро перезагружает узел до истечения leader-lock. Без watchdog сложнее гарантировать отсутствие split-brain при frozen-процессе.


Где обычно проблемы

  • нестабильный/перегруженный DCS;
  • невалидные ttl/loop_wait/retry_timeout;
  • отсутствие watchdog;
  • нет регулярных drills switchover/failover.

Практика

Статус кластера

patronictl -c /etc/patroni.yml list

Switchover

patronictl -c /etc/patroni.yml switchover

Reinit реплики

patronictl -c /etc/patroni.yml reinit cluster-name member-name

Guardrails

  • мониторинг latency и доступности DCS;
  • replication lag как ключевой алерт;
  • regular rehearsal failover/switchover.

Ссылки

Patroni: high availability для PostgreSQL | Aleksandr Suprun