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 /nodeset设置节点数据set /node "new data"get获取节点数据get /nodels列出子节点ls /stat查看节点状态stat /nodesetAcl设置访问控制setAcl /node world:anyone:crwagetAcl获取访问控制getAcl /nodehistory查看命令历史historyredo重做命令redo 1 (执行历史记录中第1条命令)connect连接服务器connect 127.0.0.1:2181close关闭连接closequit退出客户端quit六、注意事项
- 节点路径:所有路径必须以/开头,且不能以/结尾(除根路径外)
- 临时节点:不能有子节点,创建它们的客户端会话结束时自动删除
- 顺序节点:实际路径名会附加一个10位数字序号(如/node0000000001)
- 版本控制:每次修改数据版本号+1,可用于乐观锁控制
- Watch特性:Watch是一次性的,触发后需要重新设置
- ACL权限:生产环境应设置适当的访问控制
通过掌握这些原生客户端命令,您可以有效地管理和监控Zookeeper中的数据,为分布式系统提供可靠的协调服务基础。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |