vlambda博客
学习文章列表

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 是一个后备服务器的名称。 FIRSTANY 指定从列出的服务器中选择同步备用数据库的方法。

关键字FIRST加上num_sync 指定基于优先级的同步复制,并使事务提交等待, 直到它们的WAL记录被复制到根据其优先级进行选择的 num_sync同步备用数据库。 例如,FIRST 3 (s1, s2, s3, s4) 的设置将导致每个提交等待来自从备用服务器 s1s2s3s4 中选择出来的三个更高级备用服务器的回复。其名称出现在列表前面的备用数据库被赋予更高的优先级,并将被视为同步。在列表后面出现的其他备用服务器代表潜在的同步备用服务器。如果任何当前的同步备用服务器因任何原因断开连接, 它将立即被次最高优先级的备用机器替换。关键字FIRST是可选的。

关键字ANY加上num_sync 指定基于数量的同步复制,并使事务提交等待,直到它们的WAL记录被复制到 至少num_sync 个列出的备用服务器。例如,ANY 3 (s1, s2, s3, s4) 的设置将导致每个提交至少被s1s2 s3 和s4中的任意三个备用服务器回复处理。

FIRSTANY是大小写无关的。 如果这些关键字用作备用服务器的名称,那么 standby_name必须是双引号引用的。

第三种语法在PostgreSQL版本9.6之前使用,并且仍然受支持。它与第一个使用FIRSTnum_sync 等于1的语法相同。例如,FIRST 1 (s1, s2)s1, s2 具有相同的含义:选择s1s2作为同步备用。特殊项*匹配任何备用服务器名称。