zookeeper Zab协议—Follower和Leader状态同步-细节分析一

本文深入分析Zookeeper的Zab协议中,Follower如何通过followLeader()方法连接并注册到Leader,以及Leader如何在lead()方法中处理Follower的注册,详述了findLeader()和connectToLeader()等关键步骤。
摘要由CSDN通过智能技术生成

目录

2021SC@SDUSC

Follower和Leader状态同步-代码细节分析

1.looking状态下选leader,产出leader和follower

2.follower调用follower.followLeader()和leader调用leader.lead()

3.leader.lead()对每一个节点创建一个LearnerCnxAcceptor()

4.等待follower注册

5.follower.followLeader()寻找、连接、注册leader

Learn.findLeader() 

Learner.connectToLeader()

learn.registerWithLeader()

6.leader接收到follower注册信息,每个节点产生一个LearnerHandler()

接下篇





2021SC@SDUSC




Follower和Leader状态同步-代码细节分析

1.looking状态下选leader,产出leader和follower

while (running) {
                switch (getPeerState()) {
                case LOOKING:
                    LOG.info("LOOKING");

                    if (Boolean.getBoolean("readonlymode.enabled")) {
                        LOG.info("Attempting to start ReadOnlyZooKeeperServer");

                        // Create read-only server but don't start it immediately
                        final ReadOnlyZooKeeperServer roZk =
                            new ReadOnlyZooKeeperServer(logFactory, this, this.zkDb);
    
                        // Instead of starting roZk immediately, wait some grace
                        // period before we decide we're partitioned.
                        //
                        // Thread is used here because otherwise it would require
                        // changes in each of election strategy classes which is
                        // unnecessary code coupling.
                        Thread roZkMgr = new Thread() {
                            public void run() {
                                try {
                                    // lower-bound grace period to 2 secs
                                    sleep(Math.max(2000, tickTime));
                                    if (ServerState.LOOKING.equals(getPeerState())) {
                                        roZk.startup();
                                    }
                                } catch (InterruptedException e) {
                                    LOG.info("Interrupted while attempting to start ReadOnlyZooKeeperServer, not started");
                                } catch (Exception e) {
                                    LOG.error("FAILED to start ReadOnlyZooKeeperServer", e);
                                }
                            }
                        };
                        try {
                            roZkMgr.start();
                            reconfigFlagClear();
                            if (shuttingDownLE) {
                                shuttingDownLE = false;
                                startLeaderElection();
                            }
                            setCurrentVote(makeLEStrategy().lookForLeader());

2.follower调用follower.followLeader()和leader调用leader.lead()

    case FOLLOWING:
                    try {
                       LOG.info("FOLLOWING");
                        setFollower(make
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值