千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇内容主要讲解"zk集群版服务启动实现Leader和Follower之间数据交互",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"zk集群版服务启动实现Le
千家信息网最后更新 2025年01月23日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,等待其他服务的连接

@Overridepublic 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之间数据交互"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0