zk集群版服务启动实现Leader和Follower之间数据交互

本篇内容主要讲解“zk集群版服务启动实现Leader和Follower之间数据交互”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“zk集群版服务启动实现Leader和Follower之间数据交互”吧!

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网页空间、营销软件、网站建设、江干网站维护、网站推广。

集群版服务启动过程

zk集群版服务启动实现Leader和Follower之间数据交互

LeaderElection算法

完成自己投票和投票算法的获取

集群特有,zookeeper首先会根据自身服务器id(sid)

最新的zxid(lastloggedZxid)和当前的服务器epoch(currentEpoch)

来生成一个初始化投票

初始化过程中,每个服务都会给自己投票,然后,根据zoo.cfg的配置

创建相应Leader选举算法实现

zk配置中提供默认三种算法(Leaderelection,AuthFastLeaderElection,FastLeaderElection).通过zoo.cfg的electionalg属性指定,默认支持FastLeaderElection

在初始化阶段,会创建选举需要的网络i/o层 QuorumCnxManager,等待其他服务的连接

@Override
public synchronized void start() {
    if (!getView().containsKey(myid)) {
        throw new RuntimeException("My id " + myid + " not in the peer list");
    }
    //加载数据库
    loadDataBase();
    //启动服务连接工厂
    startServerCnxnFactory();
    try {
        adminServer.start();
    } catch (AdminServerException e) {
        LOG.warn("Problem starting AdminServer", e);
        System.out.println(e);
    }
    //开始选举
    startLeaderElection();
    startJvmPauseMonitor();
    super.start();
}

public synchronized void startLeaderElection() {
    try {
        if (getPeerState() == ServerState.LOOKING) {
            //认为当前是leader
            currentVote = new Vote(myid, getLastLoggedZxid(), getCurrentEpoch());
        }
    } catch (IOException e) {
        RuntimeException re = new RuntimeException(e.getMessage());
        re.setStackTrace(e.getStackTrace());
        throw re;
    }

    this.electionAlg = createElectionAlgorithm(electionType);
}

Leader和Follower启动交互过程

zk集群版服务启动实现Leader和Follower之间数据交互

到此,相信大家对“zk集群版服务启动实现Leader和Follower之间数据交互”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章名称:zk集群版服务启动实现Leader和Follower之间数据交互
浏览地址:http://ybzwz.com/article/jopsdh.html