pg12主从同步模式搭建
服务器列表
主库 |
172.16.1.4 |
备库1 |
172.16.1.5 |
备库2 |
172.16.1.6 |
主库配置
wal_level = replica
fsync = on
synchronous_commit = on #同步配置至少为on
wal_sync_method = fsync
synchronous_standby_names = '*'
备库1
primary_conninfo = 'application_name=slave1 host=172.16.1.4 port=15432 user=repuser password=repuser'
recovery_target_timeline = latest #默认
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
备库2
primary_conninfo = 'application_name=slave2 host=172.16.1.4 port=15432 user=repuser password=repuser'
recovery_target_timeline = latest #默认
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
主从修改配置后操作
备库需要重启:pg_ctl restart
主库执行:pg_ctl reload(无需重启)
查看主从
当synchronous_standby_names = '*'时候,从库一个为同步模式,一个为可调整为同步的异步模式(当同步的down机后自动升级为同步)
sync_stat有三个值:
async: 异步
sync: 同步
potential: 虽然现在是异步模式,但是有可能升级到同步模式
调整备库都为同步的方法
主库调整
配置文件调整:
synchronous_standby_names = '2(slave1,slave2)'
pg_ctl reload
synchronous_standby_names参数各版本差异
9.6 |
num_sync ( standby_name [, ...] ) standby_name [, ...]
|
10以及以上 |
[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) 的设置将导致每个提交等待来自从备用服务器 s1、s2、s3和s4 中选择出来的三个更高级备用服务器的回复。其名称出现在列表前面的备用数据库被赋予更高的优先级,并将被视为同步。在列表后面出现的其他备用服务器代表潜在的同步备用服务器。如果任何当前的同步备用服务器因任何原因断开连接, 它将立即被次最高优先级的备用机器替换。关键字FIRST是可选的。
关键字ANY加上num_sync, 指定基于数量的同步复制,并使事务提交等待,直到它们的WAL记录被复制到 至少num_sync 个列出的备用服务器。例如,ANY 3 (s1, s2, s3, s4) 的设置将导致每个提交至少被s1、s2、 s3 和s4中的任意三个备用服务器回复处理。
FIRST和ANY是大小写无关的。 如果这些关键字用作备用服务器的名称,那么 standby_name必须是双引号引用的。
第三种语法在PostgreSQL版本9.6之前使用,并且仍然受支持。它与第一个使用FIRST和num_sync 等于1的语法相同。例如,FIRST 1 (s1, s2)和s1, s2 具有相同的含义:选择s1或s2作为同步备用。特殊项*匹配任何备用服务器名称。