Zookeeper的leader选举过程

概念:

  • Zookeeper的服务器三种角色:Leader,Follower,Observer。Leader提供读和写,Follower提供读,参与过半投票,Observer只提供读,不参与投票,可以提高读性能
  • ZXID,事务ID,用来唯一标识一次服务器状态的变更
  • myid,服务器SID,一个数字,通过配置文件配置,唯一
  • 选举有两种情况,一是服务器启动的投票,二是运行期间的投票

最初启动时投票

  • 每个服务器发送一个投票(SID,ZXID),其中sid是自己的myid,初始阶段都将自己投为Leader。
  • 接收来自其他服务器的投票。首先判断投票有效性,包括验证是否是来自Looking状态的服务器。
  • 处理投票,针对每个投票都按以下规则与自己的投票PK,PK后依据情况是否更新投票,再发送给其他机器。
  • 优先检查ZXID,ZXID较大者优先为Leader
  • 如果ZXID相同,检查SID,SID较大者优先为Leader
  • 统计投票:每次投票后,服务器统计所有投票,判断是否有过半的机器收到相同的投票,如果某个投票达到一半的要求,则认为该投票提出者可以成为Leader。
  • 改变服务器状态:一旦确定了Leader,每个服务器都更新自己的状态,Leader变更为Leading,Follower变更为Following

正常情况下一旦选出一个Leader则一直会保持,除非Leader服务器宕掉☭,则再进行重新选举。

运行时的投票

  • 变更状态当Leader宕机后,余下的所非Observer的服务器都会将自己的状态变更为Looking,然后开启新的Leader选举流程。
  • 每个服务器发出一个投票。生成(SID,ZXID)信息,注意运行期间的ZXID可能是不同的,但是在投票时都会将自己投为Leader,然后发送给其他的服务器。
  • 接收来自各个服务器的投票
  • 处理投票,规则与初次启动时相同。
  • 统计投票
  • 改变服务器状态

 

你可能感兴趣的:(【Zookeeper】)