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

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

Параметры подключения задаются в виде DSN:

./pgfailover -bind :5432 \
    -server postgres://repuser@pg0.example.com/database?sslmode=disable&connect_timeout=5 \
    -server postgres://repuser@pg1.example.com/database?sslmode=disable&connect_timeout=5

Роль сервера (primary/standby) проверяется pg_is_in_recovery() по умолчанию раз в 5 секунд, регулируется параметром -interval.

pgfailover может автоматически делать локальный PostgreSQL лидером репликации. Предполагается, что задан порядок серверов, участвующих в кластере; pgfailover работает на каждом сервере, и ему задан индекс этого сервера. Когда с лидером пропадает связь, pgfailover на первом по порядку сервере, где работает ведомый PostgreSQL (standby), делает его лидером.

Индекс текущего сервера задается параметром -index, начиная с 0. Лидерство активируется путем создания файла-триггера по заданному пути. Экземпляры pgfailover должны иметь одинаковый список серверов PostgreSQL и уникальные номера без пропусков.

Пример для первого сервера (индекс 0):

./pgfailover -index 0 -trigger /var/lib/postgresql/11/database/trigger \
    -server postgres://repuser@pg0.example.com/database?sslmode=disable&connect_timeout=5 \
    -server postgres://repuser@pg1.example.com/database?sslmode=disable&connect_timeout=5

Пример для второго сервера (индекс 1):

./pgfailover -index 1 -trigger /srv/postgres/database/promote \
    -server postgres://repuser@pg0.example.com/database?sslmode=disable&connect_timeout=5 \
    -server postgres://repuser@pg1.example.com/database?sslmode=disable&connect_timeout=5