• Zookeeper选举Leader源码剖析(二)


    maven版本尽量3.5版本以上,jdk1.8

     1.选举流程

    如果其他服务器sid小于自己的sid,直接关闭socket连接,这么做的原因是为了减少连接

     如果相同,打印警告信息,如果远端sid大于自己的sid,建立发送线程,接收线程

     

     sendWorker.start,直接看run方法逻辑:
    从阻塞队列中拿到消息

    1.2 recver.run方法

    读取远端服务器socker消息

     

    整体选票逻辑,业务层丢入sendqueue-workerSender-queueSendMap发送队列选票消息,然后将选票信息发送到远端服务器和自己的recvWorker接收->recvQueue队列中,生成选票。 

     

    wokersender构建选票

     

     mysid等于sid加入到传输层队列,如果不相等丢到queuesendMap中

     

     fastleaderElection选举算法:初始化状态looking

     真实的选票逻辑:newEpoch等于curEpoch,先比较zxid并且比较newID,curId,

    updateProposal:更新选票,下次投票投竞争出来的选票

    sendNotifications:将选出的选票发送给其他机器

     

     

     termPredicadate:将选出来的选票放入voteSet并且进行半数比较

     

     

     半数比较逻辑:比较投票机器数量是否大于半数half

    half:投票数/2

     

     

     

      返回为true以后,如果自己PK赢了,将自己设置为leading,否则,将当前状态设置为following

     

     当一次选举以后状态更改,看leading和following,当第三个机器收到选票会比较当前状态是否是looking,

     

     当第三台机器进来以后会走follwoing和leading,首先比较当前周期,进行上面的选票比较逻辑。最后设置当前选举状态

     

     

  • 相关阅读:
    iOS ------ autoreleasePool
    FreeRTOS个人笔记-任务通知
    计算机网络 第三章数据链路层
    5.26机器人基础-DH参数 正解
    [附源码]java毕业设计校园摄影爱好者交流网站
    3线硬件SPI驱动 HX8347 TFT屏
    【深度学习】Beam Search原理和实现、闲聊机器人优化
    peer_connection_interface参数
    Springioc的配置使用
    docker 容器环境配置 mydumper
  • 原文地址:https://blog.csdn.net/qq_21575929/article/details/126217768