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