ZooKeeper 命令详解:从基础操作到高级管理
ZooKeeper 提供了丰富的命令接口,用于节点管理、集群监控和权限控制等操作。无论是客户端交互还是服务端监控,掌握这些命令是使用 ZooKeeper 的基础。以下基于 3.6.1 版本,系统梳理常用命令的用法与场景。
四字命令:服务端状态快速查询
四字命令是 ZooKeeper 特有的轻量监控命令,通过 echo 命令 | nc 主机 端口
格式执行,需先在 zoo.cfg
中开启白名单:
1 | * # 允许所有四字命令(生产环境建议按需开放) = |
服务状态类命令
命令 | 功能描述 | 示例 | |
---|---|---|---|
ruok |
检查节点是否存活(返回 imok 表示正常) |
`echo ruok | nc localhost 2181` |
conf |
输出节点的配置信息(如 dataDir 、clientPort ) |
`echo conf | nc localhost 2181` |
envi |
输出节点的环境变量(如 JVM 参数、操作系统信息) | `echo envi | nc localhost 2181` |
srvr |
输出节点的详细状态(角色、版本、连接数等) | `echo srvr | nc localhost 2181` |
stat |
输出节点状态及客户端连接信息(比 srvr 多连接统计) |
`echo stat | nc localhost 2181` |
客户端连接类命令
命令 | 功能描述 | 示例 | |
---|---|---|---|
cons |
输出所有客户端连接的详细信息(会话 ID、IP、最后操作时间等) | `echo cons | nc localhost 2181` |
dump |
输出未处理的会话节点(临时节点)列表 | `echo dump | nc localhost 2181` |
监听与监控类命令
命令 | 功能描述 | 示例 | |
---|---|---|---|
wchs |
输出节点的监听统计(总监听数、按节点分组的监听数) | `echo wchs | nc localhost 2181` |
wchc |
按客户端连接分组,输出每个连接的监听列表 | `echo wchc | nc localhost 2181` |
wchp |
按节点路径分组,输出每个节点的监听列表 | `echo wchp | nc localhost 2181` |
mntr |
输出更详细的监控指标(适合 Prometheus 等工具采集,如 zk_num_alive_connections ) |
`echo mntr | nc localhost 2181` |
客户端交互命令:节点操作核心
通过 zkCli.sh
连接 ZooKeeper 服务端后(./bin/zkCli.sh -server localhost:2181
),可执行节点的增删改查等操作。
节点创建(create
)
语法:create [-s] [-e] [-c] [-t ttl] 路径 [数据] [权限]
- 选项:
-s
:创建有序节点(名称后追加 10 位序号);-e
:创建临时节点(会话失效后删除);-c
:创建容器节点(子节点为空时自动删除,3.5+ 支持);-t ttl
:设置节点过期时间(需配合-c
,3.5+ 支持)。
示例:
1 | 创建持久无序节点 |
节点查询
(1)列出子节点(ls
)
语法:ls [-s] [-w] [-R] 路径
- 选项:
-s
:同时显示节点元数据(stat
信息);-w
:监听子节点变化(子节点增删时触发通知);-R
:递归列出所有子节点。
示例:
1 | 列出 /app 的子节点 |
(2)获取节点数据(get
)
语法:get [-s] [-w] 路径
- 选项:
-s
:同时显示节点元数据(cZxid
、dataVersion
等);-w
:监听节点数据变化(数据修改或节点删除时触发通知)。
示例:
1 | 获取 /app 的数据 |
节点更新(set
)
语法:set [-s] [-v 版本号] 路径 新数据
- 选项:
-s
:显示更新后的元数据;-v 版本号
:基于乐观锁更新(仅当节点当前dataVersion
与指定版本一致时更新,避免覆盖并发修改)。
示例:
1 | 直接更新数据 |
节点删除
(1)删除单个节点(delete
)
语法:delete [-v 版本号] 路径
- 注意:节点必须无子节点,否则删除失败;
-v
选项用于版本校验。
示例:
1 | 删除 /temp 节点(无子节点) |
(2)递归删除节点(deleteall
)
语法:deleteall 路径 [-b 批量大小]
- 功能:删除节点及其所有子节点(3.5+ 支持);
-b
:批量删除子节点的批次大小(默认 1000)。
示例:
1 | 递归删除 /app 及其所有子节点 |
监听管理(addWatch
/removewatches
)
ZooKeeper 的监听默认是 “一次性” 的,addWatch
可注册持久化监听(3.6+ 支持):
addWatch [-m 模式] 路径
:- 模式:
PERSISTENT
(监听节点自身变化,触发后持续有效)、PERSISTENT_RECURSIVE
(监听节点及所有子节点变化,默认模式)。
- 模式:
removewatches 路径 [-c|-d|-a] [-l]
:- 选项:
-c
(删除子节点监听)、-d
(删除节点数据监听)、-a
(删除所有监听);-l
表示本地删除(不通知服务端)。
- 选项:
示例:
1 | 注册持久化递归监听 /app 及其子节点 |
权限控制命令(ACL)
ZooKeeper 通过 ACL(Access Control List)控制节点的访问权限,常用命令如下:
权限类型(Scheme)
world
:默认权限,所有用户可访问(world:anyone
);auth
:基于用户名密码的认证;digest
:与auth
类似,但密码需加密(username:password
的 SHA1 哈希);ip
:基于客户端 IP 限制访问;super
:超级用户(拥有所有权限)。
权限操作命令
命令 | 功能描述 | 示例 |
---|---|---|
getAcl |
获取节点的 ACL 权限 | getAcl /app |
setAcl |
设置节点的 ACL 权限(-R 表示递归应用到子节点) |
setAcl /app world:anyone:cdrwa |
addauth |
添加认证用户(用于 auth 或 digest 权限) |
addauth digest user:123456 |
权限位含义(cdrwa
):
c
:创建子节点;d
:删除节点;r
:读取数据;w
:修改数据;a
:管理权限。
集群管理命令
动态重配置(reconfig
)
在不重启集群的情况下调整节点列表(3.5+ 支持),语法:
1 | reconfig [-s] [-v 版本号] [-add 节点] [-remove 节点ID] |
示例:
1 | 新增节点(ID=4,地址=zoo4:2888:3888) |
其他实用命令
命令 | 功能描述 | 示例 |
---|---|---|
connect |
连接到其他 ZooKeeper 节点 | connect zoo2:2181 |
close |
关闭当前连接 | close |
history |
查看命令历史记录 | history |
quit |
退出客户端 | quit |
v1.3.10