美文网首页
ZK的leader选举过程

ZK的leader选举过程

作者: 西5d | 来源:发表于2018-04-06 18:48 被阅读446次

    概念:

    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选举过程

          本文链接:https://www.haomeiwen.com/subject/bgyshftx.html