PostgreSQL 之 同步流复制的实现

同步复制要求在数据写入Standby数据库后,事务的commit才返回,所以Standby库出现问题时,会导致主库被hang住。

解决这个问题的方法是启动两个Standby数据库,这两个standby数据库只要有一个是正常的,就不会让主库hang住。所以在实际应用中,同步流复制,总是有1个主库和2个以上的Standby库。

 

同步复制的主要配置

实现同步复制主要是在主库上设置postgresql.conf配置参数synchronous_standby_names

这个参数指定多个Standby的名称,各个名称通过逗号分隔,而Standby名称是在Standby连接到主库时,由连接参数"application_name"指定的。

 

示例:主库修改postgresql.conf

vi postgresql.conf

synchronous_standby_names = 'standby01,standby02'

 

同步复制的主要配置

要使用同步复制,在Standby数据库的recovery.conf里的primary_conninfo一定要指定连接参数"application_name"

 

从节点recovery.conf的配置示例:

------

standby_mode = 'on'

primary_conninfo = 'application_name=standby01 user=repl password=111111 host=192.168.137.220 port=1921 sslmode=disable sslcompression=1'

 

会话级别控制异步、同步复制

当主库已配置参数synchronous_standby_names = standby01 *

会话执行:set synchronous_commit = off;  

当前会话可以取消同步复制,改为异步复制。

 

当主库注释配置参数synchronous_standby_names =

会话执行:set synchronous_commit = on ;  不起作用


by 波罗

你可能感兴趣的:(PostgreSQL,Highgo,DB)