1 背景介绍

1.1 已有方案
CM(Cluster Manager)是MogDB 3.0引入的一款功能丰富的集群资源管理软件。其能够提供数据库集群的高可用仲裁、运
行状态监控(网络故障监控、文件系统监控)、故障自动切换、故障自动恢复,支持自定义资源监控。
- 优点
- 功能丰富、完备。
- 缺点
- 不支持CM两节点部署
1.2 客户价值
- 集群最小节点数限制从3节点缩减为2节点,带来显著的成本优势
- CM集群和数据库集群均能实现高可用,RPO=0
2 特性简介
2.1 方案简介
基于用户实际应用场景,为有效降低系统部署成本,5.0版本在数据库集群中引入第三方网关IP,同时,结合CM集群运行模式切换机制有效解决CM集群两节点部署模式下的自仲裁问题。同时支持配置CM集群故障切换策略和数据库集群脑裂故障恢复策略。集群最小节点数限制由3变2,带来显著的成本优势。
2.1.1 关键问题
2.1.1.1 CM集群高可用 – 参考CM仲裁网络
备实例基于其与网关IP的连通性判定自身是否升主,主实例基于其与网关IP的连通性判定自身是否降备。为了降低脑裂故障概率,提供可配参数支持自动故障切换和手动故障切换。
2.1.1.2 数据库集群高可用 – 参考流复制网络和业务网络VIP
备实例是否failover的判定除去基于流复制状态,额外增加对数据库集群VIP(选配参数)的连通性的探测,以此降低主实例故障的误判概率,进而降低脑裂故障概率。为了确保脑裂故障时数据库集群的数据一致性,提供可配参数支持自动故障恢复和手动故障恢复。手动故障恢复基于mog_xlogdump工具执行差异数据合并,确保数据一致性。
2.1.1.3 CM集群运行模式判定
依赖分布式配置管理中心DCC的集群状态信息:CM集群状态正常时,也即无网络分区故障场景下,主备实例的查询结果一致且两节点的角色分别为LEADER和FOLLOWER。一旦发生网络分区故障,主实例的查询结果中role值为FOLLOWER的节点上apply_index值在网络分区故障发生的时间内不会被更新,而备实例的查询结果中则不存在role值为LEADER的节点。此外,结合对端dcf端口连通性来进一步确认是否发生网络隔离。

两节点部署组网图
3 测试报告
3.1 CM集群自动故障切换
3.1.1 预置条件
1. cms_enable_failover_on2nodes=true, third_party_gateway_ip配置为有效IP且网络连通性正常,cms_network_isolation_timeout = 20;2. 存在网络分区故障
3.1.2 测试步骤
1. 两节点集群状态正常;2. 施加防火墙,模拟网络分区故障,阻断节点间网络;
iptables -I OUTPUT -d -j DROP; iptables -I INPUT -s -j DROP
3. 待集群状态稳定后查询集群状态;
3.1.3 预期结果
CM集群脑裂故障,所有实例均为primary角色
测试场景图示
3.2 CM集群手动故障切换
3.2.1 预置条件
1. cms_enable_failover_on2nodes=false, third_party_gateway_ip配置为有效IP且网络连通性正常,cms_network_isolation_timeout = 20;2. 存在网络分区故障
3.2.2 测试步骤
1. 两节点集群状态正常;2. 施加防火墙,模拟网络分区故障,阻断节点间网络;
iptables -I OUTPUT -d -j DROP; iptables -I INPUT -s -j DROP
3. 待集群状态稳定后查询集群状态;
3.2.3 预期结果
CM集群有主实例,原始主实例角色不变,原始备实例角色同样不变
测试场景图示
3.3 数据库集群自动故障恢复
3.3.1 预置条件
1. cms_enable_failover_on2nodes=true, third_party_gateway_ip配置为有效IP,cms_enable_db_crash_recovery = on;2. CM集群脑裂故障且完成自动故障恢复;
3.3.2 测试步骤
1. 两节点集群状态正常;2. 施加防火墙,模拟网络分区故障,阻断节点间网络;
iptables -I OUTPUT -d -j DROP; iptables -I INPUT -s -j DROP
3. 待集群状态稳定后查询集群状态;
4. 消除防火墙,模拟网络分区故障消失,恢节点间网络;
iptables -I OUTPUT -d -j ACCEPT; iptables -I INPUT -s -j ACCEPT
5. 待集群状态稳定后查询集群状态;
3.3.3 预期结果
CM集群和数据库集群状态正常,实例角色均一主一备
测试场景图示
3.4 数据库集群手动故障恢复
3.4.1 预置条件
1. cms_enable_failover_on2nodes=ture, third_party_gateway_ip配置为有效IP,cms_enable_db_crash_recovery = off;2. CM集群脑裂故障且完成自动故障恢复;
3.4.2 测试步骤
1. 两节点集群状态正常;2. 施加防火墙,模拟网络分区故障,阻断节点间网络;
iptables -I OUTPUT -d -j DROP; iptables -I INPUT -s -j DROP
3. 待集群状态稳定后查询集群状态;
4. 消除防火墙,模拟网络分区故障消失,恢复节点间网络;
iptables -I OUTPUT -d -j ACCEPT; iptables -I INPUT -s -j ACCEPT
5. 待集群状态稳定后查询集群状态;
3.4.3 预期结果
CM集群状态正常,实例角色均为一主一备;数据库集群仅一个primary实例运行,另一个实例为Manually stopped状态
测试场景图示
4 其他说明
MogDB产品针对CM支持两节点部署特性一共提供了两个版本:MogDB V3.1,MogDB V5.0。需要注意的是,前述两个版本功能上无差异,仅在设计细节差异,且MogDB5.0版本的实现属于恩墨贡献到OG社区5.0版本的回合版本。




