一、Zookeeper的基本使用
### --- ZooKeeper命令行操作
~~~ 现在已经搭建起了一个能够正常运行的zookeeper服务了,所以接下来,
~~~ 就是来借助客户端来将zookeeper的数据节点进行操作
~~~ # 首先,进入到zookeeper的bin目录之后通过zkClient进入zookeeper客户端命令行
./zkcli.sh // 连接本地的zookeeper服务器
./zkCli.sh -server ip:port(2181) // 连接指定的服务器
~~~ # 连接成功之后,系统会输出Zookeeper的相关环境及配置信息等信息。
~~~ 输入help之后,屏幕会输出可用的Zookeeper命令,如下图所示
[zk: localhost:2181(CONNECTED) 1] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
二、创建节点
### --- 使用create命令,可以创建一个Zookeeper节点, 如
~~~ 其中,-s或-e分别指定节点特性,顺序或临时节点,若不指定,则创建持久节点
create [-s][-e] path data
### --- 创建顺序节点
~~~ 使用 create -s /zk-test 123 命令创建zk-test顺序节点
~~~ 执行完后,就在根节点下创建了一个叫做/zk-test的节点,该节点内容就是123,
~~~ 同时可以看到创建的zk-test节点后面添加了一串数字以示区别
[zk: localhost:2181(CONNECTED) 2] create -s /zk-test 123
Created /zk-test0000000000
### --- 创建临时节点
~~~ # 使用 create -e /zk-temp 123 命令创建zk-temp临时节
[zk: localhost:2181(CONNECTED) 3] create -e /zk-temp 123
Created /zk-temp
[zk: localhost:2181(CONNECTED) 4] ls /
[zk-test0000000000, zookeeper, zk-temp]
~~~ # 临时节点在客户端会话结束后,就会自动删除,下面使用quit命令退出客户端
[zk: localhost:2181(CONNECTED) 3] quit
Quitting...
~~~ # 再次使用客户端连接服务端,并使用ls / 命令查看根目录下的节点
~~~ 可以看到根目录下已经不存在zk-temp临时节点了
[zk: localhost:2181(CONNECTED) 0] ls /
[zk-test0000000000, zookeeper]
### --- 创建永久节点
~~~ 使用 create /zk-permanent 123 命令创建zk-permanent永久节点 ,
~~~ 可以看到永久节点不同于顺序节点,不会自动在后面添加一串数字
[zk: localhost:2181(CONNECTED) 1] create /zk-permanent 123
Created /zk-permanent
[zk: localhost:2181(CONNECTED) 2] ls /
[zk-permanent, zk-test0000000000, zookeeper]
~~~ # 退出之后重新进入查看永久节点
[zk: localhost:2181(CONNECTED) 0] ls /
[zk-permanent, zk-test0000000000, zookeeper]
三、读取节点
### --- 与读取相关的命令有ls 命令和get 命令
~~~ ls命令可以列出Zookeeper指定节点下的所有子节点,
~~~ 但只能查看指定节点下的第一级的所有子节点;
~~~ ls path 其中,path表示的是指定数据节点的节点路径
[zk: localhost:2181(CONNECTED) 5] ls /zookeeper
[quota]
### --- get命令可以获取Zookeeper指定节点的数据内容和属性信息。
~~~ # get path
[zk: localhost:2181(CONNECTED) 6] get /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
### --- 若获取根节点下面的所有子节点,使用ls / 命令即可
[zk: localhost:2181(CONNECTED) 7] ls /
[zk-permanent, zk-test0000000000, zookeeper]
~~~ # 若想获取/zk-permanent的数据内容和属性,可使用如下命令:get /zk-permanent
[zk: localhost:2181(CONNECTED) 8] get /zk-permanent
123
cZxid = 0x10000000a
ctime = Wed Sep 01 13:06:50 CST 2021
mZxid = 0x10000000a
mtime = Wed Sep 01 13:06:50 CST 2021
pZxid = 0x10000000a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
~~~ # 从上面的输出信息中,
~~~ 我们可以看到第一行是节点/zk-permanent 的数据内容,
~~~ 其他几行则是创建该节点的事务ID(cZxid)、最后一次更新该节点的事务ID(mZxid)和
~~~ 最后一次更新该节点的时间(mtime)等属性信息
四、更新节点
### --- 使用set命令,可以更新指定节点的数据内容,用法如下
set path data
### --- 其中,data就是要更新的新内容version表示数据版本,在zookeeper中,
~~~ 节点的数据是有版本概念的,这个参数用于指定本次更新操作是基于Znode的哪一个数据版本进行的,
~~~ 如将/zk-permanent节点的数据更新为456,可以使用如下命令:set /zk-permanent 456
~~~ 现在dataVersion已经变为1了,表示进行了更新
[zk: localhost:2181(CONNECTED) 10] set /zk-permanent 456
cZxid = 0x10000000a
ctime = Wed Sep 01 13:06:50 CST 2021
mZxid = 0x10000000d
mtime = Wed Sep 01 13:09:20 CST 2021
pZxid = 0x10000000a
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
五、删除节点
### --- 使用delete命令可以删除Zookeeper上的指定节点,用法如下
delete path
### --- 其中version也是表示数据版本,
~~~ 使用delete /zk-permanent 命令即可删除/zk-permanent节点
~~~ 可以看到,已经成功删除/zk-permanent节点。值得注意的是,若删除节点存在子节点,
~~~ 那么无法删除该节点,必须先删除子节点,再删除父节点
[zk: localhost:2181(CONNECTED) 11] delete /zk-permanent
[zk: localhost:2181(CONNECTED) 12] ls /
[zk-test0000000000, zookeeper]