Zookeeper Leader 选举
2021-04-01 11:50:00 21 举报
Zookeeper Leader 选举和 ZAB 一致性协议
作者其他创作
大纲/内容
链接监听
runFromConfig(config)
ackstate == QuorumPeer.ServerState.LOOKING
开始选举
createCnxnManager()
开启线程接受选票
服务启动
一样的逻辑
是
new ZKDatabase(quorumPeer.getTxnFactory())
客户端
self.getPeerState() == QuorumPeer.ServerState.LOOKING
ManagedUtil.registerLog4jMBeans()
wsThread.start()
过半逻辑
服务端启动
sid self.getId()
不处理,通常是 BUG
死循环状态判断switch (getPeerState())
启动线程
sendqueue.offer(notmsg);
n == null
发送选票
connectOne(sid);
初始化和启动
zoo.cfg 解析
quorumPeer.run()
createElectionAlgorithm()创建选举对象
设置数据库
(ackstate == QuorumPeer.ServerState.LOOKING) && (n.electionEpoch logicalclock.get())选票方处于选举中,并且id 小于自己把结果发给选票方
创建选举通信管理器
JVM 监控
处理链接信息
totalOrderPredicate(..)投票 PK
初始化 quorumPeer
初始化 sendqueue, recvqueue,messenger
ZooKeeperServerMain.main(args);
走 LEADING
放入应用层接受队列
启动日志定时删除
startLeaderElection()
getVoteTracker(..)
是否过半
LOOKING
createNewServerSocket();
recvqueue.offer(n);
send(b);
SendWorker.run
选举完成
轮询
manager.connectAll()与其他节点建立连接
否
else
RecvWorker.run
LEADING
启动 Netty 服务
purgeMgr.start()
recvQueue.offer(msg)
放入投票箱
config.parse(args[0])
注册 log4j JMX mbeans
启动服务 2181 端口
循环
startJvmPauseMonitor()
广播投票
CnxnChannelHandler#channelRead处理客户端请求
quorumPeer.start()
loadDataBase()
单机模式
sendNotifications()
while 循环读取
new QuorumPeerMain()
logicalclock.incrementAndGet()
收集选票
集群模式
创建服务
启动监听器
receiveConnection(client)
线程启动
args.length == 1 && config.isDistributed()
super.start();
main.initializeAndRun(args)
create /a/b
fle.start();
创建 NIO 服务, 默认 NIO ,推荐 Netty
接受选票
ServerCnxnFactory.createFactory()
是否集群模式
return endVote
启动 mesager.start()
启动选举线程
makeLEStrategy().lookForLeader()投票给自己
选举过程
sendNotifications();
startServerCnxnFactory()
递增本地选举周期
start 方法最后调用 super.start() 启动线程
listener.start();
state 状态
quorumPeer = getQuorumPeer()
判断处理状态
sid == self.getId()
cnxnFactory.start()
选举中
FOLLOWING
closeSocket(sock);id 小的不能直接链接 id 大的机器
0 条评论
下一页