乐闻世界logo
搜索文章和话题

Zookeeper 的 Leader 选举机制是怎样的?选举流程和规则是什么?

2月21日 16:24

答案

Zookeeper 的 Leader 选举机制是保证集群高可用性的核心,基于 ZAB 协议实现。

选举触发时机

  1. 集群启动时:所有节点参与选举,选出 Leader
  2. Leader 故障时:Follower 检测到 Leader 失效,触发重新选举
  3. Leader 主动退出:Leader 正常关闭,触发选举

选举算法

Zookeeper 使用 Fast Leader Election(快速领导者选举)算法:

投票结构

  • sid:服务器 ID,配置文件中指定
  • zxid:事务 ID,表示数据更新次数
  • epoch:选举周期,每次选举递增

选举规则

  1. 优先比较 zxid:zxid 越大,数据越新,优先当选
  2. 其次比较 sid:zxid 相同时,sid 越大优先当选

选举流程

  1. 初始化投票

    • 每个节点先投票给自己
    • 投票信息:(epoch, zxid, sid)
  2. 投票交换

    • 节点之间互相交换投票信息
    • 更新自己的投票状态
  3. 投票统计

    • 统计每个候选者的得票数
    • 超过半数节点支持的候选者当选
  4. 选举完成

    • 当选者成为 Leader
    • 其他节点成为 Follower
    • Leader 开始处理请求

选举状态

节点在选举过程中有以下状态:

  1. LOOKING:正在寻找 Leader,参与选举
  2. FOLLOWING:已找到 Leader,作为 Follower 运行
  3. LEADING:作为 Leader 运行
  4. OBSERVING:作为 Observer 运行

选举优化

快速选举

  • 节点优先投给数据更新最多的节点
  • 减少投票轮次,加快选举速度

投票验证

  • 验证投票信息的合法性
  • 防止无效投票干扰选举

超时机制

  • 设置合理的选举超时时间
  • 避免选举长时间阻塞

集群规模影响

  • 3 节点集群:2 个节点同意即可选举成功
  • 5 节点集群:3 个节点同意即可选举成功
  • 7 节点集群:4 个节点同意即可选举成功

注意事项

  1. 脑裂问题:通过过半机制避免
  2. 网络分区:分区后无法选举出 Leader
  3. 选举时间:通常在几秒内完成
  4. 数据一致性:选举期间不处理写请求
标签:Zookeeper