zookeeper选举详情流程

1.加载配置文件,单节点不牵扯选举,多节点需要选举
2.设置IP.PORT,最大连接数等参数
3.启动线程,开始节点选举
4.looking状态:统计所有的looking的总数,并为每个设置选票为当前节点的myid,当前日志ID zxid和当前的的epoch 构建选票信息。开始选举
    1.将自己的选票信息发送给其他所有节点
    2.自己的接收队列中获取消息是否为空
        1.如果为空,检查自己是否收到消息,没有的话,则发送消息联系其他节点,我没有收到消息
        2.否则尝试连接其他的节点
    3.处理接收到的数据
        1.zxid为-1,则退出
        2.检查接收到的消息的epoch是否比自己的大,如果大,则设置自己的epoch为最新的epoch,并清除自己收到的所有消息 检测对比,自己的epoch->zxid->myid的大小,将最大的设置为新的选票数据,并通知其他节点自己的最新选票
        3.如果收到的消息的epoch小于自己的选票的epoch,则表示当前收到消息的选票无效
        4.如果收到的选票等于当前节点的epoch,则对比zxid->myid的大小,设置选票,并通知其他节点自己的最新选票信息
        5.将投票结果缓存到本地,进行最终对比,遍历所有的收到的选票信息,将与当前节点选票一样的放进set,如果set的值大于总结点的一般,则进行设置
            1.判断当前选举出来的节点信息,是否优于队列的所有选票信息(再次确认)如果队列中有的选票大于当前选举出来的,则退出,需要重新选举
            2.否则设置当前选举出来的节点为leader节点
    4.如果选举过程中的状态是leading,则表示当前节点是选举出来的信息,
        1.如果当前节点的epoch等于新收到的信息的epoch,则同步最新消息到当前节点的接收对列,
            1.并再次确定队列中是否有过半的选票是当前节点的选票,并且接收到的信息是否有当前节点,如果是则设置节点信息,删除队列所有信息并返回
        2.将最新消息放进投票结果队列中,判断是否最新消息的节点选票是否超过一半,并且当前节点是否是leading状态,是的话,则设置当前节点为主节点.,删除队列所有信息并返回    
5.如果是OBSERVING,就赋值observer信息,并连接leader
6.如果是FOLLOWING,就赋值follower信息,并连接leader
7.如果是leading ,则设置leader的基本信息,并同步磁盘中的信息,获取最新的zxid信息,并设置当前节点下的新的epoch信息,    同时启动与其他learner的通讯线程,并启动服务
对票数再次验证,如果统计票数,如果过半,则启动主节点,否则进行下一轮选举

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值