以客户端的身份连接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包
缺少JAR包

可以选择zookeeper-3.4.14版本使用

创建节点

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”,也就是无法删除包含子节点的节点

参考文献

[1] 《从PAXOS到Zookeeper分布式一致性原理与实践》