Zookeeper 四字命令

以下是 ZooKeeper 四字命令(Four Letter Words)完整手册,从 命令分类 → 详细解释 → 使用示例 → 监控集成 → 安全控制 → 常见问题全中文 + 实际输出 + 类比,助你 快速诊断集群健康

四字命令 = echo <4个字母> | nc host 2181


一、四字命令概览(官方支持 15+ 条)

命令功能级别
ruok是否存活基础
stat节点状态基础
mntr监控指标(Prometheus)高级
conf运行时配置高级
dump会话 + 临时节点高级
cons连接详情高级
crst重置连接统计高级
srst重置服务器统计高级
wchs / wchc / wchzWatcher 统计高级
dirs数据目录大小高级
envs环境变量高级
isro是否只读高级
lggr日志级别高级

二、核心命令详解(带真实输出)

1. ruok —— “你还好吗?”

echo ruok | nc zk1 2181

输出

imok

类比:心跳检查,返回 imok = 存活


2. stat —— 节点角色 + 连接数

echo stat | nc zk1 2181

输出

Zookeeper version: 3.8.4
Clients:
 192.168.1.100:58392[1](queued=0,recved=125,sent=125)
 192.168.1.101:58401[1](queued=0,recved=89,sent=89)

Latency min/avg/max: 0/0/123
Received: 214
Sent: 214
Connections: 2
Outstanding: 0
Zxid: 0x10000005a
Mode: leader
Node count: 125

类比:体检报告


3. mntr —— 监控指标(Prometheus 首选)

echo mntr | nc zk1 2181

输出

zk_version    3.8.4
zk_avg_latency    0
zk_max_latency    123
zk_min_latency    0
zk_packets_received    214
zk_packets_sent    214
zk_num_alive_connections    2
zk_outstanding_requests    0
zk_server_state    leader
zk_znode_count    125
zk_watch_count    12
zk_ephemerals_count    45
zk_approximate_data_size    8923
zk_open_file_descriptor_count    38
zk_max_file_descriptor_count    1048576
zk_followers    2
zk_synced_followers    2
zk_pending_syncs    0

Prometheus 直接采集zookeeper_mntr_*


4. conf —— 运行时配置

echo conf | nc zk1 2181

输出

clientPort=2181
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
tickTime=2000
maxClientCnxns=200
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1

类比:配置文件快照


5. dump —— 会话 + 临时节点(诊断利器)

echo dump | nc zk1 2181

输出

SessionTracker dump:
Session 0x1001 expires at 1735680000
    /online/client1
    /locks/order-0001
Session 0x1002 expires at 1735681000
    /online/client2

用途:排查临时节点泄露


6. cons —— 连接详情

echo cons | nc zk1 2181

输出

/192.168.1.100:58392[1](queued=0,recved=125,sent=125,sid=0x1001,lop=PING,est=1735678000,to=30000,lcxid=0x12,lzxid=0x10000005a,lresp=1735678100,llat=0,minlat=0,avglat=0,maxlat=123)

sid = sessionId,lop = 最后操作


7. wchs / wchc / wchz —— Watcher 统计

# 总 Watcher 数
echo wchs | nc zk1 2181
# 12 connections watching 15 paths, total watches: 45

# 按连接分组
echo wchc | nc zk1 2181
# 0x1001
#   /config/db
#   /app/servers

# 按路径分组
echo wchz | nc zk1 2181
# /config/db
#   0x1001
#   0x1002

用途:排查 Watcher 内存泄露


8. srst / crst —— 重置统计

echo srst | nc zk1 2181  # 重置服务器统计
echo crst | nc zk1 2181  # 重置连接统计

三、批量查询脚本(生产必备)

zk_check.sh(一键巡检)

#!/bin/bash
HOSTS="zk1:2181 zk2:2181 zk3:2181"

for host in $HOSTS; do
    echo "=== $host ==="
    echo "ruok: $(echo ruok | nc $host 2>/dev/null || echo 'DEAD')"
    echo "stat: $(echo stat | nc $host | grep Mode)"
    echo "mntr: zk_znode_count=$(echo mntr | nc $host | grep zk_znode_count | awk '{print $2}')"
    echo
done

运行:

chmod +x zk_check.sh
./zk_check.sh

四、Prometheus 监控集成

zookeeper_exporter 配置

# prometheus.yml
scrape_configs:
  - job_name: 'zookeeper'
    static_configs:
      - targets: ['zk1:2181', 'zk2:2181', 'zk3:2181']
    metrics_path: /metrics
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance

采集 mntr 指标

# 安装 zookeeper-exporter
docker run -d --name zk-exporter \
  -p 9141:9141 \
  quay.io/bloomberg/zookeeper-exporter \
  --zk-servers=zk1:2181,zk2:2181,zk3:2181

访问:http://zk1:9141/metrics


五、安全控制(默认全开!)

问题:四字命令默认可被任何人执行

echo dump | nc zk1 2181  # 能看到所有 session!

解决方案

1. 关闭四字命令(推荐)

# zoo.cfg
4lw.commands.whitelist=*

* = 允许所有(默认)
ruok,stat = 只允许这两个

4lw.commands.whitelist=ruok,stat,mntr

2. 防火墙限制

# 只允许监控机器访问
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.100" port port=2181 protocol=tcp accept' --permanent

3. 使用 HTTPS 代理

# nginx 代理 + 认证
location /zk {
    proxy_pass http://localhost:2181;
    auth_basic "ZooKeeper";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

六、命令速查卡片

命令输出用途
ruokimok存活检查
stat角色 + 连接状态巡检
mntr监控指标Prometheus
conf配置核对参数
dumpsession + ephemeral临时节点排查
cons连接详情客户端诊断
wch*Watcher内存泄露
srst重置统计归零

七、常见问题

问题原因解决
Connection refused2181 端口不通防火墙、ZK 未启动
Command not found命令被禁用检查 4lw.commands.whitelist
imokstat 超时网络分区检查集群连通性
mntr 无输出版本 < 3.5升级 ZooKeeper

八、生产建议

建议操作
关闭危险命令4lw.commands.whitelist=ruok,stat,mntr
监控采集 mntrPrometheus + Grafana
定期 dump 排查脚本定时执行
限制访问防火墙 + 代理

九、Grafana 仪表盘(JSON)

{
  "title": "ZooKeeper 集群监控",
  "panels": [
    {
      "title": "节点状态",
      "type": "stat",
      "targets": [
        { "expr": "zk_server_state{instance=~'$instance'} == 1 ? 1 : 0" }
      ]
    },
    {
      "title": "ZNode 数量",
      "targets": [
        { "expr": "zk_znode_count{instance=~'$instance'}" }
      ]
    }
  ]
}

总结:四字命令记忆口诀

“ruok 问好,stat 看身,mntr 体检,dump 查病”


动手练习

  1. [x] 执行 ruokstatmntr
  2. [x] 写脚本批量巡检 3 节点
  3. [x] 配置 4lw.commands.whitelist
  4. [ ] 接入 Prometheus + Grafana

需要我提供:

  • 完整监控脚本(Python)
  • Grafana 仪表盘 JSON
  • 四字命令安全加固方案
  • Zookeeper Exporter 部署

请继续提问!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注