灾备集群
灾备集群说明¶
简介¶
数据库的灾备能力是评价数据库的重要指标之一。SeaboxMPP支持双集群同步/异步容灾。当主备集群有节点异常时,能够自动恢复。当主集群整体故障时,支持灾备集群备升主,快速代替主集群业务
配置方法¶
以下为灾备集群配置步骤:
-
配置两套SeaboxMPP集群环境,保证主备集群之间网络互通,主机之间互信。
-
在备份集群的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
-
备份集群与主集群建立流复制,选择以下命令中的一个在备集群执行
# 集群间建立异步流复制, 默认优先尝试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
-
备份集群扩缩容
# 扩容 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
状态查看¶
- 主集群能够显示备份集群状态信息,通过seabox status -a命令查看,命令结果中包含备集群当前状态:
mirror clusters:
+-------+----------+------+---------+------------+------------+
| host | address | port | status | coor_state | exec_state |
+-------+----------+------+---------+------------+------------+
| node4 | node4 | 3000 | perfect | 0/1 | 0/6 |
+-------+----------+------+---------+------------+------------+
-
查看备份集群,seabox status -a 结果中,mode列显示与主集群的同步状态。
-
同步灾备集群中,mode列标记为s
-
异步灾备集群中,mode列标记为a
异常处理¶
自动恢复¶
双集群间节点异常自动恢复机制简介
- 备集群primary节点异常
- primary断开30s后,mirror1 promote升为新主,不提升时间线
- 新primary节点与主集群primary节点做rewind建立流复制
- mirror节点与备集群新主做rewind,完成后与新主建立流复制
- 备集群mirror节点异常
-
与备集群primary节点做rewind,完成后与主节点建立流复制
-
主集群primary节点异常
- 主集群按照原有处理逻辑操作,mirror节点升为新主
- 备集群如果检测到主集群发生了主从切换,则备集群primary节点与主集群新的primary节点做rewind并建立流复制
- 主集群mirror节点异常
-
备份集群不做任何处理
-
备集群primary节点与主集群primary节点流复制异常
- 主集群处理
- 集群间是同步: 主集群发现集群间流复制异常超过30s,则更新主集群primary节点的standby_names,避免业务卡住
- 集群间是异步: 无需任何处理
- 备集群处理
- 流复制异常超过120s,与主集群的primary节点重新做rewind建立流复制
主备切换¶
在主集群无法工作的情况下,可以在备集群上执行以下命令,手动将备份集群升主,提供用户正常使用。
备份集群升主常用命令:
# 备份集群提升为主,并做数据拉平
# 升主后,主集群将被设置为只读。如果此时主集群无法访问,则跳过设置主集群只读
seabox mirrorcluster upgrade -m (--mode) all
# 检查备份集群一致性状态,打印结果需要闪回的节点信息
seabox mirrorcluster upgrade -c (--check)
# 备份集群升主后,可以通过以下命令清理主集群上灾备集群相关配置参数
seabox mirrorcluster upgrade -r (--reset)
详细参数信息参考seabox命令行工具手册seabox mirrorcluster upgrade