Apache ZooKeeper - FourLetterCommands运维命令

本文介绍了Apache ZooKeeper中用于监控服务状态的四字母命令,包括stat、srvr、mntr等,并解释了如何利用这些命令获取服务器状态、客户端连接详情、集群健康状况等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


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");
    }


命令解析

命令示例描述
confecho conf | nc localhost 2181(New in 3.3.0)输出相关服务配置的详细信息。比如端口、zk数据及日志配置路径、最大连接数,session超时时间、serverId等
consecho cons | nc localhost 2181(New in 3.3.0)列出所有连接到这台服务器的客户端连接/会话的详细信息。包括“接受/发送”的包数量、session id 、操作延迟、最后的操作执行等信息。
crstecho crst | nc localhost 2181(New in 3.3.0)重置当前这台服务器所有连接/会话的统计信息
dumpecho dump | nc localhost 2181列出未经处理的会话和临时节点(只在leader上有效)。
enviecho envi | nc localhost 2181输出关于服务器的环境详细信息(不同于conf命令),比如zookeeper.version、host.name、java.version、java.home、user.dir=/data/zookeeper-3.4.6/bin之类信息
ruokecho ruok | nc localhost 2181测试服务是否处于正确运行状态。如果正常返回"imok",否则返回空。
srstecho srst | nc localhost 2181重置服务器的统计信息
srvrecho srvr | nc localhost 2181(New in 3.3.0)输出服务器的详细信息。zk版本、接收/发送包数量、连接数、模式(leader/follower)、节点总数。
statecho stat | nc localhost 2181输出服务器的详细信息:接收/发送包数量、连接数、模式(leader/follower)、节点总数、延迟。 所有客户端的列表。
wchsecho wchs | nc localhost 2181(New in 3.3.0)列出服务器watches的简洁信息:连接总数、watching节点总数和watches总数
wchcecho wchc | nc localhost 2181(New in 3.3.0)通过session分组,列出watch的所有节点,它的输出是一个与 watch 相关的会话的节点列表。如果watches数量很大的话,将会产生很大的开销,会影响性能,小心使用。
wchpecho wchp | nc localhost 2181(New in 3.3.0)通过路径分组,列出所有的 watch 的session id信息。它输出一个与 session 相关的路径。如果watches数量很大的话,将会产生很大的开销,会影响性能,小心使用。
mntrecho mntr | nc localhost 2181(New in 3.4.0)列出集群的健康状态。包括“接受/发送”的包数量、操作延迟、当前服务模式(leader/follower)、节点总数、watch总数、临时节点总数。

confs

属性说明默认值、配置说明补充说明
clientPort客户端端口号2181客户端所连接的服务器所监听的TCP端口
dataDir数据文件目录${zkDir}/data/version-2用于配置内存数据库保存的快照目录,(文件名snapshot.xxxxx)
dataLogDir日志文件目录${zkDir}/data/version-2记录的是事务日志 (文件名如log.xxxx), 服务端会顺序写入事务日志,由于快照的写入可能会影响事务日志的写入吞吐能力,可以将dataLogDir指向专用的日志存储设备
tickTimeZk使用的基本时间度量单位3000 (单位毫秒)客户端的最小会话超时时间为两个tickTime
更低的tickTime可以更快的发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU利用率(会话存储器的处理)
maxClientCnxns客户端最大连接数60个允许每个IP地址的并发socket连接的最大连接数。为了解决某些错误的客户端每秒创建很多个Zookeeper连接,最后导致Dos而添加的选项。
minSessionTimeout最小会话超时2个tickTime时间客户端建立连接后会请求一个明确的超时值,此值不能低于minSessionTimeout
该参数配置过低可能会导致错误的客户端故障检测,过高会延迟客户端故障的检测时间
maxSessionTimeout最大会话超时20个tickTime时间客户端建立连接后会请求一个明确的超时值,此值不能高于maxSessionTimeout
该参数不会影响系统的性能,但却可以限制一个客户端消耗系统资源的时间
serverIdid
initLimitfollower最初连接到master时的超时值没有默认值,单位是tickTime的倍数当某个follower最初与master建立连接时,之间会传输大量的数据,尤其是follower落后整体很多的时候。此参数的配置取决于follower与master之间的网络速度情况,以及传输的数据量大小,如果Zookeeper中保存的数据量很大,例如存在大量的znode节点或者传输网络很慢,就需要增大时initLimit值,可以配置initLimit值为2倍你所期待的值,此值最好在网络中进行follower和master之间进行网络基准测试后再决定
属于集群配置
syncLimitfollower与master进行sync操作时的超时值没有默认值,单位为tickTime的倍数当master与follower无法进行sync操作,而且超过了syncLimit的tickTime,就会放弃该follower
属于集群配置与initLimit不同的是,syncLimit 并不依赖于Zk中保存的数据量大小,而是依赖于网络的延迟和吞吐量
高延迟的网络中或者相对较大的事务传输时,都需要提高syncLimit值
electionAlg选举算法默认3此配置不需要更改,目前其他的选举算法已被弃用
0基于UDP的LeaderElection
属于集群配置1基于UDP的FastLeaderElection
2基于UDP和认证的FastLeaderElection
3基于TCP的FastLeaderElection
electionPort选举端口在ZK的配置文件中配置,格式为:
server.x=[hostname]:port1:port2[:observer]
配置文件可拷贝conf/zoo_sample.cfg文件,加入如上格式的配置,其中
x表示服务器的ID(需要是整数),必须配置在data/myid文件中
hostname表示当前服务器在网络中的名称
port1表示用于事务发送的端口号,如2888
port2表示用于master选举的端口号,如3888
observer表示将当前服务器设置为观察者模式。此选项可选
quorumPort法人端口
peerType角色类型对应的序号默认0,表示参与者的角色在源码中使用LearnerType枚举类来表示,有2种类型 PARTICIPANT(0), OBSERVER(1)
可选值有0和1分别表示参与者和观察者,默认是参与者,可以参与投票进行选举的角色
若需要修改为观察者,需要在ZK配置文件中加入
peerType=observer
以及
server.x=[hostname]:port1:port2
后加入:observer

cons

cons 命令用于输出当前这台服务器上所有客户端连接的详细信息,包括每个客户端的客户端 IP 、会话 ID 和最后一次与服务器交互的操作类型等。

属性说明
ip+portip地址+端口
[interestOps]netty/NIO中定义的interestOps
queued已经提交但未响应的请求数
recved收到的包数量
sent发送的数据包数量(包括通知)
sidsession id
lop即 last operation 此连接执行的上一个操作
est即 Established 建立连接的时间戳
to会话超时时间,单位毫秒值
lcxid此连接的最后一个 cxid (指客户端发送一个数据包到服务器之前在服务器生成一个单调递增的整数)
lzxid此连接的最后一个 zxid (事务ID)
lresp上次服务器在此连接上向客户端发送的响应时间
llat即 LastLatency 此连接对应客户端的上次响应的延迟 (单位ms)
minlat最小延迟 ms
avglat平均延迟 ms
maxlat最大延迟 ms

stat

stat 命令的作用是监控 ZooKeeper 服务器的状态,我们通过 stat 命令统计 ZooKeeper 服务器的 ZooKeeper 版本信息、集群数节点等信息

属性说明
Zookeeper versionzookeeper版本号
Clients客户端相关信息
Latency min/avg/max最小/平均/最大延迟 ms
Received收包数
Sent发包数
Connections已连接的客户端数量
Outstanding队列中尚未完成的请求数
Zxid上次处理的zxid
Mode所属角色
Node count节点数
[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_countznode节点总数
zk_watch_countwatch总数
zk_ephemerals_count临时节点总数(znode)
zk_approximate_data_size数据的近似大小
zk_open_file_descriptor_count打开的文件描述符数量
zk_max_file_descriptor_count最大文件描述符数量
zk_followersfollower数量
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

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值