写点什么

zookeeper- 集群 leader 选举

作者:zarmnosaj
  • 2022 年 7 月 20 日
  • 本文字数:814 字

    阅读完需:约 3 分钟

服务器状态

每一个在集群环境中的 zookeeper 服务器节点,都有一个服务器状态,描述集群中处于的角色或包含的信息,分别有 4 种:


  1. looking:寻找 leader 状态。当服务器处于该状态时,它会认为当前集群中没有 leader,故进入 leader 选举状态。

  2. leading: 领导者状态。表明当前服务器角色是 leader。

  3. following: 跟随者状态。表明当前服务器角色是 follower。

  4. observing:观察者状态。表明当前服务器角色是 observer。

服务器启动时期的 leader 选举

在集群的初始化阶段,只有一台 zookeeper 服务器节点启动时,一个节点无法进行 leader 选举,当有第二台服务器启动时,此时两台机器可以相互通信,每台机器都试图找到 leader,于是进入 leader 选举过程。过程如下:


  1. 每个 server 发出一个投票。最开始的时候,为选举 leader 服务器来进行投票,每次投票会包含所推举的服务器的 myid 和 zxid,此时 server1 的投票为(1, 0),server2 的投票为(2, 0),然后各自将这个投票发给集群中其他机器。

  2. 集群中的每台服务器接收来自集群中其他服务器的投票。

  3. 处理投针对每一个投票,服务器都需要将别人的投票和自己的投票进行处理,处理规则:

  4. 首先检查 zxid。zxid 比较大的服务器优先选举为 leader。

  5. 如果 zxid 相同,那么就比较 myid。myid 较大的服务器被选为 leader 服务器。

  6. 对于 Server1 而言,它的投票是(1, 0),接收 Server2 的投票为(2,0),首先会比较两者的 zxid,均为 0,再比较 myid,此时 server2 的 myid 最大,于是更新自己的投票为(2, 0),然后重新进行投票,对于 server2 而言,无须更新自己的投票,只是需要再次向集群中所有机器发出上一次投票信息即可。

  7. 进行投票统计。每次投票以后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于 server1、server2 而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出了 leader

  8. 改变服务器状态。一旦确定了 leader,每个服务器就会更新自己的状态,如果是 follower,那么就变更为 following,如果是 leader,就变更为 leading。

发布于: 刚刚阅读数: 3
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020.02.06 加入

成都后端混子

评论

发布
暂无评论
zookeeper-集群leader选举_7月月更_zarmnosaj_InfoQ写作社区