zookeeper提供四字命令来对zookeeper进行监控或管理。
四字命令的打开方式:
echo mntr | nc localhost 2181
telnet localhost 2181
然后输入mntr
四字命令说明:
四字命令 | 说明 |
---|---|
conf | conf 命令用于输出Zookeeper服务器运行时使用的基本配置信息。包括clientPort , dataDir 和tickTime 等,以便于运维人员快速地查看Zookeeper当前运行时的一些参数。 |
cons | cons 命令会用于输出当前这台服务器上所有客户端连接的详细信息,包括每个客户端的IP,sessionID和最后一次与服务器交互的操作类型等。 |
crst | crst 命令是一个功能性命令,用于重置所有的客户端连接统计信息。 |
dump | dump 命令用于输出当前集群的所有会话信息,包括会话的sessionID,以及每个会话创建的临时节点等信息。如果在Leader服务器上执行该命令的话,我们还能够看到每个会话的超时时间。 |
envi | envi 命令用于输出Zookeeper所在服务器运行时的环境信息。包括os.version , java.version , user.home 等。 |
ruok | ruok 命令用于输出当前Zookeeper服务器是否在运行。 |
stat | stat 命令用于获取Zookeeper服务器的运行时状态信息,包括基本的Zookeeper版本,打包信息,运行时角色,集群数据节点个数等信息,另外还会将当前服务器的客户端连接信息打出来。另外,stat 命令还会输出一些服务器的统计信息,包括延迟情况,收到的请求数和返回的响应数等。这些信息可以通过srst 命令进行重置。 |
srvr | srvr 命令和stat命令的功能一致,唯一的区别是srvr不会将客户端的链接情况输出,仅仅输出服务器端的自身信息。 |
srst | srst 命令是一个功能性命令,用于重置所有服务器的统计信息。 |
wchs | wchs 命令用于输出当前服务器上管理的watcher的概要信息。 |
wchc | wchc 命令用于输出当前服务器上管理的watcher的详细信息,以会话为单位进行归组,同时列出被该会话信息注册了watcher的节点路径。 |
wchp | wchp 命令和wchc命令非常类似,也是用于输出当前服务器上管理的watcher的详细信息,不同点在于wchp命令的输出信息是以节点路径为单位进行归组。 |
mntr | mntr 命令用于输出比stat命令更为详尽的服务器统计信息,包括请求处理的延迟情况,服务器内存数据库大小和集群数据同步情况。在输出结果中,每一行都是一个key-value键值对,运维人员可以根据这些输出信息进行Zookeeper的运行时状态监控。 |
指标采集
- zookeeper的四字命令
mntr
- JMX接口
指标名称 | 说明 | 重要性与建议 |
---|---|---|
zk_server_state | 集群中有且只能有一个leader,没有leader,则集群无法正常工作;两个或以上的leader,则视为脑裂,会导致数据不一致问题 | 高 |
zk_followers /zk_synced_followers | 如果上述两个值不相等,就表示部分follower异常了需要立即处理,很多低级事故,都是因为单个集群故障了太多的follower未及时处理导致 | 高 |
zk_outstanding_requests | 常态下该值应该持续为0,不应该有未处理请求 | 高 |
zk_pending_syncs | 常态下该值应该持续为0,不应该有未同步的数据 | 高 |
zk_znode_count | 节点数越多,集群的压力越大,性能会随之急剧下降 | 重要性:高 经验值:不要超过100万 建议:当节点数过多时,需要考虑以机房/地域/业务等维度进行拆分 |
zk_approximate_data_size | 当快照体积过大时,ZK的节点重启后,会因为在initLimit 的时间内同步不完整个快照而无法加入集群 | 重要性:高 经验值:不要超过1GB体积 建议:不要把ZK当做文件存储系统来使用 |
zk_open_file_descriptor_count<br />/zk_max_file_descriptor_count | 当上述两个值相等时,集群无法接收并处理新的请求 | 重要性:高 建议:修改 /etc/security/limits.conf ,将线上账号的文件句柄数调整到100万 |