zookeeper----leader的选举原理

目录

      • **需要明白的参数:**
    • **⭐第一次选举(重启后的选集)**
        • **⭐选举过程**
        • **⭐选举的特点**
    • **⭐第二次选举(运行中的重新选举)**
        • **选举过程**
    • **⭐选举算法实现**

需要明白的参数:

在这里插入图片描述

  • myid:每台服务器,每个节点的唯一标识,不可重复

  • zxid:事务id,初始值为0,每完成一次读写操作,都会+1
    (leader先完成一次,再由follower按序依次完成)

  • epoch:每个leader的任期代号,对于某个节点,每经过一次leader的选举成功,+1

当某个节点挂掉重启后,正好参与一次选举,那么它的epoch为“1”

⭐第一次选举(重启后的选集)

(五个节点组成的集群)
注:
zoo.cfg文件配置的server的顺序,可知节点的启动顺序

第一次选举与myid有重要联系,超过半数节点的投票的节点,当选leader

  • 投票原则:
    比较myid,myid小的节点,把票投给myid大的节点
  • 例:
    Hadoop101的myid为1
    Hadoop102的myid为2
    Hadoop103的myid为3
    Hadoop104的myid为4
    Hadoop105的myid为5
⭐选举过程

每个节点给各自投票

此时每个节点各一票

广播投票(原则上比较myid)

101投给102

102把自身现有的两票投给103

103现在有3票,超过了集群一半个数的票,Hadoop103当选leader

104105即使myid更大,但已经选举出了leader,此时也无济于事

达成共识

当某台服务器获得 超过半数(Quorum) 的投票时,成为 Leader,状态变为 LEADING;其他服务器变为 FOLLOWING

⭐选举的特点
  • 所有服务器的 zxid 均为 0,因此 myid 更大的服务器会胜出
  • 生产环境中通常会将 myid 最大的服务器最后启动,避免重复选举

⭐第二次选举(运行中的重新选举)

在这里插入图片描述
当节点发生宕机,失去与集群其他节点的通讯时,会请求选举,此时就有如下两种情况

  • 宕机的节点是follower,此节点与其他节点交流时,发现leader还存在,则放弃选举
    并将此节点与leader连接,并动态同步一下

  • 宕机的节点是leader,开始选举

选举过程
  1. 自投票阶段:每台服务器投票给自己投票内容为 (myid, 当前最大 zxid, 当前 epoch+1)

  2. 广播与比较:同样广播投票并按以下优先级比较:

  • 优先 epoch 更大的服务器,epoch大者,直接胜出
  • 其次zxid更大的服务器,epoch相同时,比较zxid,大者胜出
  • zxid 相同则选择 myid 更大的服务器
  1. 同步确认:新 Leader 产生后,会与 Follower 同步数据,确保所有服务器的数据一致

⭐选举算法实现

ZooKeeper 默认使用 FastLeaderElection 算法(基于 TCP 通信),核心流程如下:

  1. LOOKING 状态:服务器发起投票
  2. 投票队列:维护一个投票集合,记录收到的所有投票
  3. 统计 Quorum:检查是否有投票获得半数以上支持
  4. 状态切换:确认 Leader 后,切换为 FOLLOWINGLEADING
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值