zookeeper 为什么需要 zoo.cfg?

前序:

  我的zookeeper 已经可以跑起来了,对于很多问题我仍然是保持疑惑的,比如:zoo_sample.cfg 为什么要重名为 zoo.cfg ,我觉得很多人可能我和我一样,百度关键字一上来“Linux 安装 zookeeper” 然后点击某篇博客,开始“照猫画虎”起来,对于其中一个问题,我就一直很疑惑,为什么 要吧 zoo_sample.cfg 重命名为 zoo.cfg ? 你也许和我一样,遇到过这个问题,但是很多博客又没说为什么,所以答案要么自己找,要么问大佬。

  所以我去翻看了官网,其中看到了这个(如下)。

Standalone Operation
Setting up a ZooKeeper server in standalone mode is straightforward. The server is contained in a single JAR file, so installation consists of creating a configuration.

Once you've downloaded a stable ZooKeeper release unpack it and cd to the root

To start ZooKeeper you need a configuration file. Here is a sample, create it in conf/zoo.cfg:

翻译:
    独立运行
在独立模式下设置ZooKeeper服务器非常简单。该服务器包含在单个JAR文件中,因此安装包括创建配置。

下载稳定的ZooKeeper版本后,将其解压缩并CD到根目录

要启动ZooKeeper,您需要一个配置文件。这是一个示例,在conf / zoo.cfg中创建它:

  官网上告诉我们要启动 zookeeper 需要一个配置文件(zoo.cfg ),并且在里面添加 下面这些东西。
  :内容肯定不止这么点东西,如集群,超时等都需要配置到 zoo.cfg 文件中。

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

  剩下关于 zoo.cfg 我就没看到其他内容了,官网地址
  但是当我看 zkServer.sh 脚本的时候,看到了这个 ZOOCFG 

echo "Using config: $ZOOCFG" >&2 这句话不就对应了 Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg 吗?
 对应日志中的就是这一句话 
[root@system bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config:
/usr/local/src/zookeeper/bin/../conf/zoo.cfg Starting
zookeeper ... STARTED

  于是我根据 ZOOCFG 进行检索,然后我又看到了 一个 ZOOCFDDIR

if [ "x$2" != "x" ]
then
    ZOOCFG="$ZOOCFGDIR/$2"
fi

# if we give a more complicated path to the config, don't screw around in $ZOOCFGDIR
if [ "x$(dirname "$ZOOCFG")" != "x$ZOOCFGDIR" ]
then
    ZOOCFG="$2"
fi

  其实正在让我知道答案的是百度:关键字就是ZOOCFG 。
  让我看到一篇文章:https://www.cnblogs.com/balaamwe/p/3680737.html
  如果我好好学习shell 脚本,我不难发现,zkServer.sh 开头就给我了答案,因为 zkServer.sh 还用了其他脚本(zkEnv.sh)

if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
  . "$ZOOBINDIR"/../libexec/zkEnv.sh
else
  . "$ZOOBINDIR"/zkEnv.sh
fi

  在 zkEnv.sh 中果然找到了 zoo.cfg

if [ "x$ZOOCFG" = "x" ]
then
    ZOOCFG="zoo.cfg"
fi

  为了验证我的正确性,我将 zoo.cfg 改为 zoo1.cfg 结果打印是否是我想象的那样

我用 zkServer.sh start 为例,看看打印结果

未改之前:

[root@system bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

改之后:

if [ "x$ZOOCFG" = "x" ]
then
    ZOOCFG="zoo1.cfg"
fi

结果:报错了

[root@system bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo1.cfg
grep: /usr/local/src/zookeeper/bin/../conf/zoo1.cfg: 没有那个文件或目录
grep: /usr/local/src/zookeeper/bin/../conf/zoo1.cfg: 没有那个文件或目录
mkdir: 无法创建目录"": 没有那个文件或目录
Starting zookeeper ... STARTED

  到这里就结束了,对此也解决了心中的疑惑,明白了为什么要定义一个 zoo.cfg。
  我最开始说为啥要把,zoo_sample.cfg 修改成 zoo.cfg ,这个我也不知道了,官方给的默认配置文件就是 zoo_sample.cfg(也许跟早的版本叫zoo.cfg 也说不一定),但是实际执行的又是 zoo.cfg ,这个问题我也不想纠结了,若要纠结直接@官方比我瞎猜更管用。
  如果不改不想重命名,只需要去改 zkEnv.sh 脚本 即可。

 

总结:

  第一:不一定要重命名zoo_sample.cfg 文件,只是官方指出要有一个 zoo.cfg 的配置文件。

  第二:不要尽信他人文章,zoo_sample.cfg 中的参数并不全,如集群配置,它并没有提出来有server.1=ip:2888:3888 。所以还得去官网

  第三:zookeeper 变化有点大,对于zoo.cfg 问题,我只能做到为什么要有它,对于其他细节,希望知道的朋友多多指导。

 

posted @ 2020-03-22 17:59  不朽_张  阅读(855)  评论(2)    收藏  举报