zookeeper选举及脑裂问题笔记

       zookeeper集群启动后,各节点进入选举过程。以3节点集群为例,当server1启动后,它本身单独没法完成选举。须要等集群内其余节点启动。这时,server2启动后,两台机器能够相互通讯,每台机器都试图找到Leader,因而进入Leader选举过程。html


    (1) 每一个Server发出一个投票。因为是初始状况,Server1和Server2都会将本身做为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用(myid, ZXID)来表示,此时Server1的投票为(1, 0),Server2的投票为(2, 0),而后各自将这个投票发给集群中其余机器。服务器

   (2) 接受来自各个服务器的投票。集群的每一个服务器收到投票后,首先判断该投票的有效性,如检查是不是本轮投票、是否来自LOOKING状态的服务器。ide

   (3) 处理投票。针对每个投票,服务器都须要将别人的投票和本身的投票进行PK,PK规则以下spa

    · 优先检查ZXID。ZXID比较大的服务器优先做为Leader。orm

    · 若是ZXID相同,那么就比较myid。myid较大的服务器做为Leader服务器。server

  对于Server1而言,它的投票是(1, 0),接收Server2的投票为(2, 0),首先会比较二者的ZXID,均为0,再比较myid,此时Server2的myid最大,因而更新本身的投票为(2, 0),而后从新投票,对于Server2而言,其无须更新本身的投票,只是再次向集群中全部机器发出上一次投票信息便可。htm

   (4) 统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于Server一、Server2而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出了Leader。blog

   (5) 改变服务器状态。一旦肯定了Leader,每一个服务器就会更新本身的状态,若是是Follower,那么就变动为FOLLOWING,若是是Leader,就变动为LEADING。get

leader选举参考http://www.javashuo.com/article/p-yuxerins-cb.htmlit

脑裂问题参考https://www.cnblogs.com/kevingrace/p/12433503.html

相关文章
相关标签/搜索