synchronous_standby_names

类型: string
上下文: sighup
重新开始: false

synchronous-replication所述,这个参数指定一个支持同步复制的后备服务器的列表。可能会有一个或者多个活动的同步后备服务器,在这些后备服务器确认收到它们的数据之后,等待提交的事务将被允许继续下去。同步后备服务器是那些名字出现在这个列表前面,并且当前已连接并且正在实时流传输数据(如pg_stat_replication视图中streaming的状态所示)的服务器。指定多于一台同步后备可以得到非常高的可用性并且能防止数据丢失。

用于这一目的的后备服务器的名称是其application_name设置,它在后备服务器的连接信息中设置。 在物理复制后备的情况下,这应该被设置在primary_conninfo设置中,如果设置了,默认是cluster_name的设置,否则为 walreceiver。 对于逻辑复制,可以在订阅的连接信息中设置。对于其他复制流消费者,请参考其文档。

这个参数使用下面的语法之一来指定一个后备服务器列表:[FIRST] num_sync ( standby_name [, ...] )ANY num_sync ( standby_name [, ...] )standby_name [, ...] 其中num_sync是事务需要等待其回复的同步后备服务器的数量,standby_name是一个后备服务器的名称。FIRST以及ANY指定从所列服务器中选取同步后备的方法。

关键词FIRST加上num_sync指定一种基于优先的同步复制,并且会让事务提交等待,直到它们的WAL记录被复制到基于优先级选择的num_sync台同步后备上为止。例如,设置FIRST 3 (s1, s2, s3, s4)将导致每次提交都等待来自三台较高优先级的后备机的答复,这三台后备机将从后备服务器s1s2s3以及s4中选出。在该列表中出现较早的后备服务器将被给予较高的优先级,并且将被考虑为同步后备。列表中出现的其他后备服务器表示潜在的同步后备。如果当前的任何同步后备因为某种原因断开连接,它将立刻被下一个最高优先级的后备服务器替代。关键词FIRST是可选的。

关键词ANY加上num_sync指定一种基于规定数量的同步复制,并且会让事务提交等待,直到它们的WAL记录被复制到所列出后备服务器中的至少num_sync台上为止。例如,设置ANY 3 (s1, s2, s3, s4)将导致每次提交会在收到s1s2s3以及s4中任意三台后备服务器的回答后立刻继续下去。

FIRSTANY是大小写不敏感的。如果这些关键词被用作后备服务器的名字,其standby_name必须被放在双引号内。

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

特殊项*匹配任意后备名称。

没有机制强制后备服务器名称的唯一性。在出现重复的情况下,匹配的后备之一将被认为是较高优先级,不过无法弄清到底是哪一个。

每一个standby_name都应该具有合法 SQL 标识符的形式,除非它是*。如果必要你可以使用双引号。但是注意在比较standby_name和后备机应用程序名称时是大小写不敏感的(不管有没有双引号)。

如果这里没有指定同步后备机名称,那么同步复制不能被启用并且事务提交将不会等待复制。这是默认的配置。即便当同步复制被启用时,个体事务也可以被配置为不等待复制,做法是将synchronous_commit参数设置为localoff

这个参数只能在postgresql.conf文件中或在服务器命令行上设置。

建议 [EN]

Special, see syntax for sync standby config. Don't get into this if you're not sure what you're doing.

条评论