Apache ZooKeeper - FourLetterCommands运维命令

2021-08-17 16:23:47 浏览数 (1)


Pre

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

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

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

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

代码语言:javascript复制
echo {command} | nc 127.0.0.1 2181 

安装nc

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

默认未安装 ,安装如下

代码语言:javascript复制
 yum install -y nc

常见的四字母命令

FourLetterCommands

代码语言:javascript复制
org.apache.zookeeper.server.command.FourLetterCommands
代码语言:javascript复制
    // 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");
    }

命令解析

命令

示例

描述

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

节点数

代码语言:javascript复制
[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

等待同步请求的数量

代码语言:javascript复制
[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 命令只会查询服务器的自身信息。

代码语言:javascript复制
[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 端口是打开的.

代码语言:javascript复制
[root@localhost ~]# echo ruok | nc 127.0.0.1 2181 
imok
[root@localhost ~]# 

Question

代码语言:javascript复制
[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

0 人点赞