跳转至

灾备集群

灾备集群说明

简介

数据库的灾备能力是评价数据库的重要指标之一。SeaboxMPP支持双集群同步/异步容灾。当主备集群有节点异常时,能够自动恢复。当主集群整体故障时,支持灾备集群备升主,快速代替主集群业务

配置方法

以下为灾备集群配置步骤:

  1. 配置两套SeaboxMPP集群环境,保证主备集群之间网络互通,主机之间互信。

  2. 在备份集群的seabox-site.yml配置文件中添加主集群scdcs的配置信息

    # 主集群scdcs配置信息
    primary_scdcs:
      base_service_port : 2379
      base_inner_port : 2380
      base_data_dir : /home/seabox/seabox-data-directory/scdcs
      setup:
        - hostname : node1
          address : 172.22.0.3
    
    # 备份集群scdcs配置信息
    scdcs:
      base_service_port : 2379
      base_inner_port : 2380
      base_data_dir : /home/seabox/seabox-data-directory/scdcs
      scdcs_top_path : /seabox_mirror1   # 须与主集群区分开,主集群默认"/seabox"
      setup:
        - hostname : node4
          address : 172.22.0.2
    
  3. 备份集群与主集群建立流复制,选择以下命令中的一个在备集群执行

    # 集群间建立异步流复制, 默认优先尝试rewind方式同步数据,如果失败后则使用basebackup同步数据
    seabox mirrorcluster initrep -a
    
    # 集群间建立同步流复制
    # 不指定参数--sync时,默认建立异步流复制模式
    seabox mirrorcluster initrep -a --sync
    
    # 如果备集群已经做过初始化流复制了,有一定的基础数据后,可以指定使用rewind方式与主集群再次建立流复制
    seabox mirrorcluster initrep -a -t rewind
    
    # 如果是备集群第一次初始化流复制,则可以指定basebackup方式,建立流复制
    seabox mirrorcluster initrep -a -t basebackup
    
    # 初始化流复制支持节点间并行,节点内根据参数-p parallel_degree并行, 默认2并行
    seabox mirrorcluster initrep -a -p 2
    
  4. 备份集群扩缩容

    # 扩容
    seabox mirrorcluster expand -f expand_file
    
    1) expand_file 记录了要扩容的节点详细信息, 格式 "host|address|port|datadir|dbid|content|role", 如下
    mirror1-master|mirror1-master|15302|/home/seabox/seabox-data-directory/executordd/primary/3|13|3|p
    mirror1-node1|mirror1-node1|15402|/home/seabox/seabox-data-directory/executordd/mirror/0/3|14|3|a
    mirror1-node2|mirror1-node2|15402|/home/seabox/seabox-data-directory/executordd/mirror/1/3|15|3|b
    
    2) 扩容时dbid,content,port等内容不能与当前集群topo冲突
    3) 如果扩容primary节点,须要保证主集群对应的primary节点存在
    
    # 缩容
    seabox mirrorcluster shrink -i dbid
    
    1) 目前只支持指定dbid, 每次缩容必须包含content对应的所有节点(primary,mirror), 多个dbid使用','分割, 如下:
    seabox mirrorcluster shrink -i 5,6,7,8
    2) dbid必须是当前topo中已经存在的节点dbid
    

状态查看

  1. 主集群能够显示备份集群状态信息,通过seabox status -a命令查看,命令结果中包含备集群当前状态:
mirror clusters:
+-------+----------+------+---------+------------+------------+
| host  | address  | port | status  | coor_state | exec_state |
+-------+----------+------+---------+------------+------------+
| node4 | node4    | 3000 | perfect | 0/1        | 0/6        |
+-------+----------+------+---------+------------+------------+
  1. 查看备份集群,seabox status -a 结果中,mode列显示与主集群的同步状态。

  2. 同步灾备集群中,mode列标记为s

  3. 异步灾备集群中,mode列标记为a

异常处理

自动恢复

双集群间节点异常自动恢复机制简介

  1. 备集群primary节点异常
  2. primary断开30s后,mirror1 promote升为新主,不提升时间线
  3. 新primary节点与主集群primary节点做rewind建立流复制
  4. mirror节点与备集群新主做rewind,完成后与新主建立流复制

备集群primary节点异常

  1. 备集群mirror节点异常
  2. 与备集群primary节点做rewind,完成后与主节点建立流复制

  3. 主集群primary节点异常

  4. 主集群按照原有处理逻辑操作,mirror节点升为新主
  5. 备集群如果检测到主集群发生了主从切换,则备集群primary节点与主集群新的primary节点做rewind并建立流复制

主集群primary节点异常处理

  1. 主集群mirror节点异常
  2. 备份集群不做任何处理

  3. 备集群primary节点与主集群primary节点流复制异常

  4. 主集群处理
    • 集群间是同步: 主集群发现集群间流复制异常超过30s,则更新主集群primary节点的standby_names,避免业务卡住
    • 集群间是异步: 无需任何处理
  5. 备集群处理
    • 流复制异常超过120s,与主集群的primary节点重新做rewind建立流复制

主备切换

在主集群无法工作的情况下,可以在备集群上执行以下命令,手动将备份集群升主,提供用户正常使用。

备份集群升主常用命令:

# 备份集群提升为主,并做数据拉平
# 升主后,主集群将被设置为只读。如果此时主集群无法访问,则跳过设置主集群只读
seabox mirrorcluster upgrade -m (--mode) all

# 检查备份集群一致性状态,打印结果需要闪回的节点信息
seabox mirrorcluster upgrade -c (--check)

# 备份集群升主后,可以通过以下命令清理主集群上灾备集群相关配置参数
seabox mirrorcluster upgrade -r (--reset)

详细参数信息参考seabox命令行工具手册seabox mirrorcluster upgrade