标准答案

  1. 候选者竞争一个带过期时间的租约,持有者定期续租,其他节点在租约过期后才可接管。
  2. 心跳失败不一定表示节点已死,也可能只是网络分区;判断必须以协调存储的租约和版本为准。
  3. 旧领导者恢复后不能继续写入,资源操作应带 fencing token 或版本,服务端拒绝旧 token。
  4. 选举机制要定义启动、失联、续租失败、接管和任务恢复,不能只实现“抢到一个锁”。

题目解析

Leader Election 只能在协调存储和通信条件下判断当前领导者,节点本地时钟和“我还活着”的感觉都不能证明租约仍有效。网络分区时旧领导者可能继续运行,但已经失去接管资格。

租约要有续租、过期、接管和版本递增,资源写入还要校验 fencing token 或版本。否则新领导者已经接管后,旧领导者恢复仍可能覆盖新结果。

故障测试要覆盖暂停进程、网络隔离、协调存储延迟和时钟异常,验证旧节点是否真的无法写入。仅观察心跳日志或选举结果,不能证明下游没有脑裂。

常见误区

  • 误区:只靠本地时间判断租约有效。改正:以协调存储的租约和版本为准,并为时钟漂移和网络分区设计保护。
  • 误区:旧领导者恢复后继续执行任务。改正:资源层校验 fencing token 或版本,拒绝已经过期的持有者。
  • 误区:把心跳成功当作业务写入安全。改正:心跳只能说明部分通信正常,最终写入仍需角色和令牌校验。

作者信息