一、概述

zooKeeper支持某些特定的四字命令与其的交互。它们大多是查询命令,用来获取 zooKeeper服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向zooKeeper提交相应的命令。

zooKeeper常用四字命令如下:

  • conf:输出相关服务配置的详细信息。比如端口、zk数据及日志配置路径、最大连接数,session超时时间、serverId等
  • cons:列出所有连接到这台服务器的客户端连接/会话的详细信息。包括“接受/发送”的包数量、session id 、操作延迟、最后的操作执行等信息
  • crst:重置当前这台服务器所有连接/会话的统计信息
  • dump:列出未经处理的会话和临时节点
  • envi:输出关于服务器的环境详细信息
  • ruok:测试服务是否处于正确运行状态。如果正常返回"imok",否则返回空
  • stat:输出服务器的详细信息:接收/发送包数量、连接数、模式(leader/follower)、节点总数、延迟。 所有客户端的列表
  • srst:重置server状态
  • wchs:列出服务器watches的简洁信息:连接总数、watching节点总数和watches总数
  • wchc:通过session分组,列出watch的所有节点,它的输出是一个与 watch 相关的会话的节点列表
  • mntr:列出集群的健康状态。包括“接受/发送”的包数量、操作延迟、当前服务模式(leader/follower)、节点总数、watch总数、临时节点总数

二、nc命令工具安装

在root用户下执行如下命令即可:

yum install -y nc

三、四字监控命令的使用

【a】conf命令

输出相关服务配置的详细信息。比如端口、zk数据及日志配置路径、最大连接数,session超时时间、serverId等。

[root@localhost bin]# echo conf| nc 192.168.179.133 2181
clientPort=2181  #客户端端口号
dataDir=/zookeeper/data/version-2  #数据快照文件目录 默认情况下100000次事务操作生成一次
快照
dataLogDir=/zookeeper/log/version-2  #事务日志文件目录,生产环境中放在独立的磁盘上
tickTime=2000  #服务器之间或客户端与服务器之间维持心跳的时间间隔(以
毫秒为单位)
maxClientCnxns=60  #最大连接数
minSessionTimeout=4000 #最小session过期时间  minSessionTimeout=tickTime*2
maxSessionTimeout=40000   #最大session过期时间  maxSessionTimeout=tickTime*20
serverId=3   #服务器编号
initLimit=10   #集群中的follower服务器(F)与leader服务器(L)之间初始连接
时能容忍的最多心跳数
syncLimit=5   #集群中的follower服务器(F)与leader服务器(L)之间 请求和
应答之间能容忍的最多心跳数
electionAlg=3   #选举算法
electionPort=3888   #选举端口
quorumPort=2888   #数据通信端口
peerType=0   #是否为观察者 1为观察者

【b】cons命令

列出所有连接到这台服务器的客户端连接/会话的详细信息。包括“接受/发送”的包数量、session id 、操作延迟、最后的操作执行等信息。

[root@localhost bin]# echo cons | nc 192.168.179.133 2181
 /127.0.0.1:43816[1](queued=0,recved=3,sent=3,sid=0x3000004c3f0000a,lop=CREA,est=1609234625852,to=30000,lcxid=0x1,lzxid=0x50000005b,lresp=24339919,llat=2,minlat=0,avglat=3,maxlat=7)
 /192.168.179.133:59288[0](queued=0,recved=1,sent=0)

属性说明:

  • ip:ip地址
  • port:端口号
  • queued:等待被处理的请求数,请求缓存在队列中
  • received:收到的包数
  • sent:发送的包数
  • sid:会话id
  • lop:最后的操作 GETD-读取数据 DELE-删除数据 CREA-创建数据
  • est:连接时间戳
  • to:超时时间
  • lcxid:当前会话的操作id
  • lzxid:最大事务id
  • lresp:最后响应时间戳
  • llat:最后/最新 延时
  • minlat:最小延时
  • maxlat:最大延时
  • avglat:平均延时

【c】crst命令

重置当前这台服务器所有连接/会话的统计信息。

[root@localhost bin]# echo cons | nc 192.168.179.133 2181
 /192.168.179.133:59290[0](queued=0,recved=1,sent=0)
 /127.0.0.1:43816[1](queued=0,recved=16,sent=16,sid=0x3000004c3f0000a,lop=PING,est=1609234625852,to=30000,lcxid=0x1,lzxid=0xffffffffffffffff,lresp=24470010,llat=0,minlat=0,avglat=0,maxlat=7)

[root@localhost bin]# echo crst | nc 192.168.179.133 2181
Connection stats reset.
[root@localhost bin]# echo cons | nc 192.168.179.133 2181   #再次统计客户端连接/会话的详细信息
 /127.0.0.1:43816[1](queued=0,recved=1,sent=1,sid=0x3000004c3f0000a,lop=PING,est=1609234625852,to=30000,lzxid=0xffffffffffffffff,lresp=24490016,llat=0,minlat=0,avglat=0,maxlat=0)
 /192.168.179.133:59294[0](queued=0,recved=1,sent=0)

如上可见,服务器的所有连接以及会话统计信息都重置成功。

【d】dump命令

列出未经处理的会话和临时节点。

[zk: localhost:2181(CONNECTED) 3] create -e /node11 "node11"  #创建一个临时节点
Created /node11

[root@localhost bin]# echo dump | nc 192.168.179.133 2181
SessionTracker dump:
org.apache.zookeeper.server.quorum.LearnerSessionTracker@5c2461e9
ephemeral nodes dump:
Sessions with Ephemerals (1):
0x3000004c3f0000a:   #会话ID
	/node11   #临时节点路径

【e】envi命令

输出关于服务器的环境详细信息。

[root@localhost bin]# echo envi | nc 192.168.179.133 2181
Environment:
zookeeper.version=3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
host.name=localhost
java.version=1.8.0_161
java.vendor=Oracle Corporation
java.home=/usr/local/java/jdk1.8.0_161/jre
java.class.path=/usr/local/zookeeper-3.4.14/bin/../zookeeper-server/target/classes:/usr/local/zookeeper-3.4.14/bin/../build/classes:/usr/local/zookeeper-3.4.14/bin/../zookeeper-server/target/lib/*.jar:/usr/local/zookeeper-3.4.14/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.14/bin/../lib/slf4j-log4j12-1.7.25.jar:/usr/local/zookeeper-3.4.14/bin/../lib/slf4j-api-1.7.25.jar:/usr/local/zookeeper-3.4.14/bin/../lib/netty-3.10.6.Final.jar:/usr/local/zookeeper-3.4.14/bin/../lib/log4j-1.2.17.jar:/usr/local/zookeeper-3.4.14/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.14/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.14/bin/../zookeeper-3.4.14.jar:/usr/local/zookeeper-3.4.14/bin/../zookeeper-server/src/main/resources/lib/*.jar:/usr/local/zookeeper-3.4.14/bin/../conf:.:/usr/local/java/jdk1.8.0_161/lib:/usr/local/java/jdk1.8.0_161/jre/lib
java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.io.tmpdir=/tmp
java.compiler=<NA>
os.name=Linux
os.arch=amd64
os.version=3.10.0-862.el7.x86_64
user.name=root
user.home=/root
user.dir=/usr/local/zookeeper-3.4.14/bin

属性说明如下:

  • zookeeper.version:版本
  • host.name:host信息
  • java.version:java版本
  • java.vendor:供应商
  • java.home:运行环境所在目录
  • java.class.path:classpath
  • java.library.path:第三方库指定非java类包的位置(如:dll,so)
  • java.io.tmpdir:默认的临时文件路径
  • java.compiler:JIT 编译器的名称
  • os.name:Linux
  • os.arch:amd64
  • os.version:3.10.0-514.el7.x86_64
  • user.name:zookeeper
  • user.home:/home/zookeeper
  • user.dir:/home/zookeeper/zookeeper2181/bin

【f】ruok命令

【are you ok?】测试服务是否处于正确运行状态。如果正常返回"imok",否则返回空。

[root@localhost bin]# echo ruok | nc 192.168.179.133 2181
imok

【g】stat命令

输出服务器的详细信息:接收/发送包数量、连接数、模式(leader/follower)、节点总数、延迟。 所有客户端的列表。

[root@localhost bin]# echo stat | nc 192.168.179.133 2181
Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT   #版本
Clients:   #每个连接客户端的会话信息
 /127.0.0.1:43816[1](queued=0,recved=42,sent=42)
 /192.168.179.133:59304[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/11  #延时
Received: 2368  #收到的包
Sent: 2367  #发送的包
Connections: 2  #当前连接数
Outstanding: 0  #当前请求堆积数
Zxid: 0x50000005c  #最大事务ID
Mode: follower  #当前节点在集群中的角色 
Node count: 29  #节点数

【h】srst命令

重置server状态。

[root@localhost bin]# echo stat | nc 192.168.179.133 2181  #重置前
Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
Clients:
 /127.0.0.1:43816[1](queued=0,recved=42,sent=42)
 /192.168.179.133:59304[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/11
Received: 2368
Sent: 2367
Connections: 2
Outstanding: 0
Zxid: 0x50000005c
Mode: follower
Node count: 29

[root@localhost bin]# echo srst | nc 192.168.179.133 2181   #重置后
Server stats reset.
[root@localhost bin]# echo stat | nc 192.168.179.133 2181
Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
Clients:
 /127.0.0.1:43816[1](queued=0,recved=56,sent=56)
 /192.168.179.133:59308[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 1
Connections: 2
Outstanding: 0
Zxid: 0x50000005c
Mode: follower
Node count: 29

如上可见,重置完成功后,服务器相关的延时等信息都重置了。

【i】wchs命令

列出服务器watches的简洁信息:连接总数、watching节点总数和watches总数。

[zk: localhost:2181(CONNECTED) 11] get /node1 watch  #注册一个watcher监听

[root@localhost bin]# echo wchs | nc 192.168.179.133 2181
1 connections watching 1 paths
Total watches:1

属性说明:

  • connectsions:连接数
  • watch-paths:watch节点数
  • watchers:watcher数量

【j】mntr命令

列出集群的健康状态。包括“接受/发送”的包数量、操作延迟、当前服务模式(leader/follower)、节点总数、watch总数、临时节点总数。

[root@localhost bin]# echo mntr | nc 192.168.179.133 2181
zk_version	3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT  #zk版本号
zk_avg_latency	0   #平均延时
zk_max_latency	3   #最大延时
zk_min_latency	0   #最小延迟
zk_packets_received	48   #收到的包数
zk_packets_sent	48   #发送的包数
zk_num_alive_connections	2   #连接数
zk_outstanding_requests	0   #堆积请求数
zk_server_state	follower   #leader/follower 状态
zk_znode_count	29   #节点数量
zk_watch_count	2   #当前注册的watcher数量
zk_ephemerals_count	1   #临时节点个数(znode)
zk_approximate_data_size	482   #数据长度
zk_open_file_descriptor_count	33   #打开的文件描述符数量
zk_max_file_descriptor_count	65536   #最大文件描述符数量
zk_fsync_threshold_exceed_count	0   #

以上就是关于常见zookeeper中四字命令的使用总结。