Split Brain 101
文章目录
前言
在现代互联网系统中,分布式系统 被广泛应用来提高可用性、扩展性与容错性。但网络的不稳定、节点的故障或管理上的分歧,常常会引发一个危险的问题:Split Brain(脑裂)。
Split Brain 是分布式系统设计中的“梦魇之一”,它会导致多个节点误认为自己是“主节点”,从而产生数据冲突、重复写入、状态紊乱等严重问题。
定义
在分布式系统中常定义如下:
Split Brain is a condition in a distributed system where two or more parts of the system believe they are the authoritative or primary node, often due to a network partition.
一句话:Split Brain 就是多个节点在网络隔离后都认为“自己才是老大”。
工作原理
一句话:当集群发生网络分区或节点故障时,两个或多个子集误以为对方失联并各自“称王”,导致写入冲突。
举个例子:在一个主从架构中,网络分区发生后,原主节点 A 和备份节点 B 无法通信。如果没有正确的协调机制,A 和 B 都可能继续对外提供写服务,最终出现“双主写入”的问题。
Split Brain 典型诱因:
- 网络分区(Network Partition)
- 心跳机制不可靠或延迟高
- 没有正确实施 quorum、lease 或 fencing
- 主节点挂了但没有选举新主,旧主“诈尸”后重启写入
属性与指标
常见关注的属性与指标如下:
-
网络连通性 Split Brain 的本质是网络隔离,底层通信健康度是根因。
-
主节点唯一性 保证同一时刻全系统只有一个主节点(Leader)。
-
数据一致性 Split Brain 期间产生的冲突写入会破坏一致性。
-
可用性 vs 安全性权衡 为避免脑裂,系统可能牺牲部分可用性(如拒绝写)。
-
分区检测机制 是否有检测网络分区并触发 failover 的机制。
-
恢复策略与冲突解决机制 分区合并后,如何解决“冲突数据”。
类型
按场景分类
-
主从系统中的 Split Brain 常见于 Redis Sentinel、Elasticsearch、PostgreSQL 主备等系统。
-
多主系统中的 Split Brain 如 Cassandra、MongoDB 在分区期间若 quorum 没控制好,会造成一致性问题。
-
高可用集群控制平面中的脑裂 如 Kubernetes 多个 controller-manager 都认为自己是 leader。
按触发原因分类
- 网络分区导致
- 服务端检测延迟或心跳丢失
- 手动干预或脚本误操作
- 租约失效未被正确 Fencing
Split Brain 与程序关系
Split Brain 一般发生在“高可用组件”中,因此与以下模块高度相关:
-
Leader Election 模块
- 多节点竞选主节点,需使用如 Paxos、Raft、Zookeeper 等算法。
- 若没有 quorum 机制,可能产生多个主节点。
-
Lease & Fencing 机制
- 未正确使用 fencing token 防止旧主误写入。
-
分布式锁系统
- 多个服务获取到“同一把锁”,产生资源争夺。
-
分布式缓存/数据库
- 多个副本并发写入,数据版本不一致。
程序设计中,务必实现如下策略:
- 引入 quorum 机制,拒绝无 quorum 的写入;
- 使用 fencing token,阻止过期节点写入;
- 实现 leader lease 或 election,保障主节点唯一性;
- 定期健康检查与 failover 策略,及时隔离或恢复节点。
常见系统中 Split Brain 的表现及应对
系统 | Split Brain 表现 | 防护措施 |
---|---|---|
Redis Sentinel | 两个 master 同时存在 | 哨兵投票选主,建议加 fencing |
Zookeeper | quorum 不足也能写入 | 配置正确 quorum,避免过小集群 |
Elasticsearch | 多个主节点,集群状态不一致 | 使用 minimum_master_nodes,升级为 Zen 2 协议 |
PostgreSQL + repmgr | 主备切换不一致,数据冲突 | 使用 fencing + VIP failover |
Cassandra | 网络分区后副本产生不一致写入 | 配置正确 consistency level(如 QUORUM) |
常用工具/协议防止 Split Brain
-
Zookeeper / etcd 提供一致性选主和 fencing 机制。
-
Raft / Paxos 算法 实现强一致选主,确保主节点唯一性。
-
Fencing Token 租约控制+递增 token,避免旧主“诈尸写入”。
-
Quorum 机制 无法达到法定多数的副本自动降为只读。
-
Corosync + Pacemaker Linux 下常用高可用工具,内建脑裂检测机制。
文章作者 沉风网事
上次更新 2018-10-25