【Zookeeper命令】原生客户端命令详解

Zookeeper原生客户端命令详解

Zookeeper提供了一套丰富的命令行工具zkCli.sh,用于直接与Zookeeper服务交互。以下是完整的原生客户端命令操作指南,包含详细注释和示例解释。

一、连接与基本操作

1.1 连接Zookeeper服务

# 基本连接方式
./zkCli.sh -server <host:port>

# 示例:连接本地Zookeeper
./zkCli.sh -server 127.0.0.1:2181

# 连接时指定超时时间(毫秒)
./zkCli.sh -server 127.0.0.1:2181 -timeout 5000

1.2 帮助命令

# 查看所有可用命令
help

# 查看特定命令帮助
help <command>
# 示例:
help create

二、节点操作命令

2.1 创建节点

# 基本语法
create [-s] [-e] [-c] [-t ttl] path [data] [acl]

# 创建持久节点
create /test "test data"
# 结果:Created /test

# 创建临时节点(会话结束自动删除)
create -e /temp-node "temp data"

# 创建顺序节点(自动追加序号)
create -s /seq-node "seq data"
# 结果:Created /seq-node0000000001

# 创建带TTL的节点(单位毫秒)
create -t 5000 /ttl-node "ttl data"

# 递归创建父节点(需要Zookeeper 3.5+)
create /parent/child/node "data" true

2.2 查看节点

# 列出节点
ls [-s] [-w] [-R] path

# 示例:
ls /
# 结果:[zookeeper, test, temp-node]

# 递归列出所有子节点
ls -R /

# 查看节点详细信息
ls -s /
# 结果:
# [zookeeper, test, temp-node]
# cZxid = 0x200000002
# ctime = Wed Jan 01 00:00:00 UTC 2023
# mZxid = 0x200000002
# mtime = Wed Jan 01 00:00:00 UTC 2023
# pZxid = 0x200000002
# cversion = 0
# dataVersion = 0
# aclVersion = 0
# ephemeralOwner = 0x0
# dataLength = 9
# numChildren = 0

2.3 获取节点数据

# 基本语法
get [-s] [-w] path

# 示例:
get /test
# 结果:
# test data
# cZxid = 0x200000002
# ...

# 获取数据并设置watch
get -w /test

# 获取详细信息
get -s /test

2.4 修改节点数据

# 基本语法
set [-s] [-v version] path data

# 示例:
set /test "new data"

# 带版本号修改(乐观锁)
set -v 1 /test "versioned data"

2.5 删除节点

# 基本语法
delete [-v version] path

# 示例:
delete /test

# 带版本号删除
delete -v 1 /test

# 递归删除(3.5+版本)
deleteall path

三、高级操作命令

3.1 Watch监控

# 设置数据变化的watch
get -w /test

# 设置子节点变化的watch
ls -w /parent

# 触发watch后,客户端会收到类似通知:
# WATCHER::
# WatchedEvent state:SyncConnected type:NodeDataChanged path:/test

3.2 ACL权限控制

# 查看ACL
getAcl /test

# 设置ACL
setAcl /test world:anyone:crwda

# 创建带ACL的节点
create /secure-node "data" world:anyone:r

3.3 配额管理

# 设置配额
setquota -n|-b val path

# 示例:限制子节点数量
setquota -n 10 /parent

# 查看配额
listquota /parent

# 删除配额
delquota /parent

3.4 四字命令

通过telnet或nc发送四字命令:

# 服务器状态
echo stat | nc localhost 2181

# 监控摘要
echo mntr | nc localhost 2181

# 客户端连接
echo cons | nc localhost 2181

# 环境变量
echo envi | nc localhost 2181

# 健康检查
echo ruok | nc localhost 2181
# 响应"imok"表示正常

四、实用操作示例

4.1 创建完整目录结构

# 创建多级目录
create /app ""
create /app/config ""
create /app/config/database "mysql://user:pass@host:3306"
create /app/config/cache "redis://host:6379"

# 验证结构
ls -R /app

4.2 实现简单的配置管理

# 存储配置
create /configs/app1/server.port "8080"
create /configs/app1/db.url "jdbc:mysql://localhost:3306/mydb"

# 获取配置
get /configs/app1/server.port
# 结果:8080

# 更新配置
set /configs/app1/server.port "8081"

4.3 监控配置变化

# 终端1:设置watch并等待
get -w /configs/app1/server.port

# 终端2:修改数据
set /configs/app1/server.port "8082"

# 终端1将收到通知:
# WATCHER::
# WatchedEvent state:SyncConnected type:NodeDataChanged path:/configs/app1/server.port

4.4 临时节点实现服务注册

# 服务1注册
create -e /services/service1/node1 "host1:8080"

# 服务2注册
create -e /services/service1/node2 "host2:8080"

# 查看可用服务
ls /services/service1
# 结果:[node1, node2]

# 当服务下线时,对应临时节点会自动删除

五、命令参考表

命令 描述 示例
create 创建节点 create /node "data"
delete 删除节点 delete /node
set 设置节点数据 set /node "new data"
get 获取节点数据 get /node
ls 列出子节点 ls /
stat 查看节点状态 stat /node
setAcl 设置访问控制 setAcl /node world:anyone:crwa
getAcl 获取访问控制 getAcl /node
history 查看命令历史 history
redo 重做命令 redo 1 (执行历史记录中第1条命令)
connect 连接服务器 connect 127.0.0.1:2181
close 关闭连接 close
quit 退出客户端 quit

六、注意事项

  1. 节点路径:所有路径必须以/开头,且不能以/结尾(除根路径外)
  2. 临时节点:不能有子节点,创建它们的客户端会话结束时自动删除
  3. 顺序节点:实际路径名会附加一个10位数字序号(如/node0000000001
  4. 版本控制:每次修改数据版本号+1,可用于乐观锁控制
  5. Watch特性:Watch是一次性的,触发后需要重新设置
  6. ACL权限:生产环境应设置适当的访问控制

通过掌握这些原生客户端命令,您可以有效地管理和监控Zookeeper中的数据,为分布式系统提供可靠的协调服务基础。

posted @ 2025-06-09 16:49  佛祖让我来巡山  阅读(169)  评论(0)    收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网