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 个客户端详情。