Перейти к содержанию

Patroni - PostgreSQL HA

Автоматически сгенерировано: 2026-03-03 09:38

Общая информация

Назначение: Автоматический failover PostgreSQL

Технология: Patroni + etcd

Серверы: - db-1 (10.10.19.31) - Primary/Leader - db-2 (10.10.19.32) - Replica/Standby

Текущий статус

Статус недоступен (требуется sudo доступ)

Предполагаемая конфигурация:

Сервер Роль Состояние
db-1 Leader Running
db-2 Replica Running

Конфигурация

Файл конфигурации: /etc/patroni.yml

Основные параметры:

  • scope: postgres-cluster
  • namespace: /service/
  • ttl: 30 секунд
  • loop_wait: 10 секунд
  • retry_timeout: 10 секунд
  • maximum_lag_on_failover: 1048576 (1MB)

etcd endpoints

etcd:
  hosts:
    - 10.10.19.31:2379
    - 10.10.19.32:2379

PostgreSQL параметры

Версия: PostgreSQL 17

Порт: 5432

Data directory: /var/lib/postgresql/17/main

Репликация: Streaming replication (синхронная)

Failover

Автоматический failover

  1. Patroni мониторит primary каждые 10 секунд
  2. При отказе primary (нет ответа 30 секунд)
  3. Patroni автоматически промотит replica в primary
  4. Обновляет etcd с новым лидером
  5. Приложения переподключаются автоматически

Время переключения: ~30-60 секунд

Ручной failover

# Переключение на конкретный сервер
ssh db-1
sudo patronictl failover postgres-cluster --candidate db-2

# Switchover (контролируемое переключение)
sudo patronictl switchover postgres-cluster

Проверка

# Статус кластера
ssh db-1 'sudo patronictl list'

# Конфигурация
ssh db-1 'sudo patronictl show-config'

# История
ssh db-1 'sudo patronictl history'

# Проверка репликации
ssh db-1 'sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"'

# Логи
ssh db-1 'sudo journalctl -u patroni -f'

Операции

Reinitialize replica

ssh db-2
sudo patronictl reinit postgres-cluster db-2

Restart PostgreSQL

ssh db-1
sudo patronictl restart postgres-cluster db-1

Reload configuration

ssh db-1
sudo patronictl reload postgres-cluster db-1