前言
ZooKeeper 是一个开放源码的分布式应用程序协调服务,很多分布式应用程序可以基于它实现同步服务,如 HDFS、HBase、Kafka
状态
ZooKeeper 提供了四字命令(The Four Letter Words),用来获取 ZooKeeper 服务的当前状态及相关信息
有哪些命令可以使用?
四字命令 | 功能描述 |
---|---|
conf | 打印配置 |
cons | 列出所有连接到这台服务器的客户端全部连接/会话详细信息。包括”接受/发送”的包数量、会话id、操作延迟、最后的操作执行等等信息 |
crst | 重置所有连接的连接和会话统计信息 |
dump | 列出那些比较重要的会话和临时节点。这个命令只能在leader节点上有用 |
envi | 打印出服务环境的详细信息 |
reqs | 列出未经处理的请求 |
ruok | 即”Are you ok”,测试服务是否处于正确状态。如果确实如此,那么服务返回”imok”,否则不做任何相应 |
stat | 输出关于性能和连接的客户端的列表 |
srst | 重置服务器的统计 |
srvr | 列出连接服务器的详细信息 |
wchs | 列出服务器watch的详细信息 |
wchc | 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表 |
wchp | 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径 |
mntr | 输出可用于检测集群健康状态的变量列表 |
通过下列命令来获取这些监控信息 echo commands | nc ip port
1 | $ echo mntr | nc 192.168.1.229 2181 |
还有很多信息可以获取,更多可以自行搜索。
监控
监控平台的话目前业界已经比较成熟的阿里开源 ZooKeeper 监控框架 TaoKeeper
TaoKeeper 同作原理通过SSH连接到ZooKeeper部署的机器上,再在上面执行 ZooKeeper 的四字命令来得到统计信息,再分析保存到 MySQL 数据库中。
当然也可以使用四字命令+nc写脚本去做告警也行,针对以下几个维度去
open_connections 单机打开连接连接数,建议超过平常的两倍就报警,这样就能知道比平常连接数激增
latency 响应一个客户端请求的时间,建议这个时间大于10个TickTime就报警
tickTime 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。默认是 2000 毫秒
outstanding_requests 排队请求的数量,当ZooKeeper超过了它的处理能力时,这个值会增大,建议设置报警阀值为10
zookeeper globalOutstandingLimit 配置指定了等待处理的最大请求数量的限制
open_file_descriptor_count 打开文件数量,当这个值大于允许值”zk_max_file_descriptor_count” 85% 时报警
Java Heap Size JVM 堆栈内存使用情况大于分配的最大内存 80% 时报警
参考链接