Apache ZooKeeper - FourLetterCommands运维命令

举报
小工匠 发表于 2021/09/09 23:33:43 2021/09/09
【摘要】 文章目录 Pre安装nc常见的四字母命令FourLetterCommands命令解析confsconsstatmntrsrvrruok Question Pre Apac...

在这里插入图片描述


Pre

Apache ZooKeeper - JMX监控 ZooKeeper 的运行状态

除了 JConsole 监控控制台之外,ZooKeeper 还提供了一些命令,可使我们更加灵活地统计监控 ZooKeeper 服务的状态信息。

ZooKeeper 提供的这些命令也叫作四字母命令,如它们的名字一样,每一个命令都是由四个字母组成的。

比如,输入相关的命令来查询 ZooKeeper 服务,可以输入 stat 命令来查看数据节点等信息。

echo {command} | nc 127.0.0.1 2181 


  
 
  • 1
  • 2

安装nc

netcat(nc)不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具。

默认未安装 ,安装如下

 yum install -y nc

  
 
  • 1

常见的四字母命令

FourLetterCommands

org.apache.zookeeper.server.command.FourLetterCommands

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


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

命令解析

命令 示例 描述
conf echo conf | nc localhost 2181 (New in 3.3.0)输出相关服务配置的详细信息。比如端口、zk数据及日志配置路径、最大连接数,session超时时间、serverId等
cons echo cons | nc localhost 2181 (New in 3.3.0)列出所有连接到这台服务器的客户端连接/会话的详细信息。包括“接受/发送”的包数量、session id 、操作延迟、最后的操作执行等信息。
crst echo crst | nc localhost 2181 (New in 3.3.0)重置当前这台服务器所有连接/会话的统计信息
dump echo dump | nc localhost 2181 列出未经处理的会话和临时节点(只在leader上有效)。
envi echo envi | nc localhost 2181 输出关于服务器的环境详细信息(不同于conf命令),比如zookeeper.version、host.name、java.version、java.home、user.dir=/data/zookeeper-3.4.6/bin之类信息
ruok echo ruok | nc localhost 2181 测试服务是否处于正确运行状态。如果正常返回"imok",否则返回空。
srst echo srst | nc localhost 2181 重置服务器的统计信息
srvr echo srvr | nc localhost 2181 (New in 3.3.0)输出服务器的详细信息。zk版本、接收/发送包数量、连接数、模式(leader/follower)、节点总数。
stat echo stat | nc localhost 2181 输出服务器的详细信息:接收/发送包数量、连接数、模式(leader/follower)、节点总数、延迟。 所有客户端的列表。
wchs echo wchs | nc localhost 2181 (New in 3.3.0)列出服务器watches的简洁信息:连接总数、watching节点总数和watches总数
wchc echo wchc | nc localhost 2181 (New in 3.3.0)通过session分组,列出watch的所有节点,它的输出是一个与 watch 相关的会话的节点列表。如果watches数量很大的话,将会产生很大的开销,会影响性能,小心使用。
wchp echo wchp | nc localhost 2181 (New in 3.3.0)通过路径分组,列出所有的 watch 的session id信息。它输出一个与 session 相关的路径。如果watches数量很大的话,将会产生很大的开销,会影响性能,小心使用。
mntr echo 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指向专用的日志存储设备
tickTime Zk使用的基本时间度量单位 3000 (单位毫秒) 客户端的最小会话超时时间为两个tickTime
更低的tickTime可以更快的发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU利用率(会话存储器的处理)
maxClientCnxns 客户端最大连接数 60个 允许每个IP地址的并发socket连接的最大连接数。为了解决某些错误的客户端每秒创建很多个Zookeeper连接,最后导致Dos而添加的选项。
minSessionTimeout 最小会话超时 2个tickTime时间 客户端建立连接后会请求一个明确的超时值,此值不能低于minSessionTimeout
该参数配置过低可能会导致错误的客户端故障检测,过高会延迟客户端故障的检测时间
maxSessionTimeout 最大会话超时 20个tickTime时间 客户端建立连接后会请求一个明确的超时值,此值不能高于maxSessionTimeout
该参数不会影响系统的性能,但却可以限制一个客户端消耗系统资源的时间
serverId id
initLimit follower最初连接到master时的超时值 没有默认值,单位是tickTime的倍数 当某个follower最初与master建立连接时,之间会传输大量的数据,尤其是follower落后整体很多的时候。此参数的配置取决于follower与master之间的网络速度情况,以及传输的数据量大小,如果Zookeeper中保存的数据量很大,例如存在大量的znode节点或者传输网络很慢,就需要增大时initLimit值,可以配置initLimit值为2倍你所期待的值,此值最好在网络中进行follower和master之间进行网络基准测试后再决定
属于集群配置
syncLimit follower与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+port ip地址+端口
[interestOps] netty/NIO中定义的interestOps
queued 已经提交但未响应的请求数
recved 收到的包数量
sent 发送的数据包数量(包括通知)
sid session 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 version zookeeper版本号
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 ~]# 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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 ~]# 


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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 ~]# 


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

ruok

ruok 命令的主要作用是查询 ZooKeeper 服务器是否正常运行。如果 ZooKeeper 服务器正常运行,执行完 ruok 命令后,会得到 “imok” 返回值。如果 ZooKeeper 服务没有正常运行,则不会有任何返回值。在使用 ruok 命令的时候,在这里我们要注意的一点是,有些时候即使返回了 “imok” 字段,ZooKeeper 服务也可能没有正常运行,唯一能确定的是该台服务器的 2181 端口是打开的.

[root@localhost ~]# echo ruok | nc 127.0.0.1 2181 
imok
[root@localhost ~]# 

  
 
  • 1
  • 2
  • 3

Question

[root@localhost bin]# echo stat | nc 192.168.126.136  2181
stat is not executed because it is not in the whitelist.


  
 
  • 1
  • 2
  • 3

需要加入白名单才能使用 , 开启 -Dzookeeper.4lw.commands.whitelist=*

解析类 org.apache.zookeeper.server.NettyServerCnxn#checkFourLetterWord

在这里插入图片描述

在这里插入图片描述

文章来源: artisan.blog.csdn.net,作者:小小工匠,版权归原作者所有,如需转载,请联系作者。

原文链接:artisan.blog.csdn.net/article/details/111552775

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。