Leader Election
解释多个节点为什么需要选出单一协调者,以及 term、quorum、lease 和 fencing 等机制如何避免旧 Leader 继续产生危险副作用。
[!info] related notes
- 所属 MOC:Distributed Systems MOC
- 前置:分布式系统、数据复制
- 相邻:分布式锁、服务发现
- 实现:etcd、Apache ZooKeeper
Leader Election
[!abstract] 一句话定义 Leader Election 让多个候选节点在同一任期(Term / Epoch)内选出一个被多数派认可的协调者,由它推进共享日志、分配任务或执行单写操作;系统还必须识别并隔离已经失去资格的旧 Leader。
为什么“谁先启动谁就是 Leader”不可靠
多个节点可能同时认为自己健康:
A cannot reach B
B cannot reach A
A: “B died, I am leader”
B: “A died, I am leader”
如果没有 Quorum、Epoch 和 Fencing,两边都可能执行写入,形成 Split Brain。
选举至少要解决四件事
- 唯一资格:同一 Term 内最多一个有效 Leader;
- 故障检测:何时认为当前 Leader 已不可用;
- 任期推进:新 Leader 使用更高 Term / Epoch;
- 旧 Leader 隔离:旧节点恢复后不能继续推进状态。
“选出一个名字”只是开始,真正目标是安全推进共享状态。
Quorum 的作用
多数派交集让两个互不相交的候选集合难以同时获得有效资格:
3 voters → quorum 2
5 voters → quorum 3
任何两个多数派必然至少共享一个成员,可用于保证已提交信息和新选举之间的连续性。
节点越多不代表越快:写入和选举需要更多通信,通常根据故障容忍目标使用 3 或 5 个投票成员。
Term / Epoch 为什么重要
Leader A: term 7
Leader B: term 8
即使 A 仍在运行,携带旧 Term 的请求也应被集群或下游拒绝。Term / Epoch 提供“新资格优于旧资格”的单调证据。
这也是 Fencing Token 的基础思想。
Failure Detection 不是事实证明
Heartbeat Timeout 只能说明“在预算内没收到响应”,可能原因包括:
- 节点崩溃;
- 网络分区;
- GC / Process Pause;
- 磁盘卡顿;
- 调度延迟。
因此 Failure Detector 给出怀疑,真正 Leader 资格仍应由 Quorum / Consensus 决定。
Lease-based Leader
Leader 持有有限期限 Lease,并持续续租:
lease valid → may act
lease expires → must stop
但旧 Leader 可能因 Pause 没意识到 Lease 已失效。保护外部数据库、文件或设备时,需要下游校验更高 Epoch / Fencing Token。
[!warning] 本地时钟不能单独证明领导权 “我看自己的 TTL 还没过”不足以证明 Quorum 仍认可当前节点。
Leader Election 与 Distributed Lock
- Election:选择长期协调者,常伴随 Term、日志和状态转移;
- Lock:临时保护某个临界区或资源。
实现原语可能相似,但生命周期、恢复和状态交接不同。拿到一个 Lock Key 不等于完成 Leader 状态恢复。
典型选举后流程
win election
→ load latest committed state
→ obtain new epoch / fencing token
→ reconcile unfinished work
→ begin serving writes
→ renew leadership
→ on loss, stop writes and release resources
如果新 Leader 不先恢复和 Reconcile,可能重复任务或遗漏状态。
观测重点
current leader / term
leader changes and election duration
quorum health
heartbeat / peer latency
leadership renewal failures
fenced stale requests
work duplicated during failover
频繁选举通常说明网络、磁盘、暂停、资源饱和或 Timeout 配置问题。
设计检查表
- 投票成员和 Quorum 规则明确。
- 每次 Leadership 带单调 Term / Epoch。
- 旧 Leader 的写入能被真正下游拒绝。
- 新 Leader 接管前恢复并 Reconcile 状态。
- Failure Detector 参数与真实延迟/暂停匹配。
- Leadership 丢失会传播 Cancellation 并停止副作用。
- 选举频率、时长和 Split-brain 防护可观测。