以客户端的身份连接Zookeeper,继而操作节点,实现功能
使用客户端连接Zookeeper
首先使用客户端脚本连接服务端,进入Zookeeper的bin目录后,执行:
1 | sh zkCli.sh |
zkCli不带server参数时表示连接本地服务,完整的命令是:
1 | sh zkCli.sh -server [ip:port] |
成功连接服务后,结果如下图:

注意:zookeeper包中有JAR文件才支持直接使用客户端脚本,否则会报Error: Could not find or load main class org.apache.zookeeper.ZooKeeperMain错误,原因就是缺少JAR包。
缺少JAR包
创建节点
1 | create [-s] [-e] path data acl |
其中,-s 表示创建的是顺序节点,-e 表示创建的是临时节点。两个都不添加时表示创建的是持久节点。
acl则表示节点的权限控制(Access Control List),这里不做详细介绍,不写表示不做权限控制。

执行完上面的命令后,表示成功创建了一个/name节点,节点携带的数据是“czk”。
读取节点
ls命令
可以列出Zookeeper指定节点下的第一级的所有子节点,也就是看不到孙节点。
1 | ls path [watch] |
其中,path 表示具体的节点路径。

可以看到刚才创建的/name节点,另外还有默认的保留节点/zookeeper。
get命令
可以获取指定节点的数据内容和属性信息。
1 | get path [watch] |

可以看到第一行是/name节点的数据,还有节点的事务ID,节点的创建时间、更新时间等属性信息。
更新节点
set命令可以更新指定节点的数据内容。
1 | set path data [version] |
其中,data 就是要更新的新数据内容。version则用于指定本次更新是基于哪个数据版本进行的。(节点是有版本的)

执行完以上命令后,再用get命令查看数据,发现数据更新了。
并且dataVersion从0变成了1。
删除节点
delete命令可以删除指定节点。
1 | delete path [version] |

执行以上命令,发现删除后 / 节点下只剩默认节点 /zookeeper 了。
但是如果待删除的节点下有子节点,结果就不同了。

如上所示,/name节点下有一个/firstname子节点,当想删除/name节点时,Zookeeper提示“Node not empty: /name”,也就是无法删除包含子节点的节点。