乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • ZooKeeper 学习路径
  • 第1章 分布式协调与ZooKeeper概述

    • ZooKeeper 概述
  • 第2章 单机与集群搭建

    • 配置参数详解
    • 集群搭建
  • 第3章 数据模型与ZNode

    • ZNode 详解
    • 节点类型对比
    • 顺序节点
    • ACL 权限控制
  • 第4章 会话与Watcher机制

    • 会话机制
    • Watcher 机制
  • 第5章 ZAB协议与一致性保证

    • ZAB 协议
    • 一致性保证
    • 数据同步
  • 第6章 Leader选举

    • Leader 选举
  • 第7章 典型应用:分布式锁

    • 分布式锁
  • 第8章 典型应用:配置中心与命名服务

    • 配置中心
    • 命名服务
  • 第9章 客户端编程基础(Java原生API)

    • Java 原生 API 编程
  • 第10章 运维与监控

    • 四字命令
    • 监控体系
  • 第11章 面试考点与设计思想

    • 设计思想
    • 面试考点汇编

本章定位:四字命令(Four Letter Words)是 ZooKeeper 最常用的运维工具,通过简单的 nc/telnet 即可获取集群运行状态。

定义与作用

四字命令是 ZooKeeper 服务端内置的一系列简短管理命令,通过向服务端 2181 端口发送 4 个字母的命令字符串,返回对应的运行状态信息。它们是运维 ZooKeeper 集群的首选工具。

ZooKeeper 3.5.0+ 中四字命令默认关闭,需要显式在 zoo.cfg 中配置:

4lw.commands.whitelist=*

核心原理

四字命令分类

最常用的四个命令:ruok(健康检查)、stat(性能统计)、srvr(详细信息)、cons(客户端连接)。

完整示例

示例一:基础健康检查

场景说明:快速检查 ZooKeeper 服务是否存活。

echo ruok | nc 127.0.0.1 2181
# 输出:imok
# 如果服务不可用
echo ruok | nc 127.0.0.1 2181
# 无输出或连接拒绝

操作前后对比:

命令正常输出异常输出含义
ruokimok无输出/连接拒绝服务健康检查
stat详细统计信息—运行时状态
srvr服务器信息—服务端配置

示例二:stat 和 srvr 运行时统计

场景说明:获取 ZooKeeper 服务的详细运行指标。

echo stat | nc 127.0.0.1 2181

输出:

Zookeeper version: 3.7.0
Clients:
 /127.0.0.1:54321[1](queued=0,recved=15,sent=16)
 /127.0.0.1:54322[0](queued=0,recved=5,sent=5)

Latency min/avg/max: 0/2/15
Received: 120
Sent: 121
Connections: 2
Outstanding: 0
Zxid: 0x10000000a
Mode: standalone
Node count: 25

关键指标解读:

指标含义关注点
Latency min/avg/max请求延迟(ms)max 不应超过 sessionTimeout
Received / Sent收发的包总数持续增长正常
Connections当前连接数应与预期客户端数一致
Outstanding等待中的请求数持续 > 0 说明处理不过来
Zxid最新事务 ID通过增长速度判断负载
Node countZNode 数量Ephemeral 过多说明有泄漏
Mode角色standalone/leader/follower
echo srvr | nc 127.0.0.1 2181

输出:

Zookeeper version: 3.7.0
Latency min/avg/max: 0/2/15
Received: 120
Sent: 121
Connections: 2
Outstanding: 0
Zxid: 0x10000000a
Mode: standalone
Node count: 25

操作前后对比:

场景stat 关键变化诊断
正常Connections 稳定集群健康
客户端泄漏Connections 持续增长检查客户端 close()
高负载Outstanding > 0考虑扩展
延迟增大Latency max 增大检查磁盘 IO 和网络

示例三:客户端连接列表

场景说明:排查哪些客户端连接到了 ZooKeeper。

echo cons | nc 127.0.0.1 2181

输出:

 /127.0.0.1:54321[1](queued=0,recved=120,sent=119,
     sid=0x10000000001,lop=PING,est=1623500000000,
     to=30000,lcxid=0x5,lzxid=0x10000000a,lresp=1623501000000,
     lreq=1623501000000,llat=2,minlat=0,avglat=2,maxlat=15)

字段解析:

字段含义
sidSession ID
lop最后一个操作(PING/GETD/SETD 等)
est连接建立时间(时间戳)
toSession Timeout(ms)
lreq / lresp最后请求/响应时间
llat / minlat / avglat / maxlat延迟统计(ms)

操作前后对比:

诊断场景cons 输出线索
空闲连接lop=PING 且长时间未更新
连接泄漏大量 sid 且 est 很早
慢客户端avglat 明显高于其他客户端

示例四:mntr 监控指标

场景说明:获取 Prometheus/Grafana 友好的键值对监控数据。

echo mntr | nc 127.0.0.1 2181

输出:

zk_version      3.7.0
zk_avg_latency  2
zk_max_latency  15
zk_min_latency  0
zk_packets_received     120
zk_packets_sent 121
zk_num_alive_connections        2
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count  25
zk_watch_count  3
zk_ephemerals_count     2
zk_approximate_data_size        1024
zk_open_file_descriptor_count   35
zk_max_file_descriptor_count    1024

操作前后对比:

指标含义告警阈值建议
zk_avg_latency平均延迟> 50ms 关注
zk_outstanding_requests等待请求数> 0 持续关注
zk_znode_countZNode 总数持续增长检查泄漏
zk_watch_countWatcher 数过大检查泄漏
zk_open_file_descriptor_count文件描述符> 80% 需扩展

易错场景与面试考点

易错场景

1. 四字命令默认被禁用

echo stat | nc 127.0.0.1 2181
# stat is not executed because it is not in the whitelist.

ZooKeeper 3.5.0+ 必须在 zoo.cfg 中配置 4lw.commands.whitelist=* 或指定具体命令。

2. 将 ruok 的输出视为服务实际可用

imok 只表示服务进程还在,但可能处于选举中或 Follower 状态。应结合 stat 或 mntr 检查 Mode。

3. 在选举期间执行四字命令

选举期间命令可能超时或返回过时信息。mntr 中的 zk_server_state 在选举期间为 looking。

面试高频题

Q:四字命令中哪些是只读的,哪些有副作用?

A:

  • 只读:ruok、stat、srvr、cons、dump、envi、mntr、wchs、wchc、wchp
  • 副作用:srst(重置统计)、crst(重置连接统计)、kill(关闭服务)

执行有副作用的命令需谨慎,尤其是 kill。

Q:如何将四字命令集成到监控系统?

A:使用 mntr 命令获取键值对输出,通过脚本定期采集并推送到 Prometheus(使用 Pushgateway)或直接配置 ZK Exporter。不建议用 stat 等人类可读格式,解析成本高且不稳定。

Q:stat 中的 Outstanding 持续很高怎么办?

A:说明 Leader 处理能力跟不上请求速率。排查:

  1. 磁盘 IO 是否瓶颈(事务日志 fsync 延迟)
  2. 网络带宽是否充足
  3. 集群是否需要增加 Follower 分担读压力
  4. 客户端是否需要限流

小结

要点说明
默认关闭3.5.0+ 需配置 whitelist
核心命令ruok / stat / srvr / cons / mntr
mntr键值对格式,适合监控采集
ruok 局限只检查进程存活,不检查可用性
读写分类只读命令安全,srst/kill 有副作用

四字命令是运维的快速入口。下一节深入 JMX 和日志监控,构建完整的 ZooKeeper 可观测性体系。

下一页
监控体系