作者:瀚高PG实验室(Highgo PG Lab)-天蝎座
PG支持一主多备流复制,并且可以设置一个或多个同步备节点,PG9.6时只支持基于优先级的同步备库方式,PG10的synchronous_standby_names参数新增ANY选项,可以设置任意一个或多个备库为同步备库,这种基于Quorum的同步备库方式是PG10 版本的新特性,被称为同步复制优选提交。
synchronous_standby_names参数用来指定同步备库列表,PG10参数值有以下三种方式:
standby_name
FIRSTnum_sync (standby_name)
ANY num_sync(standby_name)
standby_name是指流复制备库的名称,这个名称由备节点recovry.conf文件中的primary_conninfo参数application_name选项指定,可以设置多个,使用逗号分隔,第一个为同步备库,其他为潜在的同步备库,9.5及以前版本最多允许设置一个同步备库。
FIRST表示基于优先级方式设置流复制备库,备库的优先级按备库列表的前后顺序排序,靠前的备库优先级高,num_sync指同步备库个数。示例: synchronous_standby_names=‘FIRST 2(s1,s2,s3)’
这种设置表示两个同步备库(s1,s2),s3为潜在备库。主库提交事务时,至少需要等待s1和s2备库完成接收WAL日志流并写入WAL日志文件后才能返回成功。
ANY表示基于quorum方式设置流复制备库,同步备库数量为任意num_sync个,假如有四个备库运行s1,s2,s3,s4 。示例: synchronous_standby_names=‘ANY 2(s1,s2,s3)’
这种设置表示列表中任意两个为同步备库,当主库上提交事务时,至少需要等待列表中任意两个备库完成接收WAL日志流并写入WAL日志文件后才能返回成功。s4不在列表,所以s4为异步备库。