#双复制组主备部署运维

双复制组主备部署是通过部署2套单机主备复制组,实现数据从一个复制组(主复制组)到另一个复制组(备复制组)的复制。在异地容灾场景中,推荐采用该部署方案,安装指南请查阅双复制组主备部署

# 使用规则

采用双复制组主备部署时,需遵循如下使用规则:

  • yasom仲裁选主不适用于双复制组主备部署。
  • 主复制组内采用一主多备配置时可以开启自动选主,备复制组的节点不参与自动选主。双复制组主备部署安装完成后,如果主复制组中的主备库数量大于等于3,会配置开启自动选主。
  • 仅在主复制组的全部节点均不可用时,才能执行组间failover将备复制组升为主复制组,否则会出现双主情况。
  • 执行组间switchover前,需要先关闭主复制组的自动选主,防止主复制组降备后自动升主。
  • 若备复制组的首节点故障无法接收主复制组的redo,此时备复制组不可用,只能通过手动切换备复制组的redo接收节点解决,具体操作请查阅备复制组内角色切换

# ARCHIVE_DEST_*参数配置

以双复制组容灾部署方案安装完YashanDB后,可执行如下命令,查看数据库状态。

$ yasboot cluster status -c yashandb -d

+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| hostid  | node_type | nodeid | pid  | instance_status | database_status | database_role | source_node | listen_address  | data_path             |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| host0001 | db     | 1-1:1  | 73132 | open       | normal      | primary    | -      | 192.168.1.2:1688  | /data/yashan/yasdb_data/db-1-1   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------+-------------------+-----------------------------------+
| host0002 | db     | 1-2:2  | 73199 | open       | normal      | standby    | 1-1:1    | 192.168.1.3:1688  | /data/yashan/yasdb_data/db-1-2   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------+-------------------+-----------------------------------+
| host0003 | db     | 1-3:3  | 73201 | open       | normal      | standby    | 1-1:1    | 192.168.1.4:1688  | /data/yashan/yasdb_data/db-1-3   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------+-------------------+-----------------------------------+
| host0004 | db     | 2-1:4  | 73362 | open       | normal      | standby    | 1-1:1    | 192.168.10.5:1688 | /data/yashan/yasdb_data/db-2-1   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------+-------------------+-----------------------------------+
| host0005 | db     | 2-2:5  | 73435 | open       | normal      | standby    | 2-1:4    | 192.168.10.6:1688 | /data/yashan/yasdb_data/db-2-2   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------+-------------------+-----------------------------------+
| host0006 | db     | 2-3:6  | 73499 | open       | normal      | standby    | 2-1:4    | 192.168.10.7:1688 | /data/yashan/yasdb_data/db-2-3   |
+----------+-----------+--------+-------+-----------------+-----------------+---------------+-------------+-------------------+-----------------------------------+

根据回显信息可知,分为Group 1(主复制组)和Group 2(备复制组)两个组,组内各有3个节点,假设NODE1-1为主库,NODE2-1为备复制组首节点,则NODE1-2、NODE1-3、NODE2-1均为备库,NODE2-2、NODE2-3均为级联备。

# 主复制组

Group 1作为主复制组,其组内节点的配置要求如下:

  • 主复制组支持开启自动选主功能,所有节点应打开自动选主功能HA_ELECTION_ENABLED=TRUE,且NODE1-1、NODE1-2、NODE1-3三个节点均参与自动选主。
  • 主复制组的主库(可能是NODE1-1、NODE1-2、NODE1-3任意一个)需向备复制组的首节点NODE2-1发送redo日志,因此Group 1中的所有节点都必须配置ARCHIVE_DEST_4=NODE2-1。由于备复制组的节点NODE2-1不参与自动选主,因此ARCHIVE_DEST_4链路中还应配置DISABLE_ELECTION=TRUE。
-- ARCHIVE_DEST_*=node*的写法仅为代指,实际应配置为目标节点的REPLICATION_ADDR
-- NODE1-1:
    HA_ELECTION_ENABLED=TRUE
    ARCHIVE_DEST_2=NODE1-2 VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_3=NODE1-3 VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_4=NODE2-1 DISABLE_ELECTION=TRUE VALID_FOR=PRIMARY_ROLE

-- NODE1-2:
    HA_ELECTION_ENABLED=TRUE
    ARCHIVE_DEST_1=NODE1-1 VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_3=NODE1-3 VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_4=NODE2-1 DISABLE_ELECTION=TRUE VALID_FOR=PRIMARY_ROLE

-- NODE1-3:
    HA_ELECTION_ENABLED=TRUE
    ARCHIVE_DEST_2=NODE1-2 VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_1=NODE1-1 VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_4=NODE2-1 DISABLE_ELECTION=TRUE  VALID_FOR=PRIMARY_ROLE

# 备复制组

Group 2作为备复制组,其组内节点的配置要求如下:

  • 备复制组不参与自动选主,所有节点必须关闭自动选主功能HA_ELECTION_ENABLED=FALSE。
  • NODE2-1作为主复制组的连接节点,既作为主库的备库,又作为级联备库的父级备库,故其配置不同于组内的其他节点。即无论NODE2-1为哪种角色始终需向NODE2-2和NODE2-3发送日志,因此指向NODE2-2、NODE2-3的ARCHIVE_DEST_*参数的生效角色应为ALL_ROLES。
  • 如果发生组间主备切换,Group 2成为新主复制组主库后需向新备复制组首节点NODE1-1发送日志,因此Group 2组内所有节点指向NODE1-1的ARCHIVE_DEST_1参数的生效角色应设置为PRIMARY_ROLE(即当前节点为主库时生效)。
-- ARCHIVE_DEST_*=node*的写法仅为代指,实际应配置为目标节点的REPLICATION_ADDR
-- NODE2-1: 
	HA_ELECTION_ENABLED=FALSE
    ARCHIVE_DEST_5=NODE2-2  VALID_FOR=ALL_ROLES
    ARCHIVE_DEST_6=NODE2-3  VALID_FOR=ALL_ROLES
    ARCHIVE_DEST_1=NODE1-1  DISABLE_ELECTION=TRUE  VALID_FOR=PRIMARY_ROLE  

-- NODE2-2: 
    HA_ELECTION_ENABLED=FALSE
    ARCHIVE_DEST_4=NODE2-1  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_6=NODE2-3  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_1=NODE1-1  DISABLE_ELECTION=TRUE  VALID_FOR=PRIMARY_ROLE         

-- NODE2-3: 
    HA_ELECTION_ENABLED=FALSE
    ARCHIVE_DEST_4=NODE2-1  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_5=NODE2-2  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_1=NODE1-1  DISABLE_ELECTION=TRUE  VALID_FOR=PRIMARY_ROLE

# 建库说明

双复制组主备部署的本质其实仍是一主多备多级联备的部署模型,如需重新建库,必须先建立主库然后分别对其备库和级联备库执行BUILD操作,同时初始化多个备库时,可由主库发起并行BUILD操作。

  1. 在主复制组主库(NODE1-1)执行如下语句,检查备库(NODE1-2、NODE1-3、NODE2-1)的状态并初始化。

    -- 在NODE1-1上执行
    -- v$archive_dest_status视图可以显示主库同所有备库的连接信息,CONNECTION字段为CONNECTED时表示主备网络相通,可以进行备库初始化
    SELECT CONNECTION,STATUS,DATABASE_MODE FROM V$ARCHIVE_DEST_STATUS;
    
    -- 发起并行BUILD
    BUILD DATABASE TO STANDBY (*);    
    
  2. 在备复制组的首节点(NODE2-1)上执行如下语句,检查级联备库(NODE2-2、NODE2-3)的状态并初始化。

    -- 在NODE2-1节点上执行
    SELECT CONNECTION,STATUS,DATABASE_MODE FROM V$ARCHIVE_DEST_STATUS;
    
    -- 发起并行BUILD
    BUILD DATABASE TO STANDBY (*);    
    
  3. 所有备库完成初始化与同步之后,需要检查备库的数据库角色以及同步状态是否正常。

    1. )在主复制组主库(NODE1-1)执行如下语句,检查备库(NODE1-2、NODE1-3、NODE2-1)的运行状态。

      -- 在NODE1-1节点上执行
      SELECT CONNECTION,STATUS,DATABASE_MODE FROM V$ARCHIVE_DEST_STATUS;
      
    2. )在备复制组的首节点(NODE2-1)上执行如下语句,检查级联备(NODE2-2、NODE2-3)的运行状态。

      -- 在NODE2-1节点上执行
      SELECT CONNECTION,STATUS,DATABASE_MODE FROM V$ARCHIVE_DEST_STATUS;
      

# 主备手动切换

主备手动切换可分为:

# 组间Switchover

如果对备复制组的首节点执行switchover,相当于主备复制组级别的主备角色切换,需要手动修改部分配置参数。

本文示例配置:Group 1为主复制组、Group 2为备复制组,NODE1-1为主库,NODE2-1为备复制组首节点,NODE1-2、NODE1-3、NODE2-1均为备库,NODE2-2、NODE2-3均为级联备。

  1. 按序关闭主复制组Group 1所有节点的自动选主功能,顺序为先备库后主库,即先关闭NODE1-3、NODE1-2再关闭NODE1-1的对应配置。

    # 以安装用户登录数据库所在服务器
    
    # 查看参数HA_ELECTION_ENABLED值,若为TRUE表示已开启
    $ yasboot cluster config show -c yashandb -q HA_ELECTION_ENABLED
    +------------------------------+
    | node   | HA_ELECTION_ENABLED |
    +------------------------------+
    | db-2-2 | FALSE               |
    +--------+---------------------+
    | db-2-1 | FALSE               |
    +--------+---------------------+
    | db-2-3 | FALSE               |
    +--------+---------------------+
    | db-1-3 | TRUE                |
    +--------+---------------------+
    | db-1-2 | TRUE                |
    +--------+---------------------+
    | db-1-1 | TRUE                |
    +--------+---------------------+
    
    # 关闭主复制组的自动选主再进行后续操作
    $ yasboot group config set -c yashandb -g 1 -k HA_ELECTION_ENABLED -v FALSE
    
  2. 修改备复制组Group 2首节点NODE2-1的ARCHIVE_DEST_*配置参数,将指向同组内其他节点的ARCHIVE_DEST_*的生效角色改为PRIMARY_ROLE。

    -- ARCHIVE_DEST_*=node*的写法仅为代指,实际应配置为目标节点的REPLICATION_ADDR
    -- NODE2-1: 
    ARCHIVE_DEST_5=NODE2-2  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_6=NODE2-3  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_1=NODE1-1  DISABLE_ELECTION=TRUE  VALID_FOR=PRIMARY_ROLE  
    
  3. 执行switchover操作,将NODE2-1升主。

    $ yasboot node switchover -c yashandb -n 2-1
    
  4. 升主完成后,修改NODE1-1节点的ARCHIVE_DEST_*配置参数,将指向同组内其他节点的ARCHIVE_DEST_*的生效范围改为ALL_ROLES。

    -- ARCHIVE_DEST_*=node*的写法仅为代指,实际应配置为目标节点的REPLICATION_ADDR
    -- NODE1-1:
    ARCHIVE_DEST_2=NODE1-2 VALID_FOR=ALL_ROLES
    ARCHIVE_DEST_3=NODE1-3 VALID_FOR=ALL_ROLES
    ARCHIVE_DEST_4=NODE2-1 DISABLE_ELECTION=TRUE VALID_FOR=PRIMARY_ROLE
    
  5. 按序开启新主复制组Group 2所有节点的自动选主功能,顺序为先主库后备库,即先开启NODE2-1再开启NODE2-2、NODE2-3的对应配置。

    $ yasboot group config set -c yashandb -g 2 -k HA_ELECTION_ENABLED -v TRUE
    

至此,完成主备组间切换。Group 1转变为备复制组,NODE1-1为备复制组首节点,NODE1-2、NODE1-3变为级联备。Group 2变为主复制组,NODE2-1变为主库,NODE2-2、NODE2-3变为备库。

# 组间failover

仅在主复制组的全部节点均不可用时,才能执行组间failover将备复制组升为主复制组,否则会出现双主情况。failover执行完成后需手动拉起旧主复制组的所有节点,保证双复制组模式正常运行。

本文示例配置:Group 1为主复制组、Group 2为备复制组,NODE1-1为主库,NODE2-1为备复制组首节点,NODE1-2、NODE1-3、NODE2-1均为备库,NODE2-2、NODE2-3均为级联备。

  1. 在备复制组Group 2首节点NODE2-1执行failover。

    $ yasboot node failover -c yashandb -n 2-1
    
  2. 节点升主后,修改节点的ARCHIVE_DEST_*配置参数,将指向同组内其他节点的ARCHIVE_DEST_*的生效角色改为PRIMARY_ROLE。

    -- ARCHIVE_DEST_*=node*的写法仅为代指,实际应配置为目标节点的REPLICATION_ADDR
    -- NODE2-1: 
    ARCHIVE_DEST_5=NODE2-2  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_6=NODE2-3  VALID_FOR=PRIMARY_ROLE
    ARCHIVE_DEST_1=NODE1-1  DISABLE_ELECTION=TRUE  VALID_FOR=PRIMARY_ROLE  
    
  3. 按序开启新主复制组Group 2所有节点的自动选主功能,顺序为先主库后备库,即先开启NODE2-1再开启NODE2-2、NODE2-3的对应配置。

    $ yasboot group config set -c yashandb -g 2 -k HA_ELECTION_ENABLED -v TRUE
    
  4. 启动旧主复制组Group 1所有节点至NOMOUNT阶段并关闭其自动选主功能。

    $ yasboot group start -c yashandb -g 1 -m nomount
    $ yasboot group config set -c yashandb -g 1 -k HA_ELECTION_ENABLED -v FALSE
    
  5. 启动旧主NODE1-1至到MOUNT阶段,执行降备操作。

    $ yasql sys/********@192.168.1.2:1688
    
    -- 启动旧主库(例如1-1)到MOUNT阶段
    SQL> ALTER DATABASE MOUNT;
    
    -- 在NODE1-1上执行降备操作
    SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
    
  6. 修改节点NODE1-1的ARCHIVE_DEST_*配置参数,将指向同组内其他节点的ARCHIVE_DEST_*的生效角色改为ALL_ROLES。

    -- ARCHIVE_DEST_*=node*的写法仅为代指,实际应配置为目标节点的REPLICATION_ADDR
    -- NODE1-1:
    ARCHIVE_DEST_2=NODE1-2 VALID_FOR=ALL_ROLES
    ARCHIVE_DEST_3=NODE1-3 VALID_FOR=ALL_ROLES
    ARCHIVE_DEST_4=NODE2-1 DISABLE_ELECTION=TRUE VALID_FOR=PRIMARY_ROLE
    
  7. 依次启动NODE1-1、NODE1-2以及NODE1-3至OPEN阶段。

  8. 如果新备复制组Group1启动后发现备库状态为"need repair",则必须按照报错信息重新修复或重建备库。

# 备复制组内角色切换

如果备复制组的首节点宕机或其他原因导致不可用,需切换其他节点为新的首节点接收主复制组的redo。建议选取与主复制组主库网络连接更为稳定的节点,作为新的首节点。

  1. 以安装用户登录数据库安装服务器。

  2. 执行如下命令,查看目标节点的ID。

    $ yasboot cluster status -c yashandb -d
    # nodeid中冒号前的部分即为节点ID,例如2-2:5对应的节点ID为2-2
    

    根据database_role和source_node字段可获取备复制组及其组内节点角色相关信息,并通过nodeid字段可以获取目标节点ID,例如2-2:5对应的节点ID为2-2。

  3. 执行如下命令,进行角色切换。

    $ yasboot node switch-remote-standby -n 2-2 -c yashandb
    
  4. 执行如下命令,确认切换结果。

    $ yasboot cluster status -c yashandb -d
    
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流