zookeeper选举过程

2019-12-02  本文已影响0人  冷月成双

Leader 选举

选举算法 :

  1. leaderElection
  2. AuthFastLeaderElection
  3. FastLeaderElection(zookeeper默认使用)

相关概念 :

选举流程 :

一 、启动服务器时 leader 选举流程

Leader选举流程

投票元素包括:所推举的服务器的myid和zxid,我们以(myid,ZXID)的形式表示

  1. 每个 server 都发出投票 ; server1 的投票为 (1,0),server2 的投票为(2,0),然后发给集群中的其他所有的机器

  2. 接收来自其他服务器的投票 : 接收到投票后首先判断该投票的有效性,包括检查是否是本轮投票,是否来自 Looking 状态的服务器

  3. 处理投票 : 投票Pk规则

    • 优先检查 ZXID.ZXID 比较大的服务器优先作为 Leader

    • 如果 ZXID 相同,那么就比较 myid.myid 比较大的服务器作为 Leader 服务器

      所以 server1 是(1.0),接收到的是 (2,0) 比较之后更新自己的投票为(2,0),然后重新将投票发出去.server2 不需要更新自己的投票信息,只是再一次向集群中所有机器发出上一次投票信息即可.

  4. 统计投票

    每次投票后,服务器统计投票判断是否已经有过半 (n/2+1) 的机器收到相同的投票信息.对于 server1 和 server2 服务器来说都统计出集群中已经有两台服务器接受了 (2,0) 这个投票信息.所以认为已经选出了 Leader

  5. 改变服务器状态

    确定了 Leader,每个服务器就会更新自己的状态,如果是 Follower,就变更为 FOLLOWiNG,如果是 Leader,就变为 LEADING.

二、服务器运行期间的leader选举:

假设当前正在运行的 Zookeeper 服务器由3台机器组成,分别是 Server1、Server2、Server3.当前 leader 是Server2.假设,leader挂了,这时就要开始 leader选举.

  1. 变更状态
    leader挂了之后,所有的非 Observer 服务器都会将自己的状态变更为LOOKING,然后开始进入 Leader 选举流程.

  2. 每个Server发出投票
    运行期间,服务器上的 ZXID 可能不同,假定 Server1的 ZXID 为123,Server3的ZXID 为122.第一次投票中,Server1 和 Server3 都会投自己,即分别产生投票(1,123)和(3,122),然后各自将这个投票发给集群中所有机器.

  3. 接收各个服务器的投票

  4. 处理投票
    和上面处理规则一样,由于 Server1 的ZXID 为123,Server3的 ZXID 为122,所以Server1会成为 Leader

  5. 统计投票

  6. 改变服务器状态

上一篇 下一篇

猜你喜欢

热点阅读