【ZooKeeper】zookeeper源码8-Follower和Leader状态同步

源码项目zookeeper-3.6.3:核心工作流程


ZooKeeper状态同步、服务启动、Session管理机制

QuorumPeer一台ZooKeeper服务器的抽象,其中有很多组件,网络环境、工作组件、成员变量、线程、数据库等。
1、ServerCnxnFactory是一个Runnable实现,默认实现是:NIOServerCnxnFactory,内部启动了一个线程,启动了一个NIO服务端,监听了2181端口,等待客户端发送链接请求过来,然后创建一个ServerCnxn,负责完成该客户端的读写请求。
2、QuorumCnxManager是一个选举过程中的链接管理器,内部启动了一个BIO服务端,它监听了3888选举端口,等待其他客户端发送选举链接请求过来建立选举选票交换。
3、ZKDataBase是ZK数据库,每个QuorumPeer代表一台ZK物理机,每个QuorumPeer内部都有一个ZKDatabase对象,意味着,每个ZK节点都保存了该集群的所有数据。
4、内部还保存了一些跟选举有关的信息,比如myid、vote、Election选举算法实现等也会保存,从zoo.cfg中解析得到的其他Server的信息。
选举、冷启动恢复都是在QuorumPeer对象中的工作机制。
QuorumPeer重要的事是,进入while循环,ZAB工作模式。通过while循环+switch case表示。
while循环核心逻辑,根据当前服务器状态决定调用哪个方法来执行。所有服务器一开始上线都为LOOKING状态,即执行setCurrentVote(makeLEStrategy().lookForLeader()),发起选举的入口;当这个方法结束后,推举得到一个leader,此leader没有得到承认,还需执行认同和状态同步,因此每台服务器变更自己状态:变成observer,follower,一个服务器变为leader。

ELECTION:开始选举,当前server进入找Leader状态:Vote currentVote = lookForLeader()
DISCORY:当选举得出了结果,开始进入发现认同阶段,当超过半数Follower认同该Leader,意味着选举真正结束
SYNCHRONIZATION:经过确认,有超过半数节点都同意刚推举出来的Leader节点
BROADCAST:当有超过半数的Follower完成了和Leader的状态同步进入消息广播状态,正常对外提供服务

你可能感兴趣的:(大数据组件,java-zookeeper,zookeeper,java)