本文只讲解zookeeper的四字命令及客户端连接服务端的zkCli.sh命令的使用及zookeeper的监控,如果需要安装请参考zookeeper安装及简介

1. 客户端获取zookeeper服务性能及详细信息的四字命令

用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。 ZooKeeper 常用四字命令如下表:
ZooKeeper 四字命令 功能描述
conf 输出相关服务配置的详细信息。
cons 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
dump 列出未经处理的会话和临时节点。
envi 输出关于服务环境的详细信息(区别于 conf 命令)。
reqs 列出未经处理的请求
ruok 测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
stat 输出关于性能和连接的客户端的列表。

wchs 列出服务器 watch 的详细信息。
wchc 通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。
wchp 通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。
下图是我们的实际案例
zookeeper命令使用及监控_第1张图片

2. zkCli.sh 客户端连接服务端命令操作

一般情况下zookeeper提供了三种方式:java/C客户端及zookeeper api进行交互,当然还有命令行的操作方式直接与zookeeper服务进行交互。这里只讲解命令行方式。
直接上操作图解
zkCli.sh IP 2181
zookeeper命令使用及监控_第2张图片

3. 监控

由于网络上提供的监控工具有各种安全问题,这里不建议使用网络上的监控软件,这里自己写脚本,使用zabbix进行监控或者直接使用jmx进行监控。这里只讲zabbix监控。
zabbix监控zookeeper通过shell脚本获取各个监控项的值,从而通过zabbix-agent发送给server。
脚本如下:
一共俩脚本
zabbix_zookeeper1.sh
#!/bin/bash
echo mntr|nc 172.16.80.202 2181|grep "$1" |awk '{print $2}'
zabbix_zookeeper1.sh
#!/bin/bash
echo srvr|nc 127.0.0.1 2181 | grep "$1" |awk '{print $2}'
在zabbix-agent的配置文件中配置
[root@node2 zabbix_agentd.d]# cat userparameter_zookeeper.conf
UserParameter=zookeeper1[],/bin/sh /data/scripts/zabbix_zookeeper1.sh $1
UserParameter=zookeeper1[
],/bin/sh /data/scripts/zabbix_zookeeper2.sh $1
最后在zabbix中添加主机同时添加监控项即可。
我们知道前面可以使用命令获取zookeeper服务的各种信息,这样我们就可以直接写脚本获取信息。
我们要获取zookeeper的哪些监控项的值呢?
网上给出了监控项:
系统监控 这个监控linux系统以及修改linux服务器参数即可
内存使用量 ZooKeeper应当完全运行在内存中,不能使用到SWAP。Java Heap大小不能超过可用内存。
Swap使用量 使用Swap会降低ZooKeeper的性能,设置vm.swappiness = 0
网络带宽占用 如果发现ZooKeeper性能降低关注下网络带宽占用情况和丢包情况,通常情况下ZooKeeper是20%写入80%读入
磁盘使用量 ZooKeeper数据目录使用情况需要注意
磁盘I/O ZooKeeper的磁盘写入是异步的,所以不会存在很大的I/O请求,如果ZooKeeper和其他I/O密集型服务公用应该关注下磁盘I/O情况

zk_avg/min/max_latency 响应一个客户端请求的时间,建议这个时间大于10个Tick就报警
zk_outstanding_requests 排队请求的数量,当ZooKeeper超过了它的处理能力时,这个值会增大,建议设置报警阀值为10
zk_packets_received 接收到客户端请求的包数量
zk_packets_sent 发送给客户端的包数量,主要是响应和通知
zk_max_file_descriptor_count 最大允许打开的文件数,由ulimit控制
zk_open_file_descriptor_count 打开文件数量,当这个值大于允许值得85%时报警
Mode 运行的角色,如果没有加入集群就是standalone,加入集群式follower或者leader
zk_followers leader角色才会有这个输出,集合中follower的个数。正常的值应该是集合成员的数量减1
zk_pending_syncs leader角色才会有这个输出,pending syncs的数量
zk_znode_count znodes的数量
zk_watch_count watches的数量
Java Heap Size ZooKeeper Java进程的