ZooKeeper,作为一款分布式协调服务,提供了丰富的四字命令(也称为四字短语)来与其进行交互。这些命令大多用于查询ZooKeeper服务的当前状态、环境变量以及临时会话等信息,是运维人员监控ZooKeeper集群状态的重要工具。在客户端,用户可以通过
nc
(Netcat)命令向ZooKeeper提交相应的四字命令。
一、四字命令基础
要使用ZooKeeper的四字命令,首先需要确保系统中已安装Netcat工具。四字命令的基本格式如下:
echo [command] | nc [ip] [port]
其中,[command]
为具体的四字命令,[ip]
为ZooKeeper服务器的IP地址,[port]
为ZooKeeper服务的端口号(默认为2181)。
二、四字命令详解
-
conf:打印ZooKeeper的配置信息,包括端口号、数据目录、日志目录、心跳间隔、最大连接数、会话超时时间等。
-
cons:列出所有连接到当前ZooKeeper服务器的客户端的详细信息,包括接收/发送的包数量、会话ID、操作延迟、最后操作时间等。
-
crst:重置所有连接的连接和会话统计信息。
-
dump:列出重要的会话和临时节点信息,该命令仅在Leader节点上有效。
-
envi:打印ZooKeeper服务的环境配置信息,如版本、主机信息、Java版本、运行环境等。
-
reqs:列出未经处理的请求。
-
ruok:测试ZooKeeper服务是否处于正常状态,如果正常则返回“imok”。
-
stat:输出ZooKeeper的性能信息和连接的客户端列表。
-
srst:重置ZooKeeper服务器的统计信息。
-
srvr:列出ZooKeeper服务器的详细信息。
-
wchs:列出当前服务器管理的Watcher信息。
-
wchc:通过会话列出Watcher信息,输出与Watcher相关的会话列表。
-
wchp:通过路径列出Watcher信息,输出与会话相关的路径。
-
mntr:输出可用于检测集群健康状态的变量列表,比
stat
命令更为详尽。
三、四字命令的开启与配置
$HOME/Zoo.cfg
以上*为开启所有四字命令,也可以指定四字命令,指定几个开启
四、结合业务解读四字命令
conf
打印出配置的详细信息。比如端口、zookeeper数据及日志配置路径、最大连接数,session超时时间、serverId等
属性 | 含义 |
---|---|
clientPort | 客户端端口号 |
dataDir | 数据快照文件目录 默认情况下100000次事务操作生成一次快照 |
dataLogDir | 事物日志文件目录,生产环境中放在独立的磁盘上 |
tickTime | 服务器之间或客户端与服务器之间维持心跳的时间间隔(以毫秒为单位) |
maxClientCnxns | 最大连接数 |
minSessionTimeout | 最小session超时 minSessionTimeout=tickTime* 2 |
maxSessionTimeout | maxSessionTimeout 最大session超时 maxSessionTimeout=tickTime * 20 |
serverId | 服务器编号 |
initLimit | 集群中的follower服务器(F)与leader服务器(L)之间 初始连接时能容忍的最多心跳数 |
syncLimit | 集群中的follower服务器(F)与leader服务器(L)之间 请求和应答之间能容忍的最多心跳数 |
electionAlg | 0:基于UDP的LeaderElection 1:基于UDP的 FastLeaderElection 2:基于UDP和认证的FastLeaderElection |
electionPort | 选举端口 |
quorumPort | 数据通信端口 |
peerType | 是否为观察者 1为观察者 |
cons
echo cons|nc localhost 2181 输出当前服务器所有客户端连接的详细信息,
看下带业务情况:
属性说明:
ip:ip地址
port:端口号
queued:等待被处理的请求数,请求缓存在队列中
received:收到的包数
sent:发送的包数
sid:会话id
lop:最后的操作 GETD-读取数据 DELE-删除数据 CREA-创建数据
est:连接时间戳
to:超时时间
lcxid:当前会话的操作id
lzxid:最大事务id
lresp:最后响应时间戳
llat:最后/最新 延时
minlat:最小延时
maxlat:最大延时
avglat:平均延时
envi命令
envi:输出关于服务器的环境配置信息
shell终端输入:echo envi| nc localhost 2181
说明:
属性 | 含义 |
---|---|
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 | /root |
user.dir | /sys/fs/cgroup |
Os.memory.free | 空间内存 |
Os.memory.max | 最大空间 |
Os.memory.total | 最大内存 |
Stat命令
stat:输出服务器的详细信息与srvr相似,但是多了每个连接的会话信息
shell终端输入:echo stat| nc localhost 2181
说明:
Zookeeper version 版本
Latency min/avg/max 延时
Received 收包
Sent 发包
Connections 连接数
Outstanding 堆积数
Zxid 最大事物id
Mode 服务器角色
Node count 节点数
SRVR:和stat功能一致,但不会输出客户端连接情况
MNTR命令
mntr:列出服务器的健康状态,比stat更为详尽的服务器信息,截取部分信息如下:
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 状态
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 最大文件描述符数量
ruok命令
ruok:测试服务是否处于正确运行状态
shell终端输入:echo ruok| nc localhost 2181
dump命令
dump:列出未经处理的会话和临时节点
shell终端输入:echo dump| nc localhost 2181
wchs
echo wchs|nc localhost 2181,输出当前服务器管理的Watcher信息
wchp
echo wchp|nc localhost 2181,与wchs类似,但以节点路径为单位对Watcher信息进行归组;
五、实战应用
在实际应用中,运维人员可以通过定期执行这些四字命令来监控ZooKeeper集群的状态和性能。例如,可以使用mntr
命令定期获取集群的健康状态信息,并使用stat
和srvr
命令来评估集群的性能。同时,在出现故障时,可以使用cons
、envi
和dump
等命令来排查问题。
总之,ZooKeeper的四字命令是运维人员监控和调优ZooKeeper集群的重要工具。通过熟练掌握这些命令,运维人员可以更好地了解ZooKeeper的运行状态和性能,及时发现并解决潜在问题。