PostgreSQL synchronous_standby_names

满玉泽
2023-12-01

synchronous_standby_names

语法

[FIRST] num_sync ( standby_name [, ...] )
ANY num_sync ( standby_name [, ...] )
standby_name [, ...]

从上面的语法可以看出,可能的使用方式如下:

synchronous_standby_names ="2 (s1,s2,s3)"
synchronous_standby_names ="FIRST 2 (s1,s2,s3)"
synchronous_standby_names ="ANY 2 (s1,s2,s3)"
synchronous_standby_names ="s1,s2,s3"

其中前两种配置效果一样。
PostgreSQL版本 9.6 之前使用过第三种语法,目前也仍然支持。它和FIRST和num_sync等于1的第一种语法相同。例如,FIRST 1 (s1, s2)和s1, s2具有相同的含义:s1或者s2会被选中作为同步后备服务器。

牛逼的来了

synchronous_standby_names ="*"
synchronous_standby_names ="FIRST 2 (*)"
synchronous_standby_names ="ANY 2 (*)"

特殊项*匹配任意后备名称。如果 synchronous_standby_names 设置成 * 的具体表现为,pg_stat_replication 表中的 sync_state 字段,其中一个 standy 节点的 sync_state 为 sync,剩下的都是 potential;

synchronous_standby_names =“FIRST 2 (*)”,所有流复制链接到此主节点的 standy 节点中,两个是sync状态,剩下的都是potential状态;

synchronous_standby_names =“ANY 2 (*)”,所有流复制链接到此主节点的 standy 节点都是quorum状态。

pg_stat_replication 表中的 sync_state 字段的状态:

  1. FIRST语法下,同步的节点值为sync,异步的节点值为asyn;被匹配为同步的节点,但是被个数限制的值为 potential(此节点表现为异步);
  2. Any语法下,值为quorum,表现上没有同步和异步一说,一个写事务主节点收到指定数量的standy节点的反馈,接着就会给客户端返回事务执行成功;(表现待研究)

参考

http://postgres.cn/docs/12/warm-standby.html#SYNCHRONOUS-REPLICATION
http://postgres.cn/docs/12/runtime-config-replication.html

 类似资料:

相关阅读

相关文章

相关问答