闽侯县网站建设,公众号平台登录,民治做网站多少钱,网站做支付端口的费用源码项目zookeeper-3.6.3#xff1a;核心工作流程ZooKeeper选举和状态同步结束之后的服务启动ZooKeeper SessionTracker启动和工作机制ZooKeeper选举和状态同步结束之后的服务启动
在Leader的lead()方法的最后#xff0c;即Leader完成了和集群过半Follower的同步之后#x…
源码项目zookeeper-3.6.3核心工作流程ZooKeeper选举和状态同步结束之后的服务启动ZooKeeper SessionTracker启动和工作机制ZooKeeper选举和状态同步结束之后的服务启动
在Leader的lead()方法的最后即Leader完成了和集群过半Follower的同步之后就会调用startZkServer()来启动必要的服务主要包括 SessionTracker RequestProcessor 更新Leader ZooKeeperServer的状态
Leader.lead(){startZkServer(){zk.startup(){//ZooKeeperServer启动super.startup(){startupWithServerState(State.RUNNING);}//ZK Container ZNode定时清除任务if(containerManager ! null){containerManager.start();}}}
}同理Follower也是一样的在完成了和Leader的状态同步之后也就是接收到Leader发送过来的NEWLEADER消息的时候先拍摄快照然后调用zk.startupWithoutServing()来启动Follower必要的一些基础服务包括 SessionTracker RequestProcessor 更新Leader ZooKeeperServer的状态
Leader.syncWithLeader(long newLeaderZxid){//创建SessionTackerzk.createSessionTracker();//启动一些服务zk.startupWithoutServing(){startupWithoutServerState(State.INITIAL);}
}不管Leader还是Follower最后都执行startupWithServerState(State state)具体实现
ZooKeeperServer.startupWithServerState(State state){//创建和启动SessionTracker 重要if(sessionTracker null){createSessionTracker();}startSessionTracker();//初始化RequestProcessors 重要setupRequestProcessors();//其他各项基础服务startRequestThrottler();registerJMX();startJvmPauseMonitor();registerMetrics();//更新状态为RUNNINGsetState(state);//解除其他线程的阻塞notifyAll();
}ZooKeeper SessionTracker启动和工作机制
需求背景现在每个客户端链接到ZK服务器的时候在服务器内部都会创建一个Session来管理这个链接 如果链接断开删除这个session 如果链接超时删除这个session在规定的超时时间前没有任何动作 会遇到什么问题大量的session管理ZK提供的方案桶管理机制Session管理Connection管理
在Leader启动的时候Leader会创建LeaderSessionTracker在Follower启动的时候内部会创建一个LearnerSessionTracker。SessionTracker的内部都有