您的位置:首页 > 其它

ZooKeeper 搭建附录

2015-12-20 11:36 841 查看
一 配置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里的:



log4j.properties里的:



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





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



二. 客户端连接 ZooKeeper 服务器

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


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



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



三. 启动的日志

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



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

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



原则: 要使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运维
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: