本文共 1413 字,大约阅读时间需要 4 分钟。
digoal
2016-10-06
PostgreSQL , 9.6 , 同步多副本 , remote_apply , 全同步
在金融级应用场景中,2个副本通常是不够的。用户可能需要多个副本来满足高可用性和数据一致性的需求。例如,一主四从的配置中,主库之外还有2个需要同步的副本,其余副本可以为异步的备用副本。在这种情况下,读写分离是常见的做法,以扩展读的能力。
在PostgreSQL 9.6版本中,同步复制的机制得到了显著增强,特别是在remote_apply事务同步级别方面。这一改进使得事务提交过程更加严格一致,适用于异地读写分离场景。
syncrhonous_standby_names 参数用于配置同步副本的名称。支持以下两种写法:
num_sync (standby_name [, ...])
num_sync 是一个数字,表示需要同步的副本数量。standby_name 是备用节点的名称,需出现在recovery.conf文件中的application_name字段中,可以使用*表示所有备用节点。例如:
2 (s1, s2, s3, s4)
这表示2个副本被配置为同步副本,其余节点为异步副本。
如果未提供num_sync,默认配置为1个同步副本。
standby_name [, ...]
num_sync=1。syncrhonous_commit 参数用于配置事务的同步级别。可选值包括:on、remote_apply、remote_write、local、off。默认值为on,建议在金融级应用中保留默认设置。
on:提交事务会等待WAL记录在主库及其所有同步副本上持久化到磁盘。remote_apply:提交事务会等待WAL记录在主库及其所有同步副本上已被应用(即可读状态)。remote_write:提交事务会等待WAL记录在主库上持久化,但不等待同步副本写入磁盘。local:提交事务会等待WAL记录在主库上持久化,不等待同步副本。off:提交事务不会等待WAL记录持久化,可能导致数据丢失风险。syncrhonous_commit 参数也可用于配置事务的同步级别。通过以下命令可以在会话或本地级别调整:
SET [SESSION | LOCAL] configuration_parameter { TO | = } { value | 'value' | DEFAULT } 通过合理配置synchronous_standby_names和synchronous_commit,可以实现高度可靠的事务同步。
当synchronous_commit=remote_apply时,事务提交后生成的REDO记录必须在所有同步副本上已被应用(可读状态),才能返回给客户端成功结果。这样可以确保主库和同步副本的数据一致性。
在主库切换时,配置synchronous_commit=remote_apply可以显著降低切换延迟。备用节点在激活时无需等待REDO应用,可以快速切换为主库角色。
转载地址:http://anxfk.baihongyu.com/