#定义同步备

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

YashanDB支持用户通过设置QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数自定义同步备。

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

自定义同步备(即设置QUORUM_SYNC_STANDBYS和REQUIRED_SYNC_STANDBYS参数)需遵循如下规则:

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

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

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

    • 在分布式部署中,两个参数均在安装时配置,不建议后续修改。

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

  • 若已开启自动选主,组内各主备库的两个参数的相应参数值必须一致,否则会出现数据库不一致问题。且不允许两个参数的值包含具体的备库名称。

# REQUIRED_SYNC_STANDBYS

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

  • *表示当前所有备库。

  • standby_name1, standby_name2, …表示具体的备库列表,必须使用真实的备库名称且不能重复,备库名称要求如下:

    • 单机部署中,备库名称的编号x需与ARCHIVE_DEST_x参数对应(例如ARCHIVE_DEST_1对应的备库名称应该为此处的standby_name1),可以通过查询V$ARCHIVE_DEST视图获取对应关系。

    • 分布式部署中,备库名称需与分布式集群部署配置文件中节点在组内顺序一致(例如节点组内第1个节点对应的备库名称应该为此处的standby_name1),可以通过查询DV$ARCHIVE_DEST视图获取对应关系。

示例(单机、分布式部署)

--主库事务提交,要确保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日志的备库达到指定条件后主库事务才能提交成功,参数值格式为'MAJORITY''ANY syncNum (备库列表)'

  • MAJORITY:默认值,表示至少需N/2个备库(即多数派)同步redo后,满足主库提交事务的条件,其中N为所有节点(包含主库)的数量,若计算结果为小数则直接向下取整。

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

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

    • syncNum的值:不能为零且不能大于()列表中的备库个数。

    • 备库列表:不能为空,长度不超过32个字符。*表示所有备库,如需直接罗列备库列表则格式为standby_name1, standby_name2, …,备库列表的配置要求同REQUIRED_SYNC_STANDBYS参数。

示例(单机、分布式部署)

-- 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 复制链接