0%

zookeeper命令

ZooKeeper 命令详解:从基础操作到高级管理

ZooKeeper 提供了丰富的命令接口,用于节点管理、集群监控和权限控制等操作。无论是客户端交互还是服务端监控,掌握这些命令是使用 ZooKeeper 的基础。以下基于 3.6.1 版本,系统梳理常用命令的用法与场景。

四字命令:服务端状态快速查询

四字命令是 ZooKeeper 特有的轻量监控命令,通过 echo 命令 | nc 主机 端口 格式执行,需先在 zoo.cfg 中开启白名单:

1
4lw.commands.whitelist=*  # 允许所有四字命令(生产环境建议按需开放)

服务状态类命令

命令 功能描述 示例
ruok 检查节点是否存活(返回 imok 表示正常) `echo ruok nc localhost 2181`
conf 输出节点的配置信息(如 dataDirclientPort `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
2
3
4
5
6
7
8
9
10
11
# 创建持久无序节点
create /app "myapp"

# 创建临时节点(会话关闭后自动删除)
create -e /temp "temp data"

# 创建持久有序节点(名称会变为 /task/10000000001)
create -s /task "task1"

# 创建临时有序节点
create -es /lock "lock"

节点查询

(1)列出子节点(ls

语法:ls [-s] [-w] [-R] 路径

  • 选项:
    • -s:同时显示节点元数据(stat 信息);
    • -w:监听子节点变化(子节点增删时触发通知);
    • -R:递归列出所有子节点。

示例:

1
2
3
4
5
6
7
8
# 列出 /app 的子节点
ls /app

# 列出 /app 的子节点并监听变化
ls -w /app

# 递归列出 /app 下所有节点
ls -R /app
(2)获取节点数据(get

语法:get [-s] [-w] 路径

  • 选项:
    • -s:同时显示节点元数据(cZxiddataVersion 等);
    • -w:监听节点数据变化(数据修改或节点删除时触发通知)。

示例:

1
2
3
4
5
6
7
8
# 获取 /app 的数据
get /app

# 获取 /app 的数据及元数据
get -s /app

# 监听 /app 的数据变化
get -w /app

节点更新(set

语法:set [-s] [-v 版本号] 路径 新数据

  • 选项:
    • -s:显示更新后的元数据;
    • -v 版本号:基于乐观锁更新(仅当节点当前 dataVersion 与指定版本一致时更新,避免覆盖并发修改)。

示例:

1
2
3
4
5
# 直接更新数据
set /app "new data"

# 基于版本号更新(仅当 dataVersion=1 时成功)
set -v 1 /app "versioned data"

节点删除

(1)删除单个节点(delete

语法:delete [-v 版本号] 路径

  • 注意:节点必须无子节点,否则删除失败;-v 选项用于版本校验。

示例:

1
2
3
4
5
# 删除 /temp 节点(无子节点)
delete /temp

# 基于版本号删除(仅当 dataVersion=2 时成功)
delete -v 2 /app
(2)递归删除节点(deleteall

语法:deleteall 路径 [-b 批量大小]

  • 功能:删除节点及其所有子节点(3.5+ 支持);
  • -b:批量删除子节点的批次大小(默认 1000)。

示例:

1
2
# 递归删除 /app 及其所有子节点
deleteall /app

监听管理(addWatch/removewatches

ZooKeeper 的监听默认是 “一次性” 的,addWatch 可注册持久化监听(3.6+ 支持):

  • addWatch [-m 模式] 路径
    • 模式:PERSISTENT(监听节点自身变化,触发后持续有效)、PERSISTENT_RECURSIVE(监听节点及所有子节点变化,默认模式)。
  • removewatches 路径 [-c|-d|-a] [-l]
    • 选项:-c(删除子节点监听)、-d(删除节点数据监听)、-a(删除所有监听);-l 表示本地删除(不通知服务端)。

示例:

1
2
3
4
5
# 注册持久化递归监听 /app 及其子节点
addWatch /app

# 删除 /app 的所有监听
removewatches /app -a

权限控制命令(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 添加认证用户(用于 authdigest 权限) addauth digest user:123456

权限位含义(cdrwa):

  • c:创建子节点;d:删除节点;r:读取数据;w:修改数据;a:管理权限。

集群管理命令

动态重配置(reconfig

在不重启集群的情况下调整节点列表(3.5+ 支持),语法:

1
reconfig [-s] [-v 版本号] [-add 节点] [-remove 节点ID]

示例:

1
2
3
4
5
# 新增节点(ID=4,地址=zoo4:2888:3888)
reconfig -add 4=zoo4:2888:3888

# 移除节点(ID=4)
reconfig -remove 4

其他实用命令

命令 功能描述 示例
connect 连接到其他 ZooKeeper 节点 connect zoo2:2181
close 关闭当前连接 close
history 查看命令历史记录 history
quit 退出客户端 quit

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10