主动构造可控网络分区场景验证脑裂恢复机制,需提前确认节点角色与基线、精准注入单向阻断等故障、分区期检查vip漂移与多leader、恢复期验证vip收敛与数据一致性。

测试网络分区下的脑裂恢复机制,关键不是等故障发生再看结果,而是主动构造可控的分区场景,验证系统能否在通信中断时维持数据一致、拒绝非法主节点升任,并在网络恢复后自动收敛至单一健康状态。
一、提前准备:可观测性与基线确认
没有监控的测试等于盲测。必须在注入故障前完成三项基础工作:
- 确认各节点当前角色(如 Keepalived 的 MASTER/BACKUP、ZooKeeper 的 Leader/Follower、Nacos 的 Raft 角色),记录 VIP 绑定位置、Leader 节点 IP、配置版本号;
- 部署统一日志采集(如 Filebeat + Elasticsearch)和指标监控(Prometheus 抓取 /metrics 端点),重点跟踪:心跳超时次数、选举事件、quorum 投票数、服务可用率、写入成功率;
- 用 curl 或 telnet 验证客户端访问路径是否始终路由到唯一有效节点,记录初始响应时间与内容一致性(例如页面嵌入的节点标识)。
二、精准注入:模拟典型网络分区方式
避免用“关网卡”这种粗暴方式——它无法复现真实网络抖动或单向丢包。推荐分层构造:
- iptables/nftables 流量拦截:在目标节点上执行 iptables -I INPUT -s 192.168.5.10 -p 112 -j DROP(VRRP 协议)或 iptables -I INPUT -s 192.168.5.20 -p tcp --dport 2181 -j REJECT(ZooKeeper),实现单向阻断;
- chaosblade 工具注入:对 RocketMQ Proxy 或 Nacos 节点执行 blade create network partition --interface eth0 --destination-ip 192.168.5.30,支持延迟、丢包、乱序组合策略;
- 物理链路隔离:若环境允许,拔掉私有网络(Interconnect)网线但保留管理网,专用于 Oracle RAC 或 ZooKeeper 磁盘心跳验证场景。
三、脑裂发生期:验证防御有效性
分区持续 10–30 秒后,立即检查以下信号是否符合预期:
- VIP 是否出现在两个节点上(ip addr show | grep "inet.*VIP")?若出现,说明 VRRP 决策失效,需检查优先级配置与 nopreempt 设置;
- ZooKeeper 或 etcd 日志中是否同时出现多个 "become leader" 记录?若有,法定人数(quorum)配置可能不足(如 4 节点集群未满足 ≥3 健康节点要求);
- 客户端持续请求是否返回错误(如 503、Connection refused)或跳变响应?稳定返回错误比跳变更安全,说明系统主动拒绝了分裂服务;
- 监控图表中是否触发 STONITH 动作(如 fence_kvm 日志)、仲裁节点告警(ZKFC 切换事件)或 auto_recovery 启动标记?
四、网络恢复后:验证自动收敛能力
恢复网络(如删除 iptables 规则、插回网线)后,观察 1–2 分钟内是否达成以下闭环:
- 所有节点日志显示重新进入 "JOINING" 或 "SYNCING" 状态,无持续 "LOOKING" 循环;
- VIP 自动从原备机撤回,仅保留在合法主节点;ZooKeeper 中仅一个节点保持 "LEADING" 状态;
- 客户端请求响应恢复正常且结果一致(如返回相同配置值、同一数据库主键序列);
- 系统自动完成数据校验(如 Nacos 的 Raft snapshot 加载、RAC 的 Cache Fusion 重同步日志),无手动干预提示。











