#定义同步备
在最大可用模式和最大保护模式下,主机事务提交需要等待redo同步的备机,称为同步备。默认情况下,同步备指MAJORITY,即系统中需要多数派备机收到redo,主机事务才可提交成功。
YashanDB支持由用户自定义同步备,这通过设置QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数实现。
QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数支持在线设置,立即生效。
每个节点实例上均存在QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数且可以独立设置,主机的设置不会同步到备机。
只有当前主机上的QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数设置才起作用。但由于可能发生主备角色变化,当进行该参数设置的维护时,需要考虑到环境中所有的节点并对其操作。
# QUORUM_SYNC_STANDBYS
QUORUM_SYNC_STANDBYS参数的格式为: ANY syncNum (standby1,standby2,...)
。
(standby1,standby2,...)
表示一组备机的名称,该名称需与分布式集群部署配置文件中节点在组内顺序一致,如节点组内第一个节点对应的备机名称应该为此处的standby1。*
表示当前所有备机。- syncNum表示这组备机里,至少需要syncNum个备机收到redo日志,主机事务才可以提交。
- 该参数默认值为MAJORITY,默认至少有N/2个备机收到redo日志,主机事务才可以提交,其中N为所有节点(包含主机)的数量。
示例
--主机事务提交,要确保备机2和备机3里,任意一个收到redo
ALTER SYSTEM SET QUORUM_SYNC_STANDBYS='ANY 1 (standby2, standby3)' SCOPE=BOTH;
--主机事务提交,要确保所有备机里,任意一个收到redo
ALTER SYSTEM SET QUORUM_SYNC_STANDBYS='ANY 1 (*)' SCOPE=BOTH;
# REQUIRED_SYNC_STANDBYS
REQUIRED_SYNC_STANDBYS参数的格式为: standby1,standby2,...
。
standby1,standby2,...
表示一组备机的名称,该名称需与分布式集群部署配置文件中节点在组内顺序一致,如节点组内第一个节点对应的备机名称应该为此处的standby1。*
表示当前所有备机。- 该参数表示必须这组备机全部收到redo日志,主机事务才可以提交。
--主机事务提交,要确保standby2收到redo
ALTER SYSTEM SET REQUIRED_SYNC_STANDBYS ='standby2' SCOPE=BOTH;
--主机事务提交,要确保所有备机都收到redo
ALTER SYSTEM SET REQUIRED_SYNC_STANDBYS ='*' SCOPE=BOTH;
Note:
1.QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数可以同时设置,并同时生效。例如,当QUORUM_SYNC_STANDBYS设为'ANY 2 (*)',REQUIRED_SYNC_STANDBYS设为'standby2'时,表示主机的事务提交,必须在redo同步到备机2,且同步到另外的任意1个备机后,才能成功返回。
2.同步备的参数配置, 同一个组内节点应该配置一致,否则可能出现异常。