• zookeeper 选举


    选举概述:

      1、启动时期的选举

        所有的服务器状态为 LOOKING。

        1.1、每个Server 会投出一票(投票规则为:SID、ZXID ,即 服务器ID 和 最大事务ID)。

        1.2、处理选票 (A、优先选ZXID最大的。B、再优先SID最大的),根据处理结果再投一次。

        1.3、统计投票。

        1.4、通知投票结果,更改集群机器状态。

      2、运行期的选举

        Leader 挂了后,Follower 将变更状态为 LOOKING , 进入新一轮的Leader 选举。

        剩余步骤同上。

    选举算法:FastLeaderElection

      1、术语

        SID:服务器ID,ZXID:事务ID,Vote:投票,Quorum:过半机器数(机器数为n,那么  Quorum = n/2+1  )

      2、处理选票规则(A、优先选ZXID最大的。B、再优先SID最大的),根据选票规则跟自身进行对比,如果找到比自己大的,则投票给大的,否则坚持自己的投票。

    实现细节:

      1、服务器的四种状态

        1.1、LOOKING:无领导状态,进入选举流程。

        1.2、FOLLOWING   随从

        1.3、LEADING    领导

        1.4、OBSERVING  观察者

      2、票据数据结构

        SID        //

        ZXID        //

        electionEpoch    // 逻辑时钟,用来判断投票是否在同一轮选举周期中,自增序列,每一轮投票自增1。

        peerEpoch     // 被选举的 Leader  的 epoch

        state        // 当前服务器的状态。

      3、消息队列会根据SID进行分组

      4、根据 electionEpoch 的值进行判断(ee)

        4.1、接收到的 ee , 大于自身的ee,则清空已经收到的选票将自身ee修改为接收到的ee值,并根据PK规则,进行新一轮的选票投递。

        4.2、如果收到的ee小于自身的ee,则抛弃不处理该选票。

        4.3、ee相等,先PK再发送新的选票。

  • 相关阅读:
    B . Block Adventure (贪心+模拟 )
    8适配器模式
    7命令模式
    5抽象工厂模式
    4工厂方法模式
    3装饰者模式
    2观察者模式
    1策略模式类图
    POJ3264(分桶法)
    POJ2104(分桶法)
  • 原文地址:https://www.cnblogs.com/chen--biao/p/10097951.html
Copyright © 2020-2023  润新知