Документация 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.
Количество попыток подключения регулируется параметром -attempts, по умолчанию 1.
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