网上大牛的zk选举available——lookForLeader
2015-10-23 15:53:22 0 举报
Zookeeper的选举机制主要通过”available——lookForLeader”过程来实现。在这个过程中,首先会启动一个定时任务,用于检查当前节点是否处于可用状态。如果节点处于可用状态,那么它会向Zookeeper集群中的其他节点发送一条消息,询问是否有其他节点比自己更早地成为了领导者。如果没有其他节点比自己更早地成为了领导者,那么当前节点就会成为领导者,并开始处理客户端的请求。这个过程是Zookeeper实现分布式一致性的关键所在,它能够确保在集群中只有一个领导者,并且能够快速地响应客户端的请求。
作者其他创作
大纲/内容
n大于peer
resetPeer() 初始化Vote 都为自身节点值Vote:logicalClock id zxid state.LOOKING
n.state = LEAD
peer状态为LOOKING
从recvqueue取出一个Notification
not逻辑时钟大于当前节点,更新自身逻辑时钟和自己curVote的逻辑时钟
说明不同意这个选票创建not属性值:type.DISGREEpeer的节点信息放入sendqueue队列
更新Vote为自己(server.id zxid)
更新Vote为not.Vote
n.state = LOOKING
startListen()peer开始监听其他节点的请求
Messenger ?
n等于peer
LeaderElection lookForLeader()
shouldUpdate(vodte) peer的vote和not的vote比较n.zxid zxid或者n.zxid == zxid && serverId curVote.proposedLeader
如果n.sid(server id) 包含在peer之内
开始进行选票算法
n小于peer
n.state
比较n和peer的logicalClock
YES
sendNotifications 选举自己 写入队列, 给所有其他节点发消息Notification对象写入 属性值有 type:PROPOSE 选票信息
0 条评论
下一页