作者:瀚高PG实验室 (Highgo PG Lab) - 波罗
同步复制要求在数据写入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 ; 不起作用