Zookeeper 客户端基础命令使用

以下是 ZooKeeper 客户端基础命令(zkCli.sh)完整使用手册,从 连接 → 核心命令 → 高级操作 → 批量脚本 → 常见问题全中文 + 示例 + 类比,让你 30 分钟上手 zkCli


一、启动客户端(zkCli.sh)

# 单机
bin/zkCli.sh -server 127.0.0.1:2181

# 集群(推荐)
bin/zkCli.sh -server zk1:2181,zk2:2181,zk3:2181

# 指定超时(默认 30s)
bin/zkCli.sh -server zk1:2181 -timeout 10000

成功进入后显示:

[zk: zk1:2181(CONNECTED) 0]

二、核心命令速查表

命令功能示例
ls /path列出子节点ls /
create创建节点create /app "data"
get获取数据get /app
set修改数据set /app "new"
delete删除节点(无子节点)delete /app
rmr / deleteall递归删除rmr /app
stat查看状态get -s /app
setAcl / getAcl权限管理setAcl /app world:anyone:r

三、详细命令使用

1. 连接与退出

# 连接
bin/zkCli.sh -server zk1:2181

# 退出
quit
# 或 Ctrl+C

2. 节点操作(CRUD)

创建节点

# 持久节点
create /config "db=localhost"

# 带数据的持久节点
create /app/name "service-a"

# 临时节点(会话断开自动删)
create -e /online/client1 "192.168.1.10"

# 顺序节点(自动加序号)
create -s /tasks/task "" 
# → 创建 /tasks/task00000001

# 临时 + 顺序(分布式锁经典)
create -e -s /locks/lock "" 
# → /locks/lock00000001

查看节点

# 列出子节点
ls /
# [zookeeper, config, app]

ls /app
# [name]

# 获取数据
get /config
# db=localhost

# 获取数据 + 状态(推荐)
get -s /config
# db=localhost
# cZxid = 0x100000003
# ctime = Wed Dec 31 18:00:00 CST 2025
# dataVersion = 0
# numChildren = 0

修改数据

set /config "db=192.168.1.100"
# 修改成功

# 指定版本(乐观锁)
set /config "db=backup" 0
# 如果 version=0 已被修改,会报错

删除节点

# 删除叶子节点
delete /app/name

# 递归删除(推荐)
rmr /app
# 或
deleteall /app

3. 节点类型与路径

命令效果
create /a/b/c "data"自动创建父节点(如果存在)
create /a/b/c "data"不存在 /a/b → 报错
create -e /tmp "data"临时节点
create -s /id " "生成 /id00000001

建议:用 creatingParentsIfNeeded()(Java)或先手动建父节点


4. Watcher 监听(一次性)

# 监听节点数据变化
get /config true
# 修改节点 → 触发
# WatchedEvent state:SyncConnected type:NodeDataChanged path:/config

# 监听子节点变化
ls /app true
# 创建/删除子节点 → 触发
# WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/app

注意:Watcher 只触发一次,需重新注册


5. ACL 权限控制

# 查看权限
getAcl /config
# 'world,'anyone
# :cdrwa

# 设置只读
setAcl /config world:anyone:r

# 设置认证用户(digest)
addauth digest user:password
setAcl /config digest:user:hashed_password:cdrwa

四、高级命令实战

1. 批量创建节点(脚本)

# create_nodes.sh
bin/zkCli.sh -server zk1:2181 <<EOF
create /app ""
create /app/config ""
create /app/servers ""
create /app/locks ""
quit
EOF

2. 导出/导入节点结构

# 导出所有节点(递归)
bin/zkCli.sh -server zk1:2181 <<EOF | grep "^/" > nodes.txt
ls -R /
quit
EOF

# 导入(需配合脚本)

3. 四字命令(服务端监控)

# 检查存活
echo ruok | nc zk1 2181
# imok

# 查看状态
echo stat | nc zk1 2181

# 查看所有会话
echo dump | nc zk1 2181

# 监控指标
echo mntr | nc zk1 2181

五、命令速记口诀

“创查改删,顺序临时,监听一次,权限加固”

动作命令
create [-e] [-s] /path "data"
ls /path get [-s] /path
set /path "new"
delete /path rmr /path
get /path true
setAcl /path world:anyone:r

六、常见问题与解决方案

问题原因解决
Node exists节点已存在-s 顺序节点
ConnectionLoss网络中断重连
KeeperErrorCode = NoNode路径不存在先创建父节点
rmr 报错旧版本不支持deleteall

七、zkCli 交互式示例

$ bin/zkCli.sh -server zk1:2181
[zk: zk1:2181(CONNECTED) 0] create /myapp ""
Created /myapp

[zk: ...] create /myapp/config "db=localhost"
Created /myapp/config

[zk: ...] ls /myapp

[config]

[zk: …] get -s /myapp/config db=localhost cZxid = 0x200000003 dataVersion = 0 numChildren = 0 [zk: …] set /myapp/config “db=192.168.1.100” [zk: …] create -e -s /myapp/servers/server “” Created /myapp/servers/server00000001 [zk: …] ls /myapp/servers

[server00000001]

[zk: …] quit


八、最佳实践建议

场景推荐命令
配置中心create /config/service-a ""
服务注册create -e /registry/s1 "ip:port"
分布式锁create -e -s /locks/lock ""
任务队列create -s /tasks/task ""

九、替代工具(更强大)

工具优势
ZooNavigatorWeb UI,可视化
CuratorJava 客户端
zk-shellPython 交互式
Zookeeper CLI增强版命令行

十、总结:zkCli 核心命令卡片

# 连接
bin/zkCli.sh -server host:2181

# 创建
create /path "data"
create -e /tmp "tmp"
create -s /id ""
create -e -s /lock ""

# 查看
ls /path
get /path
get -s /path    # 带状态
ls /path true   # 监听子节点

# 修改
set /path "new data"

# 删除
delete /leaf
rmr /dir        # 递归删
deleteall /dir

# 权限
getAcl /path
setAcl /path world:anyone:r

# 退出
quit

下一步建议

  1. [x] 运行 zkCli.sh 完成 CRUD 操作
  2. [x] 创建 临时顺序节点 模拟分布式锁
  3. [x] 用 get /path true 监听变化
  4. [ ] 写 Shell 脚本批量初始化节点

需要我提供:

  • zkCli 批量初始化脚本
  • ZooNavigator 部署
  • Java 替代 zkCli 操作
  • 权限认证完整示例

请继续问!

类似文章

发表回复

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