zk选举入口——QuorumPeer线程启动流程
2015-08-31 17:32:02 9 举报
QuorumPeer线程启动流程是ZooKeeper选举过程中的关键步骤。首先,当客户端连接到ZooKeeper集群时,会与其中一个服务器建立连接。该服务器将负责处理客户端的请求,并成为主节点。如果主节点出现故障或不可用,其他从节点将通过选举机制选出新的主节点。选举过程包括两个阶段:预投票和正式投票。在预投票阶段,从节点向其他从节点发送投票请求,询问它们是否愿意成为新的主节点。如果收到大多数从节点的支持,该从节点将成为新的主节点。在正式投票阶段,所有从节点将自己的投票结果发送给其他从节点,最终选出具有最高票数的节点作为新的主节点。这个过程确保了ZooKeeper集群的高可用性和一致性。
作者其他创作
大纲/内容
observer停止并注册为null,节点状态置为LOOKING
OBSERVING
LOOKING
loadDataBase() 从zxid恢复epoch 投票轮数
创建ReadOnlyZooKeeperServer,并启动其线程(未)
注册JMXBEAN
startLeaderElection 获取节点投票信息并选择选举算法
节点状态
根据socketAddr生成updSocket(UDPSocket)并启动ResponderThread()
进入循环,running为false退出
makeObserver()产生ObserverZookeeperServer 和observer对象并加入
observeLeader() 未
QuorumPeer run()
创建currentVote (myid lastZxid currentEpoch),myid意味着先投自己
makeLeader()产生LeaderZookeeperServer 和 leader对象并set到Quorum类
setLeader(null) 再将节点的leader属性设置为空 状态置为LOOKING
follower停止并注册为null,节点状态置为LOOKING
makeFollower()产生FollowerZookeeperServer 和 follower对象并加入
followLeader()方法 未
ReadOnlyZooKeeperServer线程结束并进入下一次循环
Quorum 线程启动
根据electionType选择election算法
lead()方法 未
setCurrentVote() 进入lookForLeader()并覆盖currentvote对象
Quorum start()
Quorum线程重写start()
Vote结构 (要投票的节点id,zxid epoch)
FOLLOWING
LEADING
遍历该节点所保存的所有节点视图,节点试图里找到自己并拿到socketAddr
0 条评论
下一页