zk服务预启动和启动选举的过程

这篇文章主要介绍“zk服务预启动和启动选举的过程”,在日常操作中,相信很多人在zk服务预启动和启动选举的过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”zk服务预启动和启动选举的过程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联专注于赞皇企业网站建设,自适应网站建设,商城网站定制开发。赞皇网站建设公司,为赞皇等地区提供建站服务。全流程按需求定制开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

QuorumPeerMain类
public static void main(String[] args) {
    QuorumPeerMain main = new QuorumPeerMain();
    try {
        main.initializeAndRun(args);
    } catch (IllegalArgumentException e) {
        LOG.error("Invalid arguments, exiting abnormally", e);
        LOG.info(USAGE);
        System.err.println(USAGE);
        System.exit(ExitCode.INVALID_INVOCATION.getValue());
    } catch (ConfigException e) {
        LOG.error("Invalid config, exiting abnormally", e);
        System.err.println("Invalid config, exiting abnormally");
        System.exit(ExitCode.INVALID_INVOCATION.getValue());
    } catch (DatadirException e) {
        LOG.error("Unable to access datadir, exiting abnormally", e);
        System.err.println("Unable to access datadir, exiting abnormally");
        System.exit(ExitCode.UNABLE_TO_ACCESS_DATADIR.getValue());
    } catch (AdminServerException e) {
        LOG.error("Unable to start AdminServer, exiting abnormally", e);
        System.err.println("Unable to start AdminServer, exiting abnormally");
        System.exit(ExitCode.ERROR_STARTING_ADMIN_SERVER.getValue());
    } catch (Exception e) {
        LOG.error("Unexpected exception, exiting abnormally", e);
        System.exit(ExitCode.UNEXPECTED_ERROR.getValue());
    }
    LOG.info("Exiting normally");
    System.exit(ExitCode.EXECUTION_FINISHED.getValue());
}

预启动

1.由QuorumPeerMain 启动

2 解析配置文件 集群情况下配置多个节点,启动清理DatadirCleanupManager

2.1创建zk数据管理器(FileTxnSnapLog)

3 判断是集群还是单机模式

4通过配置初始化quorumPeer,包括(ElectionType,zkdatabase,quorumVerifier,cnxnFactory,learnerType等)

是zk服务器实例的托管者,quorumPeer会不断检测当前服务器实例运行状态,同时发起leader选举

5创建内存database,zkdb管理所有会话记录,事务信息和dataTree数据

6初始化QuorumPeer实例,将FileTxnSnapLog,ServerCnxnFactory,ZkDatabase注册到QuorumPeer中,配置参数服务器列表,竞选时选举算法和超时时间等

7加载数据库loadDataBase()

8启动serverCnxn连接

7-8在QuorumPeer中

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();
}

Leader选举

1初始化leader选举算法

2集群模式下,zookeeper首先会根据自身服务器id(sid),最新事务id(zxid)(lastLoggedZxid)

3和当前服务器epoch(currentEpoch)来创建选票

4在创建过程中,每个服务器都会给自己投票,然后,根据zoo.cfg配置,创建相应leader选举算法

zookeeper默认提供了三种算法(LeaderElection,AuthFastLeaderElection,FastLeaderElection),可以通过zoo.cfg的electionArg属性配置类型,

5但是现在默认支持的是FastLeaderElection选举算法

在初始化阶段 zk会创建选举需要的网络io管理器QuorumCnxnManager,同时监听选举指定端口,等待其他选举服务连接

到此,关于“zk服务预启动和启动选举的过程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


分享标题:zk服务预启动和启动选举的过程
本文网址:http://myzitong.com/article/jephii.html