ZooKeeper 搭建附录

  • 一 配置zookeeperout的位置及log4j滚动日志输出
  • 二 客户端连接 ZooKeeper 服务器
  • 三 启动的日志
  • 四 选取 leader 的过程详解依据 log4j 文件查看
  • 五 管理 ZooKeeper 的四字母命令

一. 配置zookeeper.out的位置及log4j滚动日志输出

如果采用默认的设置(网上的大部分教程),会出现两个问题:

  • zookeeper.out 日志文件会在启动 ZooKeeper 的本地产生,不便于管理
  • zookeeper.out 日志文件会越来越大,笔者所在集群中该日志已达到 34G …

在 zkServer.sh 的代码中可以得出,这个zookeeper.out实际上是nohup的输出。而nohup的输出实际上是stdout,stderr的输出,所以还是zookeepe本身的日志配置的问题。

研究了下bin/zkServer.sh和conf/log4j.properties,发现zookeeper其实是有日志相关的输出的配置,只要定义相关的变量就可以了。主要是 ZOO_LOG_DIRZOO_LOG4J_PROP 这两个环境变量。

zkServer.sh里的:

ZooKeeper 搭建附录_第1张图片

log4j.properties里的:

这里写图片描述

而zkServer.sh会加载zkEnv.sh。因此,其实修改下bin/zkEnv.sh就可以了:

ZooKeeper 搭建附录_第2张图片
这里写图片描述

还可以修改下conf/log4j.properties,设置滚动日志最多为10个(避免 zookeeper.out 太大):

这里写图片描述


二. 客户端连接 ZooKeeper 服务器

/usr/local/cluster/zookeeper/bin/zkClit.sh -server slave52:2181

其中 slave52 是 ZooKeeper 其中的一台 Server,2181 是该 Server 提供给客户端连接的端口。然后出现

ZooKeeper 搭建附录_第3张图片

当前根路径为 /zookeeper 。可以键入 help 查看支持哪些操作:

ZooKeeper 搭建附录_第4张图片


三. 启动的日志

我启动的顺序是slave51 >slave52>slave53,由于ZooKeeper集群启动的时候,每个结点都试图去连接集群中的其它结点,先启动的肯定连不上后面还没启动的,所以上面日志前面部分的异常是可以忽略的。通过后面部分可以看到,集群在选出一个Leader后,最后稳定了。

ZooKeeper 搭建附录_第5张图片


四. 选取 leader 的过程详解(依据 log4j 文件查看)

笔者目前就 3 台机器,每当启动第二个机器时,查看各自的状态,就可以看到它就是 leader 。在第二个机器的 $ZOOKEEPER_HOME/bin/zkEnv.sh 中 LOG_DIR_DIR 变量所设置的路径中查看到的 zookeeper.out :

ZooKeeper 搭建附录_第6张图片

原则: 要使Leader获得多数Server的支持,则Server总数必须是奇数2n+1,且存活的Server的数目不得少于n+1,n 大于等于1

zookeeper 集群有3个 Server,以下暂启动前两台机器,存活的 Server 2个满足以上要求。

  • 启动第一台机器时,无法选择出 leader(此时状态为 LOOKING)
  • 步骤 1:启动第二台机器时,会连接到第一台机器上的 Server
  • 步骤 2:FastLeaderElection 中显示了第二台机器自己的 My id 如图中(依靠此选择 leader)
  • 步骤 3:然后尝试连接第三台机器(还未启动),失败了(意味了就2台机器开始”民主竞争” leader)
  • 步骤 4: 图中,myid 为2 出现2次,myid 为 1 出现 1 次
  • 步骤 5:因为 myid 次数为2 超过了半数,故选举第二台机器为 leader 喽~ (状态为 LEADING)

当机器增多,就不一定就是第二台机器为 leader 了。具体原理,可参考 《 ZooKeeper 工作原理 》


五. 管理 ZooKeeper 的四字母命令

类别 命令 描述
服务器状态 ruok 如果服务器正在运行并且未处于出错状态,则输出imok
conf 输出服务器的配置信息(根据配置文件 zoo.cfg)
envi 输出服务器的环境信息,包括ZooKeeper 版本、Java 版本和其他系统属性
srvr 输出服务器的统计信息,包括延迟统计、znode 的数量和服务器运行模式(standalone、leader 或 follower)
stat 输出服务器的统计信息和已连接的客户端
srst 重置服务器的统计信息
isro 显示服务器是否处于只读(ro)模式(由于网络分区),或者读写(rw)模式
客户端连接 dump 列出集合体中的所有会话和短暂 znode 。必须连接到 leader 才能够使用此命令(参考srvr 命令)
cons 列出所有服务器客户端的连接统计信息
crst 重置连接统计信息
观察 wchs 列出服务器上所有观察的摘要信息
wchc 按连接列出服务器上所有的观察。注意:如果观察的数量较多,此命令会影响服务器的性能
wchp 按 znode 路径列出服务器上所有的观察。注意:如果观察的数量较多,此命令会影响服务器的性能
监控 mntr 按 Java 属性格式列出服务器统计信息。适合于用作 Ganglia 和 Nagios 等监控系统的信息源


除了 mntr 命令之外, ZooKeeper 还通过 JMX 来披露统计信息。在安装目录的 src/contrib 子目录中包含有相关的监控工具集方法。

更多关于 Zookeeper 运维的资料请参考: zookeeper运维

你可能感兴趣的:(ZooKeeper 搭建附录)