zk服务端代码启动流程

以下是启动的时序图:

以上两张是zk源码单机下启动的流程 下面对的每一个流程进行描述

第一张图

1. 在zk的启动脚本中zkServer.cmd中

setlocal
call "%~dp0zkEnv.cmd"

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
echo on
echo %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %* 
call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

endlocal

可知QuorumPeerMain为启动的入口 但是我们这边需要设置启动文件zoo.cfg,因为是源码 我直接写到代码里去了

public static void main(String[] args) {
        QuorumPeerMain main = new QuorumPeerMain();
        
        try {
        	 File ff=new File("libresource/conf/zoo.cfg");
        	 args=new String[]{ff.getAbsolutePath()};
        	 System.out.println(args[0]);
            main.initializeAndRun(args);
        } catch (IllegalArgumentException e) {
            LOG.error("Invalid arguments, exiting abnormally", e);
            LOG.info(USAGE);
            System.err.println(USAGE);
            System.exit(2);
        } catch (ConfigException e) {
            LOG.error("Invalid config, exiting abnormally", e);
            System.err.println("Invalid config, exiting abnormally");
            System.exit(2);
        } catch (Exception e) {
            LOG.error("Unexpected exception, exiting abnormally", e);
            System.exit(1);
        }
        LOG.info("Exiting normally");
        System.exit(0);
    }

这一步server端开始启动

2. 解析zoo.cfg的信息 

3. 这一步会开启一个定时任务 不过具体干啥的没去深究

4. 开始进行服务端的初始 这一步会进行判断 判断是否为集群模式下启动 我们这里先分析单机启动

  if (args.length == 1 && config.servers.size() > 0) {
            runFromConfig(config);
        } else {
            LOG.warn("Either no config or no quorum defined in config, running "
                    + " in standalone mode");
            // there is only server in the quorum -- run as standalone
            ZooKeeperServerMain.main(args);
        }

5. 调用单机模式下服务端的初始化方法

6. 解析配置文件zoo.cfg的文件内容

7.根据配置文件的内容 进行服务端的启动

8.服务端参数配置初始化

9.创建连接服务端的处理工厂 可以在配配置文件中通过 zookeeper.serverCnxnFactor指定 默认使用 NIOServerCnxnFactory 

接下的分析 我们以NIOServerCnxnFactory进行展开

10. 连接工厂参数配置

11. 工厂(NIOServerCnxnFactory)启动

接第二张图

1.工厂线程启动这里使用nio来处理客户端发起的请求

2. zk服务端线程启动执行其run方法

3. 开始初始化zk的数据库或者进行恢复

6.zk服务端的启动方法

7. 启动zk的会话管理线程

8. 启动zk服务端的请求处理线程

9. 启动jmx服务

10. 修改zk服务的状态 唤醒被阻塞的线程

 

以上逻辑可以结合源码进行观看  

下一章 梳理服务端如何接入客户端请求 并进行响应

zk源码地址

 https://gitee.com/zhaoyu123/zookeeper-java-source-real.git

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中启动ZK的步骤如下:1. 使用终端或者SSH登录Linux系统;2. 使用下列命令启动ZK:/path/to/zookeeper-server-start.sh /path/to/zoo.cfg;3. 启动完成后,使用下列命令检查ZK是否启动成功:/path/to/zookeeper-server-status.sh;4. 如果ZK启动成功,会显示ZK的运行状态。 ### 回答2: 在Linux系统中启动ZooKeeper可以按照以下步骤进行操作: 1. 首先,确保已经在Linux系统中安装了ZooKeeper。可以通过命令`sudo apt-get install zookeeper`来安装ZooKeeper。 2. 接下来,进入到ZooKeeper的安装目录,一般情况下是`/usr/share/zookeeper`。 3. 找到并编辑`zoo.cfg`文件,该文件是ZooKeeper的配置文件。可以使用命令`sudo vi zoo.cfg`来打开该文件。 4. 在`zoo.cfg`文件中,找到并修改以下几个关键配置项: - `dataDir=/var/lib/zookeeper`:将该项修改为用于存储ZooKeeper数据的目录。 - `clientPort=2181`:修改该项为ZooKeeper服务的监听端口,一般使用默认端口2181即可。 - `server.X=host:port:port`:根据需要,可以增加多个ZooKeeper服务器的配置,其中`X`表示服务器的唯一id,`host`表示服务器的主机名或IP地址,`port`表示服务器之间通信的端口。 5. 保存并关闭`zoo.cfg`文件。 6. 在命令行中,使用以下命令启动ZooKeeper服务:`sudo zkServer.sh start`。 7. 等待片刻,当看到类似`ZooKeeper JMX enabled by default`和`Using config: /usr/share/zookeeper/zoo.cfg`的输出时,表示ZooKeeper已经成功启动。 以上就是在Linux系统中启动ZooKeeper的基本步骤。需要注意的是,替换步骤4中的`X`、`host`和`port`为具体的值,并根据需要进行修改。 ### 回答3: 在Linux系统中启动zkZooKeeper)有几个步骤。 首先,确保ZooKeeper已被正确安装在你的Linux系统上。 接下来,打开终端窗口并输入以下命令以启动ZooKeeper: ``` zkServer.sh start ``` 这会执行一个名为`zkServer.sh`的脚本,用于启动ZooKeeper服务器。 如果一切正常,你将会看到一些启动相关的输出信息。ZooKeeper会在后台运行,并开始监听指定端口上的客户端连接。 你可以使用以下命令来检查ZooKeeper服务器是否正在运行: ``` zkServer.sh status ``` 如果输出结果显示"ZooKeeper server is running",这表示ZooKeeper已成功启动。 但是,在启动ZooKeeper之前,你可能需要编辑`zkServer.sh`脚本以符合你的需求。其中一种常见的需求是修改ZooKeeper服务器将使用的端口号。你可以使用文本编辑器打开`zkServer.sh`文件,找到相关的端口配置,并进行相应修改。请确保以管理员(root)权限打开并保存该文件。 另外,需要注意的是,上述命令是使用默认的ZooKeeper配置文件来启动服务器。如果你想使用自定义配置文件,可以将其复制到ZooKeeper目录中,并使用以下命令启动: ``` zkServer.sh start <path_to_custom_config_file> ``` 请将`<path_to_custom_config_file>`替换为你的自定义配置文件的路径。 总之,要在Linux系统中启动ZooKeeper,只需打开终端窗口并运行适当的命令即可。确保进行适当的配置,并始终验证是否成功启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值