Потоковая репликация PostgreSQL из коробки умеет копировать данные на реплики — и на этом её возможности заканчиваются. Если мастер упал, реплики живут, отвечают на чтение, но записать что-то невозможно. Кластер висит в read-only до тех пор, пока DBA вручную не переключит роли. В три часа ночи это особенно «весело».
Patroni — Python-демон, который берёт на себя всю рутину управления PostgreSQL-кластером:
- Автоматический failover — при падении мастера Patroni сам промотирует наиболее актуальную реплику, обычно за 10–30 секунд
- Distributed consensus — работает через etcd, ZooKeeper или Consul, что исключает split-brain на уровне архитектуры
- Инициализация реплик — новая реплика поднимается автоматически через pg_basebackup, без ручной возни с резервными копиями
- Управление конфигурацией — параметры PostgreSQL хранятся централизованно в DCS, а не размазаны по конфигам на каждом сервере
- REST API — HTTP-эндпоинты для мониторинга и управления кластером, удобно встраивается в любой health check
На практике схема выглядит так: 3 ноды PostgreSQL + Patroni, рядом 3 ноды etcd — их можно поднять на тех же серверах, чтобы сэкономить. Перед кластером — HAProxy или PgBouncer, которые маршрутизируют клиентские подключения на текущего мастера.
Оставить комментарий