ZK的leader选举过程

概念:

  1. Zookeeper的服务器三种角色:Leader,Follower,Observer。Leader提供读和写,Follower提供读,参与过半投票,Observer只提供读,不参与投票,可以提高读性能。
  2. ZXID,事务ID,用来唯一标识一次服务器状态的变更
  3. myid,服务器SID,一个数字,通过配置文件配置,唯一

选举有两种情况,一是服务器启动的投票,二是运行期间的投票。

一 最初启动时投票

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

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

二 运行时的投票

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

你可能感兴趣的:(ZK的leader选举过程)