zoukankan      html  css  js  c++  java
  • 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再发送新的选票。

  • 相关阅读:
    ceph 集群 slow requests are blocked
    k8s集成cephfs(StorageClass方式)
    ceph错误application not enabled on 1 pool(s)解决方法
    安装 harbor v2.3.4
    openstack高可用集群搭建(分布式路由)(train版)
    github项目收集
    devops组件搭配选型
    JS中的getter和setter
    [论文理解] Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials
    Pytorch 训练停止,输出显示 died with <Signals,SIGKILL.9> 问题定位过程记录
  • 原文地址:https://www.cnblogs.com/chen--biao/p/10097951.html
Copyright © 2011-2022 走看看