#定义同步备

在最大可用或最大保护模式,主库事务提交需要等待redo同步的备库称为同步备。默认情况下,同步备配置为需要多数派备库收到redo,主库事务才能提交成功。

Note:

单机部署中应称为同步备库,共享集群部署中应称为同步备集群,存算一体分布式集群部署中则应称为各个组的同步备节点。

后文统一采用为“主库”、“备库”作为代称。

YashanDB支持用户通过设置QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数自定义同步备,从而灵活调整主库事务提交成功的同步机制。自定义配置时需遵循如下规则:

  • 不同部署形态下,表现各异:

    • 在单机部署中,两个参数均支持在线设置,立即生效。

    • 在共享集群部署中,所有实例的REQUIRED_SYNC_STANDBYS参数配置必须完全一致,QUORUM_SYNC_STANDBYS参数不生效。

    • 在存算一体分布式集群部署中,同一个组内节点应该配置一致,否则可能出现异常。上述两个参数均会在安装时配置,不建议后续修改。

  • 自定义同步备仅在最大保护模式下生效,且需两个参数都满足时主库事务才能提交成功,例如设置QUORUM_SYNC_STANDBYS='ANY 2 (*)'且REQUIRED_SYNC_STANDBYS='standby2',redo同步到备库2且同步到另外任意1个备库后主库事务才能提交成功。

  • 主库的设置不会同步至备库,即每个节点可以独立设置上述参数,但建议同一个环境中所有节点的相应参数值保持一致。当各节点的上述两个参数中某个参数的配置不完全一致时,整个数据库环境始终以主库的配置为准(主备角色切换可能会引起配置变化)。

  • 若已开启自动选主,同一个环境中所有节点的上述参数配置必须一致(否则会出现数据库不一致问题),且不允许两个参数的值包含具体的备库名称。

  • 仅REQUIRED_SYNC_STANDBYS参数可以指定为ARCHIVE_DEST_x链路配置项DISABLE_ELECTION = TRUE的备库。

# REQUIRED_SYNC_STANDBYS

REQUIRED_SYNC_STANDBYS参数表示必须指定备库全部收到redo日志后主库事务才能提交成功,参数值格式为'*''standby_name1, standby_name2, …'

  • *表示当前所有备库。

  • standby_name1, standby_name2, …表示具体的备库列表,必须使用真实的名称且不能重复,备库名可查询GV$ARCHIVE_DEST视图的DB_UNIQUE_NAME字段获取。

示例

-- 查询备库信息
SELECT dest_name,service,db_unique_name,node_id FROM GV$ARCHIVE_DEST;
DEST_NAME         SERVICE                                                          DB_UNIQUE_NAME                    NODE_ID
----------------- ---------------------------------------------------------------- --------------------------------- ----------------------------------------------------------------
ARCHIVE_DEST_1    192.168.1.3:1689                                                standby1                          1-2
ARCHIVE_DEST_2    192.168.1.4:1689                                                standby2                          1-3

-- 确保standby2收到redo后,主库的事务才提交
ALTER SYSTEM SET REQUIRED_SYNC_STANDBYS ='standby2' SCOPE=BOTH;

-- 确保所有备库都收到redo后,主库的事务才提交
ALTER SYSTEM SET REQUIRED_SYNC_STANDBYS ='*' SCOPE=BOTH;

# QUORUM_SYNC_STANDBYS

QUORUM_SYNC_STANDBYS参数表示收到redo日志的备库达到指定条件后主库事务才能提交成功,且不能指定为ARCHIVE_DEST_x链路配置项DISABLE_ELECTION = TRUE的备库,参数值格式为'MAJORITY''ANY syncNum (备库列表)'

  • MAJORITY:默认值,表示至少有(N-d)/2个备库收到redo日志,主库事务才可以提交。若计算结果为小数则直接向下取整。

    • N:所有节点(包含主库)的数量。

    • d:备库的ARCHIVE_DEST_x链路参数的DISABLE_ELECTION = TRUE时不参与多数派的投票且不记入收到redo日志节点,该类备库的个数记为d。

  • ANY syncNum (备库列表):表示达到syncNum个数的备库同步redo后,满足主库提交事务的条件。配置要求如下:

    • ANY:必须大写且不能省略。

    • syncNum的值:不能为零且不能大于()列表中的备库个数。表示这组备库里,至少需要syncNum个备库收到redo日志,主库事务才可以提交。

    • 备库列表:不能为空,长度不超过32个字符。配置为*表示所有备库,如需直接罗列备库则格式为standby_name1, standby_name2, …,必须使用真实的备库名称且不能重复,备库名可查询GV$ARCHIVE_DEST视图的DB_UNIQUE_NAME字段获取。

    Caution:

    QUORUM_SYNC_STANDBYS参数不能设置为ARCHIVE_DEST_x链路配置项DISABLE_ELECTION = TRUE的备库,若备库列表中的所有备库均DISABLE_ELECTION = TRUE,则会报错。

示例(单机、存算一体分布式集群部署)

-- QUORUM_SYNC_STANDBYS默认值为MAJORITY
SHOW PARAMETER QUORUM_SYNC_STANDBYS;
NAME                            VALUE                
------------------------------- -------------------- 
QUORUM_SYNC_STANDBYS            MAJORITY     

-- 主库事务提交,要确保备库2和备库3中任意1个收到redo
ALTER SYSTEM SET QUORUM_SYNC_STANDBYS='ANY 1 (standby2, standby3)' SCOPE=BOTH;

-- 主库事务提交,要确保所有备库中任意1个备库收到redo
ALTER SYSTEM SET QUORUM_SYNC_STANDBYS='ANY 1 (*)' SCOPE=BOTH;
pdf-btn 下载文档 copy-btn 复制链接
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流