Что делает 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.