ZooKeeper中有很多类似的命令,他们的长度通常都是4个英文字母,因此我们称之为“四字命令”。
四字命令的使用方式非常简单,通常有两种方式。第一种是通过Telnet方式,使用Telnet客户端登录 ZooKeeper的对外服务端口,然后直接输入四字命令即可,如下图所示。
从上图中,我们可以看到,通过Telent方式登录 ZooKeeper服务器的2181端口后,执行conf命令,即可将当前 ZooKeeper服务器的配置信息打印出来。
第二种则是使用nc方式,如下图所示。
以上分别通过Telnet方式和nc方式来执行 ZooKeeper的conf命令,对于其他命令,使用方式也是一样的。
conf命令用于输出 ZooKeeper服务器运行时使用的基本配置信息,包括clientPort、dataDir和tickTime等,以便运维人员能快速查看 ZooKeeper当前运行时的一些参数,如上图所示。注意,conf命令输出的配置信息仅仅是输出一些最基本的配置参数。
另外,conf命令会根据当前的运行模式来决定输出的信息。上图所示的输出信息是针对集群模式下的样例,如果是单机模式(standalone),就不会输出诸如initLimit、syncLimit、electionAlg和electionPort等集群相关的配置信息。
cons命令用于输出当前这台服务器上所有客户端连接的详细信息,包括每个客户端的客户端IP、会话ID和最后一次与服务器交互的操作类型等,如下图所示。
crst命令是一个功能性命令,用于重置所有的客户端连接统计消息,如下图所示。
dump命令用于输出当前集群的所有会话信息,包括这些会话的会话ID,以及每个会话创建的临时节点等信息。如果在Leader服务器上执行该命令的话,我们还能够看到每个会话的超时时间。下图分别列举了在Leader和Follower服务器上的命令执行情况。
envi命令用于输出 ZooKeeper所在服务器运行时的环境信息,包括os.version、java.version和user.home等,如下图所示。
ruok命令用于输出当前 ZooKeeper服务器是否正在运行。该命令的名字非常有趣,其协议正好是“Are you ok”。执行该命令后,如果当前 ZooKeeper服务器正在运行,那么返回“imok”,否则没有任何响应输出,如下图所示。
请注意,ruok命令的输出仅仅只能表明当前服务器是否正在运行,准确的讲,只能说明2181端口打开着,同时四字命令执行流程正常,但是不能代表 ZooKeeper服务器是否运行正常。在很多时候,如果当前服务器无法正常处理客户端的读写请求,甚至已经无法和集群中的其他机器进行通信,ruok命令依然返回“imok”。因此,一般来说,该命令并不是一个特别有用的命令,他不能反映 ZooKeeper服务器的工作状态,想要更可靠的获取更多 ZooKeeper运行状态信息,可以使用下面马上要讲到的stat命令。
stat命令用于获取 ZooKeeper服务器的运行时状态信息,包括基本的 ZooKeeper版本、打包信息、运行时角色、集群数据节点个数等消息,另外还会将当前服务器的客户端连接信息打印出来,如下图所示。
从上图中可以看出,除了一些基本的状态信息外,stat命令还会输出一些服务器的统计信息,包括延迟情况、收到请求数和返回的响应数等。注意,所有这些统计数据都可以通过srst命令进行重置。
srvr命令和stat命令的功能一致,唯一的区别是srvr不会将客户端的连接情况输出,仅仅输出服务器的自身信息,如下图所示。
stst命令是一个功能行命令,用于重置所有服务器的统计信息,如下图所示。
wchs命令用于输出当前服务器上管理的Watcher的概要信息,如下图所示。
wchc命令用于输出当前服务器上管理的Watcher的详细信息,以会话为单位进行归组,同时列出被该会话注册了Watcher的节点路径,如下图所示。
wchp命令和wchc命令非常类似,也是用于输出当前服务器上管理的Watcher的详细信息,不同点在于wchp命令的输出信息以节点路径为单位进行归组,如下图所示。
mntr命令用于输出比stat命令更为详尽的服务器统计信息,包括请求处理的延迟情况,服务器内存数据库大小和集群的数据同步情况。在输出结果中,每一行都是一个key-value的键值对,运维人员可以,根据这些输出信息进行 ZooKeeper的运行时状态监控,如下图所示。
上图是在Follower服务器上执行mntr命令,如果在Leader服务器上执行该命令的话,还可以获取到更多的信息,如下图所示。