zoukankan      html  css  js  c++  java
  • Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(单机版)

     
    Zookeeper是开源的,如果想多了解Zookeeper或看它的源码,最好是能找到它的源码并在 IDE 里启动,可以debug看它咋执行的,能够帮助你理解其原理。

    准备源码

    所以我们很容易搞到它的源码,例如我们从GitHub上获取源码 或 从Apache官网获取可运行版本的压缩包(内含源码)。这里我下载的是3.4.13版本的,从GitHub拉取源码在idea运行时,编译不能通过,缺少类,原因是有些类需要data包下的类,但是没有这个data包,所以编译过不了,也就无法测试。

     
    所以选择第二种,下载到 zookeeper-3.4.13.tar.gz 然后解压,和从GitHub上下载的还是有些差别的。
     

    导入到IDE

    然后将下载好的源码导入到idea。需创建resources目录把 conf 目录下的 log4j.properties 复制到该目录下,否则启动异常报找不到log4j.properties的错。

    准备启动

    然后我们找到 org.apache.zookeeper.server.quorum.QuorumPeerMain 这个类,这个是 zookeeper 的主入口,当你用脚本启动时其实运行的也是这个类。
     
    题外话,看看启动脚本。
     
    zkCli.sh脚本文件
     

    zkCli.cmd

    回来,我们打开这个类会看到有个main方法,看注释,我们需要在启动时指定配置文件。
     
    /**
         * To start the replicated server specify the configuration file name on
         * the command line.要启动复制的服务器,请在命令行上指定配置文件名。
         * @param args path to the configfile 配置文件的路径
         */
        public static void main(String[] args) {
            QuorumPeerMain main = new QuorumPeerMain();
            try {
                main.initializeAndRun(args);
            } //some catchs... 
             //some codes ...
         } LOG.info(
    "Exiting normally"); System.exit(0); }

    配置启动参数

    首先运行这个类的main方法,会报错,说非法参数哦,如下

    配置一下,在 Program arguments里添加配置文件的路径。

    正式启动

    再启动就成功了

    测试是否启动成功

    我们开启客户端连一下

    连上了,并且有三个节点。

    这段代码是一些初始化,并判断是单机启动还是集群启动

    protected void initializeAndRun(String[] args)
    throws ConfigException, IOException
    {
    QuorumPeerConfig config = new QuorumPeerConfig();
    if (args.length == 1) {
    config.parse(args[0]);
    }

    // Start and schedule the the purge task
      DatadirCleanupManager purgeMgr = new DatadirCleanupManager(config
        .getDataDir(), config.getDataLogDir(), config
        .getSnapRetainCount(), config.getPurgeInterval());
    purgeMgr.start();

    if (args.length == 1 && config.servers.size() > 0) {
    System.out.println("=======集群模式=======");
    runFromConfig(config);
    } else {
    System.out.println("=======单机模式=======");
    LOG.warn("Either no config or no quorum defined in config, running "
              + " in standalone mode");
    ZooKeeperServerMain.main(args);
    }
    }
    
    

























    单机版启动,到这里就结束了。篇幅原因,集群版下一篇再见。


    转载请注明出处

  • 相关阅读:
    django中使用redis保存session(转)
    Python操作Redis(转)
    Django 中 app_name (应用命名空间) 和 namespace (实例命名空间) 的区别
    零开始Android逆向教程(一)——初探Android逆向
    python基础网络编程--转
    安全建设之平台搭建
    从信息安全弃坑到虚拟化的悲哀和无奈之感
    Apache 性能配置优化
    反爬虫和抗DDOS攻击技术实践
    DockerCon2017前瞻
  • 原文地址:https://www.cnblogs.com/ibigboy/p/11353031.html
Copyright © 2011-2022 走看看