zookeeper选举机制

一、概述

  1. 第一个阶段:数据恢复阶段

   每一个主机(节点)在启动之后,都会先查找当前主机(节点)中最大事务id

   2. 第二个阶段:选举阶段

  刚开始的时候,每一个节点都会选举自己当leader,并且将自己的选举信息发送给其他节点,和其他节点进行比较。经过多轮比较之后,会选出一个节点成为leader

二、细节
   1. 选举信息:
      a. 最大事务id
      b. 选举编号 - myid
      c. 逻辑时钟值 - 用于控制所有的节点处在同一轮选举上
   2. 比较过程:
      a. 先比较两个节点之间的最大事务id,谁的最大事务id大谁就胜出
      b. 如果事务id一致,则比较myid。谁的myid大谁就胜出
      c. 如果一个节点赢过一半及以上的节点,那么这个节点就会成为leader - 选举的过半性
   3. 如果leader产生宕机,那么剩余的Zookeeper节点会自动选举出一个新的leader,因此在Zookeeper中不存在单点故障
   4. 如果在集群中因为分裂而导致出现多个leader的现象称之为脑裂
   5. 在Zookeeper中,如果存活的节点数量不足整个集群中节点的数量的一半,那么这个时候Zookeeper集群不再选举也不对外提供服务 - 因此集群的节点个数一般也是奇数个
   6. Zookeeper会对每一次选出的leader分配一个全局的递增编号 - epochid。如果集群中出现了多个leader,那么Zookeeper就会kill掉epochid相对较小的leader
   7. 节点状态变化:
      a. looking/voting:选举状态
      b. follower:追随者
      c. leader:领导者
      d. observer:观察者
   8. 如果整个集群中已经存在leader,那么新添加的节点的事务id和myid无论是多少都只能成为follower

三、观察者
   1. 观察者的特点:既不参与投票也不参与选举,但是监听投票和选举结果,然后根据结果来执行任务
   2. 适用场景:集群节点数量多的时候可以将一部分节点设置为观察者;网络条件不稳定的情况下,可以将部分节点设置为观察者
   3. observer的存活与否并不影响集群是否对外服务。例如一个集群中有21个节点,其中14个节点是observer,那么即使这14个observer节点全部宕机,该集群也会正常对外提供服务,但是如果有4个follower节点宕机,则即使所有的observer都存活该集群也不对外提供服务

 

  

posted on 2019-09-22 22:18  洛谛19  阅读(398)  评论(0)    收藏  举报

导航