DBAtlas · Атлас эксплуатации баз данных

Настроить синхронную репликацию с кворумом (ANY) или по приоритету (FIRST)

PostgreSQLРепликация

Команда

-- Quorum: commit completes once any 1 standby in the list confirms
ALTER SYSTEM SET synchronous_standby_names = 'ANY 1 (stby_a, stby_b)';
-- Priority based: the first connected standby in the list is sync, the others 'potential'
-- ALTER SYSTEM SET synchronous_standby_names = 'FIRST 1 (stby_a, stby_b)';
SELECT pg_reload_conf();
SELECT application_name, state, sync_state, sync_priority FROM pg_stat_replication ORDER BY application_name;

Что делает

Определяет, какие standby должны подтвердить commit до его завершения: ANY N основан на кворуме (sync_state = quorum), FIRST N делает синхронными (sync) первые N подключённых standby в порядке списка, а остальные — ожидающими (potential). Уровень подтверждения задаётся synchronous_commit (remote_write, on, remote_apply).

Когда использовать

В системах, требующих отсутствия потерь данных при failover (RPO = 0); при нескольких standby предпочтителен ANY, чтобы отказ одного standby не останавливал запись.

Внимание

Если требуемое число синхронных standby не подключено, commit зависает без ошибки, и приложение замирает. Имена в списке должны совпадать с application_name standby. В экстренной ситуации отдельная сессия может обойти это через SET synchronous_commit = local. Под Patroni управляйте этим через synchronous_mode, а не вручную.

Открыть в DBAtlas →

Связанные материалы