美文网首页
《源码_Zookeeper》_简述Zookeeper 选举

《源码_Zookeeper》_简述Zookeeper 选举

作者: tjhuey | 来源:发表于2018-11-26 18:14 被阅读64次

    选举是Zookeeper的重要技术之一,采用过半机制(Quorom)

    选举算法图

    image.png
    image.png

    服务端启动时期的Leader选举过程

    1. 每个server(非Observer角色) 发起投票 (以 (myid,zxid)形式 投自己)
      2.每个接收来自各个服务器的投票(接收其他loking,本周期选举的投票)
      3.处理投票 (PK zxid大的为leader,zxid一样,myid大的为leader)
      4.统计投票 (是否过半)
      5.改变服务器状态 (选举完成leader后,follower更改成following状态,leader 更改成 leading状态)

    服务端运行时期的Leader选举

    1.变更状态(leader挂了,非Observer角色 变更为Looking 进入选举流程)

    1. 每个server(非Observer角色) 发起投票 (接收其他loking,本周期选举的投票)
      3.每个接收来自各个服务器的投票
      4.处理投票 (PK zxid大的为leader,zxid一样,myid大的为leader)
      5.统计投票(是否过半)
      6.改变服务器状态(选举完成leader后,follower更改成following状态,leader 更改成 leading状态)

    方法栈跟踪

    image.png image.png image.png
    image.png
    image.png
    image.png
    image.png

    方法栈总结

    选举相关
    >org.apache.zookeeper.server.quorum.QuorumPeer.startLeaderElection 开始leader选举
        >org.apache.zookeeper.server.quorum.Vote 生成选举对象
        >org.apache.zookeeper.server.quorum.QuorumPeer.createElectionAlgorithm 创建选举算法
            >org.apache.zookeeper.server.quorum.QuorumCnxManager  过半选举策略管理器
            >org.apache.zookeeper.server.quorum.FastLeaderElection pk选举总模板
                >org.apache.zookeeper.server.quorum.FastLeaderElection.starter 开始器  发送与接收队列初始化 LinkedBlockingQueue
                    >org.apache.zookeeper.server.quorum.FastLeaderElection.Messenger.Messenger 启动俩个队列发送与接收队列 俩个线程
                        >org.apache.zookeeper.server.quorum.FastLeaderElection.Messenger.WorkerSender 发送队列
                            >org.apache.zookeeper.server.quorum.FastLeaderElection.Messenger.WorkerSender.process
                                >org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend
                        >org.apache.zookeeper.server.quorum.FastLeaderElection.Messenger.WorkerReceiver 接收外部选举队列 Buffer处理
                            >org.apache.zookeeper.server.quorum.QuorumCnxManager.pollRecvQueue
    

    总结

    所有非Observer 进入选举时,接收外部的投票,并根据zxid和myid,对自己投票和外部投票进行PK,统计投票,更改状态完成选举

    参考

    官网:http://zookeeper.apache.org
    书籍:从Paxos到Zookeeper
    网课: 推荐 慕课网 图灵学院 谷粒学院

    相关文章

      网友评论

          本文标题:《源码_Zookeeper》_简述Zookeeper 选举

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