Configurar replicação síncrona com quorum (ANY) ou prioridade (FIRST)
PostgreSQLReplicaçãoComando
-- 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;O que faz
Define quais standbys devem confirmar antes que um commit seja concluído: ANY N é baseado em quorum (sync_state = quorum), FIRST N torna síncronos (sync) os N primeiros standbys conectados na ordem da lista e os demais standbys em espera (potential). O nível de confirmação é definido por synchronous_commit (remote_write, on, remote_apply).
Quando usar
Em sistemas que exigem nenhuma perda de dados no failover (RPO = 0); com vários standbys, ANY é preferível para que a falha de um único standby não interrompa as gravações.
Atenção
Se o número exigido de standbys síncronos não estiver conectado, os commits travam sem erro e a aplicação congela. Os nomes da lista devem coincidir com o application_name dos standbys. Em uma emergência, uma única sessão pode contornar isso com SET synchronous_commit = local. Sob o Patroni, gerencie isso com synchronous_mode em vez de configurar manualmente.