配置基于 quorum(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;作用
定义提交完成前必须确认的备库:ANY N 基于 quorum(sync_state = quorum),FIRST N 使列表中按顺序最先连接的 N 个备库为同步(sync),其余为等待中的备库(potential)。确认级别由 synchronous_commit 设置(remote_write、on、remote_apply)。
适用场景
用于要求故障转移时零数据丢失(RPO = 0)的系统;有多个备库时首选 ANY,这样单个备库故障不会停止写入。
注意
如果所需数量的同步备库没有连接,提交会无报错地挂起,应用会卡住。列表中的名称必须与备库的 application_name 一致。紧急情况下,单个会话可以用 SET synchronous_commit = local 绕过。在 Patroni 下,请用 synchronous_mode 管理,而不是手动设置。