Документация pgfailover

pgfailover наблюдает за состоянием кластера PostgreSQL и выступает для клиентов как TCP-прокси к текущему Primary. При смене Primary pgfailover разрывает соединения с клиентами, и они должны переподключиться.

Параметры подключения задаются через переменные окружения с префиксом PGFAILOVER_:

export PGFAILOVER_BIND_ADDRESS=":5432"
export PGFAILOVER_SERVERS="postgres://repuser@pg0.example.com/database?sslmode=disable&connect_timeout=5 postgres://repuser@pg1.example.com/database?sslmode=disable&connect_timeout=5"
./pgfailover

Роль сервера (Primary/Standby) проверяется pg_is_in_recovery() по умолчанию раз в 5 секунд (PGFAILOVER_INTERVAL), количество попыток подключения регулируется переменной PGFAILOVER_ATTEMPTS (по умолчанию 1).

pgfailover может автоматически переводить локальный PostgreSQL в Primary. Адрес локальной БД задаётся переменной окружения PGFAILOVER_PROMOTION_ADDRESS и должен совпадать с хостом одной из записей PGFAILOVER_SERVERS. Когда с Primary пропадает связь, pgfailover переводит в Primary первый по порядку Standby в PGFAILOVER_SERVERS. Если PGFAILOVER_PROMOTION_ADDRESS не задан, перевод в Primary отключён.

Перевод в Primary выполняется путём вызова SQL-функции pg_promote(). Все экземпляры pgfailover должны иметь одинаковый список серверов PostgreSQL.

Пример для первого сервера:

export PGFAILOVER_PROMOTION_ADDRESS=pg0.example.com
export PGFAILOVER_SERVERS="postgres://repuser@pg0.example.com/database?sslmode=disable&connect_timeout=5 postgres://repuser@pg1.example.com/database?sslmode=disable&connect_timeout=5"
./pgfailover

Пример для второго сервера:

export PGFAILOVER_PROMOTION_ADDRESS=pg1.example.com
export PGFAILOVER_SERVERS="postgres://repuser@pg0.example.com/database?sslmode=disable&connect_timeout=5 postgres://repuser@pg1.example.com/database?sslmode=disable&connect_timeout=5"
./pgfailover