Zookeeper 选举底层分析
zookeeper入口类
QuorumPeerConfig 解析zookeeper conf 文件下的 zoo.cfg配置文件
涉及到网络通信 (1选举 多个zk节点之间的通信,2 客户端请求(应用程序连接到zkserver) 3 leader follower 之间的数据同步)
进入
loadDataBase() 加载数据 cnxnFactory.start()(暴露端口给别人访问) 通信 startLeaderElection() 选举机制
NIOServerCnxnFactory 建立 通信 注册
QuorumPeer类 this.startLeaderElection() 选举方法
开始选举机制
this.sendNotifications(); 广播自己的票据 sendqueue 队列
this.recvqueue.poll((long)notTimeout, TimeUnit.MILLISECONDS) 接受别的机器上的票据
开始比较 epoch , 在比较zxid 最后比较 myid
最后选举 termPredicate() 方法
过半原则 选举leader
其他的节点链接 leader
connectToLeader 连接leader 节点 基于 socket