zookeeper leader和follower启动期交互过程

本文详细介绍了Zookeeper中Leader和Follower在启动期间的交互过程,包括创建服务器实例、启动follower接收器、连接建立、注册、epoch计算、状态发送与ACK响应、数据同步等关键步骤,确保集群的正确运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leader和follower启动期交互过程包括如下步骤。

1.创建Leader服务器和Follower服务器

完成leader选举后,各服务器会根据自己角色创建相应的服务器实例,并开始进入各自角色的主流程。

代码位置:QuorumPeer.java

  • leader

                    case LEADING:
                    LOG.info("LEADING");
                    try {
                        setLeader(makeLeader(logFactory));
                        leader.lead();
                        setLeader(null);
                    }
  • follower

                case FOLLOWING:
                    try {
                        LOG.info("FOLLOWING");
                        setFollower(makeFollower(logFactory));
                        follower.followLeader();
                    }

2.leader服务器启动follower接收器LearnerCnxAcceptor。

LearnerCnxAcceptor接收器用于负责接收所有非leader服务器的连接请求。

Leader的lead过程

    void lead() throws IOException, InterruptedException {
           ...
           self.tick = 0;  
            //从本地文件恢复数据  
           zk.loadData();  
           //leader的状态信息  
           leaderStateSummary = new StateSummary(self.getCurrentEpoch(), zk.getLastProcessedZxid());  

           // Start thread that waits for connection requests from   
           // new followers.  
            //启动lead端口的监听线程,专门用来监听新的follower  
           cnxAcceptor = new LearnerCnxAcceptor();  
           cnxAcceptor.start();  

           readyToStart = true;  
            //等待足够多的follower进来,代表自己确实是leader,此处lead线程可能会等待  
           long epoch = getEpochToPropose(self.getId(), self.getAcceptedEpoch());  
            ... 

3.learner服务器开始和leader建立连接

所有的learner服务器在启动完毕后,会从leader选举结果中找到leader服务器,然后与其建立连接。

4.leader服务器创建LearnerHandler

leader接收到learner的连接创建请求后,会创建一个LearnerHandler。每一个LearnerHandler实例对应一个leader与learner服务器之间的连接,其负责leader与learner间几乎所有的消息通信和数据同步。

LearnerCnxAcceptor的线程

public void run() {  
           try {  
               wh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值