Pre
Apache ZooKeeper - JMX监控 ZooKeeper 的运行状态
除了 JConsole 监控控制台之外,ZooKeeper 还提供了一些命令,可使我们更加灵活地统计监控 ZooKeeper 服务的状态信息。
ZooKeeper 提供的这些命令也叫作四字母命令,如它们的名字一样,每一个命令都是由四个字母组成的。
比如,输入相关的命令来查询 ZooKeeper 服务,可以输入 stat 命令来查看数据节点等信息。
echo {command} | nc 127.0.0.1 2181
安装nc
netcat(nc)不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具。
默认未安装 ,安装如下
yum install -y nc
常见的四字母命令
FourLetterCommands
org.apache.zookeeper.server.command.FourLetterCommands
// specify all of the commands that are available static { cmd2String.put(confCmd, "conf"); cmd2String.put(consCmd, "cons"); cmd2String.put(crstCmd, "crst"); cmd2String.put(dirsCmd, "dirs"); cmd2String.put(dumpCmd, "dump"); cmd2String.put(enviCmd, "envi"); cmd2String.put(getTraceMaskCmd, "gtmk"); cmd2String.put(ruokCmd, "ruok"); cmd2String.put(setTraceMaskCmd, "stmk"); cmd2String.put(srstCmd, "srst"); cmd2String.put(srvrCmd, "srvr"); cmd2String.put(statCmd, "stat"); cmd2String.put(wchcCmd, "wchc"); cmd2String.put(wchpCmd, "wchp"); cmd2String.put(wchsCmd, "wchs"); cmd2String.put(mntrCmd, "mntr"); cmd2String.put(isroCmd, "isro"); cmd2String.put(telnetCloseCmd, "telnet close"); }
命令解析
confs
cons
cons 命令用于输出当前这台服务器上所有客户端连接的详细信息,包括每个客户端的客户端 IP 、会话 ID 和最后一次与服务器交互的操作类型等。
stat
stat 命令的作用是监控 ZooKeeper 服务器的状态,我们通过 stat 命令统计 ZooKeeper 服务器的 ZooKeeper 版本信息、集群数节点等信息
[root@localhost ~]# echo stat | nc 192.168.126.136 2181 Zookeeper version: 3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT Clients: /192.168.126.136:54644[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0 Received: 3 Sent: 2 Connections: 1 Outstanding: 0 Zxid: 0x69ce Mode: standalone Node count: 5 [root@localhost ~]#
mntr
属性 | 说明 |
zk_version | 版本信息 |
zk_avg_latency | 平均延迟 |
zk_max_latency | 最大延迟 |
zk_min_latency | 最小延迟 |
zk_packets_received | 收包数 |
zk_packets_sent | 发包数 |
zk_num_alive_connections | 存活的连接数 |
zk_outstanding_requests | 堆积的请求数 |
zk_server_state | 服务器的状态,包括:leader, follower, observer, read-only, standalone |
zk_znode_count | znode节点总数 |
zk_watch_count | watch总数 |
zk_ephemerals_count | 临时节点总数(znode) |
zk_approximate_data_size | 数据的近似大小 |
zk_open_file_descriptor_count | 打开的文件描述符数量 |
zk_max_file_descriptor_count | 最大文件描述符数量 |
zk_followers | follower数量 |
zk_synced_followers | 已同步的follower数量 |
zk_pending_syncs | 等待同步请求的数量 |
[root@localhost ~]# echo mntr | nc 192.168.126.136 2181 zk_version 3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT zk_avg_latency 0 zk_max_latency 0 zk_min_latency 0 zk_packets_received 4 zk_packets_sent 3 zk_num_alive_connections 1 zk_outstanding_requests 0 zk_server_state standalone zk_znode_count 5 zk_watch_count 0 zk_ephemerals_count 0 zk_approximate_data_size 44 zk_open_file_descriptor_count 74 zk_max_file_descriptor_count 65536 [root@localhost ~]#
srvr
srvr 命令与 stat 命令的功能十分相似,唯一不同的地方是 srvr 命令不会将与客户端的连接情况输出,通过 srvr 命令只会查询服务器的自身信息。
[root@localhost ~]# echo srvr | nc 127.0.0.1 2181 Zookeeper version: 3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT Latency min/avg/max: 0/0/0 Received: 5 Sent: 4 Connections: 1 Outstanding: 0 Zxid: 0x69ce Mode: standalone Node count: 5 [root@localhost ~]# [root@localhost ~]#
ruok
ruok 命令的主要作用是查询 ZooKeeper 服务器是否正常运行。如果 ZooKeeper 服务器正常运行,执行完 ruok 命令后,会得到 “imok” 返回值。如果 ZooKeeper 服务没有正常运行,则不会有任何返回值。在使用 ruok 命令的时候,在这里我们要注意的一点是,有些时候即使返回了 “imok” 字段,ZooKeeper 服务也可能没有正常运行,唯一能确定的是该台服务器的 2181 端口是打开的.
[root@localhost ~]# echo ruok | nc 127.0.0.1 2181 imok [root@localhost ~]#
Question
[root@localhost bin]# echo stat | nc 192.168.126.136 2181 stat is not executed because it is not in the whitelist.
需要加入白名单才能使用 , 开启 -Dzookeeper.4lw.commands.whitelist=*
解析类 org.apache.zookeeper.server.NettyServerCnxn#checkFourLetterWord