2. etcd 集群架构:节点角色、节点规划与脑裂防护

etcd 使用 Raft 共识算法 来保证分布式系统中的数据一致性与高可用性。理解集群架构是制定备份策略与蓝绿发布回滚方案的基础。本节将深入剖析节点角色、奇数节点规划原则以及网络分区(脑裂)的防护机制。

2.1 节点角色:Leader、Follower、Candidate

在 Raft 协议中,etcd 集群中的每个节点在任一时刻都处于以下三种角色之一:

角色 职责 关键行为
Leader(领导者) 处理所有客户端写入请求,负责日志复制与数据同步。 定期向 Follower 发送心跳(Heartbeat);在多数节点确认后提交日志条目。
Follower(跟随者) 被动接收来自 Leader 的日志复制与心跳,处理只读查询。 若在选举超时(Election Timeout)内未收到 Leader 心跳,则转为 Candidate。
Candidate(候选者) 发起新一轮 Leader 选举,争取成为新 Leader。 向其他节点发送投票请求(RequestVote);获得多数票后晋升为 Leader。
关键指标: 选举超时时间通常为 100ms ~ 500ms(随机化),心跳间隔为 50ms ~ 100ms。合理的超时配置能减少不必要的选举,提升集群稳定性。
Raft 角色状态机与转换 Follower 被动接收日志与心跳 Candidate 发起选举,请求投票 Leader 处理写入,复制日志 选举超时 获得多数票 Leader 失联 / 网络分区 选举超时 / 收到更高任期心跳 💡 角色转换是 Raft 安全性的核心:同一任期最多只有一个 Leader,保证日志一致性。 Candidate 在选举失败后会回退到 Follower,避免无限选举。

2.2 集群节点数规划:为什么必须是奇数节点

etcd 集群的节点数量直接影响其容错能力和选举成功率。Raft 要求写入操作必须获得 多数(Quorum) 节点的确认,Quorum 计算公式为:Quorum = ⌊N/2⌋ + 1。

集群节点数 (N) Quorum (多数) 最大容忍故障节点数 推荐场景
1 1 0 开发/测试环境,无高可用要求
3 2 1 生产环境最小推荐配置
5 3 2 高可用生产环境,允许同时故障 2 节点
7 4 3 超大规模集群,但写入性能会下降
为什么不用偶数节点? 以 4 节点为例,Quorum = 3,最大容忍故障数 = 1。与 3 节点集群相比,容错能力相同,但多了一个节点带来的网络开销和选举复杂度反而增加。奇数节点在相同容错能力下,节点数更少,性能更优。

2.3 网络分区与脑裂防护

网络分区(Network Partition)是指集群中部分节点因网络故障无法互相通信。在 etcd 中,Raft 协议通过 Quorum 机制 天然防止脑裂(Split-Brain)——即多个分区各自选举出 Leader 导致数据不一致。

网络分区场景:5 节点集群脑裂防护 分区 A(多数分区) Leader Follower Follower 分区 B(少数分区) Candidate Candidate 网络断裂 ✅ 脑裂防护结果: 分区 A(3 节点)拥有 Quorum(≥3),Leader 正常工作,可处理读写请求。 分区 B(2 节点)无法获得多数票,选举失败,所有节点保持 Follower 状态,拒绝写入。 💡 只有拥有多数节点的分区才能选出 Leader 并继续服务,少数分区自动进入只读或不可用状态,杜绝双 Leader 脑裂。
生产环境避坑: 若集群节点数为偶数(如 4 节点),网络分区为 2:2 时,两个分区都无法获得 Quorum(需要 3 票),集群将完全不可用。因此,始终使用奇数节点 是 etcd 集群规划的铁律。

2.4 节点规划最佳实践

  • 生产环境最低 3 节点:容忍 1 节点故障,满足大多数业务高可用需求。
  • 跨可用区部署:将节点分散到 3 个不同的物理或云可用区,避免单点故障。
  • 避免单节点集群用于生产:无容错能力,一旦故障则数据完全丢失。
  • 节点数不宜超过 7:节点越多,Leader 复制日志的网络开销越大,写入性能会显著下降。
  • 监控选举频率:频繁的 Leader 选举通常意味着网络不稳定或节点负载过高,需及时排查。
与备份/回滚的关系: 理解集群架构有助于设计备份策略——例如,备份操作应优先从 Follower 节点执行,避免对 Leader 造成额外负载;蓝绿发布回滚时,需确保新旧集群的 Quorum 健康,避免因节点数不足导致回滚失败。