排查脑裂故障需三步:先确认是否真实发生(查主节点数、元数据一致性、选举日志);再定位隔离动作来源及合理性(查ha控制器日志、仲裁状态、存储心跳);最后判断隔离是否加剧危害(查vm双活、es分片状态矛盾、资源抢占日志激增)。

排查高可用集群因脑裂引发的故障隔离,关键不是“找隔离动作”,而是逆向定位“脑裂是否已发生、发生在哪一层、是否触发了错误的隔离响应”。脑裂本身是原因,隔离是系统应对策略(可能是正确动作,也可能是错误后果)。下面从实操角度分三步展开:
确认脑裂是否真实存在
不能仅凭服务异常就断定是脑裂。先验证集群是否分裂为多个独立决策单元:
- 检查主节点数量:用集群原生命令查当前活跃主节点数(如
etcdctl member list看是否有多个started成员但无通信;ES 用_cat/master?v查是否返回多个 master id) - 比对元数据一致性:在不同节点上执行相同元数据查询(如 ES 的
_cat/shards、ZK 的ls /brokers/ids),看结果是否不一致 - 观察日志中的选举痕迹:搜索
became leader、new election、stepped down等关键词,确认是否有多次非预期的主节点切换
定位隔离动作由谁触发、是否合理
脑裂后,系统常通过预设机制强制隔离“疑似异常”节点——但该机制可能误判:
- 查 HA 控制器日志:vSphere 看
hostd.log和fdm.log中关于 “isolation response” 的记录;Keepalived 查/var/log/messages中 VRRP 状态切换和notify_stop脚本执行痕迹 - 核对仲裁状态:Redis Sentinel 查
sentinel masters输出中quorum是否达标;ZooKeeper 查stat命令显示的法定人数(zookeeper.znode.parent下节点数是否 ≥ (n/2+1)) - 验证存储心跳是否被误判:vSphere 中检查
.vSphere-HA目录下信号文件更新时间;HDFS QJM 检查 JournalNode 日志中是否有rejecting edit log或fencing关键词
判断隔离结果是否加剧了脑裂危害
有些“隔离”实际放大了问题,需快速识别这类危险信号:
- 虚拟机双活:vSphere 中发现同一 VM 在两个主机上均处于
poweredOn状态(用vim-cmd vmsvc/getallvms或 Web Client 核对) - 写入分流:ES 集群中部分索引分片显示
STARTED,另一些显示INITIALIZING或RELOCATING,且不同节点上报的_cluster/health?level=shards结果矛盾 - 资源抢占日志激增:如 etcd 日志持续出现
raft: failed to send MsgVote to、ES 出现大量master_not_discovered_exception与NotMasterException并存










