11.6.1 常用命令行与CLI工具使用

本节面向 ZooKeeper 运维最常用的命令行与 CLI 工具,覆盖安装入口、命令原理草图、常用命令、排错流程与练习,确保巡检与故障定位可直接落地执行。

文章图片

安装与入口准备(以官方二进制包为例):

# 1) 下载与解压
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
tar -zxvf apache-zookeeper-3.9.2-bin.tar.gz
cd apache-zookeeper-3.9.2-bin

# 2) 配置文件
cp conf/zoo_sample.cfg conf/zoo.cfg
cat > conf/zoo.cfg <<'EOF'
tickTime=2000
dataDir=/data/zookeeper
clientPort=2181
# 四字命令白名单(生产必须)
4lw.commands.whitelist=ruok,stat,srvr,mntr,conf,cons,dump,wchs,wchc,wchp
EOF

# 3) 启动
bin/zkServer.sh start
bin/zkServer.sh status

预期效果:status 返回 Mode: standalone/leader/follower

客户端常用操作(zkCli.sh)与命令解释:

# 连接集群
bin/zkCli.sh -server 127.0.0.1:2181

# 基本节点操作
ls /
ls -s /          # -s 显示节点统计信息
create /app "v1" # 创建持久节点
get /app         # 读取数据
set /app "v2"    # 更新数据
delete /app      # 删除节点(需无子节点)

# 临时/顺序节点
create -e /tmp "session-bound"   # 临时节点,断开会话自动删除
create -s /seq "order"           # 顺序节点,自动追加序号

# 监听(watch)
get /app watch   # 读取并注册一次性监听
ls /app watch    # 监听子节点变化

# ACL 管理(示例:digest 认证)
addauth digest user:pass
getAcl /app
setAcl /app auth:user:pass:cdrwa

服务端控制(zkServer.sh):

bin/zkServer.sh start       # 启动
bin/zkServer.sh stop        # 停止
bin/zkServer.sh restart     # 重启
bin/zkServer.sh status      # 查看角色
bin/zkServer.sh start-foreground  # 前台调试

四字命令使用与命令解释(需在白名单中):

# 健康检查(期望输出 imok)
echo ruok | nc 127.0.0.1 2181

# 基本状态
echo stat | nc 127.0.0.1 2181

# 服务器信息、版本、角色
echo srvr | nc 127.0.0.1 2181

# 监控指标(Prometheus 可采集)
echo mntr | nc 127.0.0.1 2181

# 客户端连接详情
echo cons | nc 127.0.0.1 2181

# 会话与临时节点摘要
echo dump | nc 127.0.0.1 2181

# watch 统计与详情
echo wchs | nc 127.0.0.1 2181
echo wchc | nc 127.0.0.1 2181
echo wchp | nc 127.0.0.1 2181

# 读取运行配置
echo conf | nc 127.0.0.1 2181

常见排错流程(含命令与解释):
1) 无法连接/健康异常

# 预期输出 imok,否则检查端口/进程
echo ruok | nc 127.0.0.1 2181

# 查看进程与端口
ps -ef | grep zookeeper
ss -lntp | grep 2181

2) 角色不明/选举异常

bin/zkServer.sh status
echo srvr | nc 127.0.0.1 2181

解释:status/srvr 用于确认 leader/follower/standalone。

3) 连接数暴涨

echo stat | nc 127.0.0.1 2181 | grep Connections
echo cons | nc 127.0.0.1 2181 | head -n 20

解释:stat 查看连接数,cons 定位异常客户端 IP。

4) watch 风暴

echo wchs | nc 127.0.0.1 2181
echo wchc | nc 127.0.0.1 2181 | head -n 50

解释:wchc 显示客户端 watch 详情,定位高频注册来源。

5) 临时节点泄露/会话异常

echo dump | nc 127.0.0.1 2181 | head -n 50

解释:dump 统计会话与临时节点数量,用于发现未释放会话。

命令输出解读示例(以 stat 为例):

Zookeeper version: 3.9.2
Clients:
 /127.0.0.1:51234[1](queued=0,recved=10,sent=10)
Latency min/avg/max: 0/1/18
Received: 120 Sent: 118
Connections: 12
Outstanding: 0
Zxid: 0x1000000a
Mode: standalone
Node count: 256

解读:Latency 反映延迟,Connections 连接数,Mode 角色,Node count 节点总数。

运维安全要点(可执行配置):

# zoo.cfg 中限制四字命令
4lw.commands.whitelist=ruok,stat,srvr,mntr,conf,cons,dump,wchs,wchc,wchp

# 防火墙限制访问 2181
iptables -A INPUT -p tcp --dport 2181 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 2181 -j DROP

练习题(含预期结果):
1) 连接集群并创建顺序节点

bin/zkCli.sh -server 127.0.0.1:2181
create -s /order "o"
ls /order

预期:/order0000000001 形式的顺序节点出现。

2) 验证临时节点随会话消失

# 终端A
bin/zkCli.sh -server 127.0.0.1:2181
create -e /tmpnode "x"

# 终端B
bin/zkCli.sh -server 127.0.0.1:2181
ls /
# 断开终端A后再次 ls /,/tmpnode 消失

3) 四字命令健康检查

echo ruok | nc 127.0.0.1 2181

预期:输出 imok

4) 模拟排查连接暴涨

echo stat | nc 127.0.0.1 2181 | grep Connections
echo cons | nc 127.0.0.1 2181 | head -n 5

预期:看到连接数与前 5 个客户端详情。