ZooKeeper客户端 zkCli.sh 节点的增删改查

在 bin 目录下的zkCli.sh就是ZooKeeper客户端

./zkCli.sh -timeout 5000 -server 127.0.0.1:2181    //客户端与ZooKeeper建立链接

timeout:超时时间,单位毫秒

r:只读模式,当节点坏掉的时候,还可以提供读服务

./zkCli.sh -r -timeout 5000 -server 127.0.0.1:2181

与ZooKeeper建立连接后,即可通过命令与ZooKeeper进行交互

ZooKeeper数据结构:

ZooKeeper数据结构

ZooKeeper的操作基本都是在对节点进行增删改查

查询指令

ls path

列出path下的文件

[zk: 127.0.0.1:2181(CONNECTED) 4] ls /
[zookeeper]

如上:列出根目录节点下的所有文件,目前就只有一个系统自带的zookeeper节点

stat path

查看节点状态

[zk: 127.0.0.1:2181(CONNECTED) 6] stat /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
  • cZxid: 创建节点时的事务id
  • pZxid: 子节点列表最后一次被修改的事务id
  • cversion: 节点版本号
  • dataCersion: 数据版本号
  • aclVerson: acl权限版本号

get path

获取指定节点的内容

ls2 path

列出path节点的子节点及状态信息

创建指令

create [-s] [-e] path data acl
[zk: 127.0.0.1:2181(CONNECTED) 10] create /node_1 appblog.cn
Created /node_1

如上:在根目录创建node_1节点,携带数据appblog.cn

使用get /node_1验证是否添加节点及其数据成功

[zk: 127.0.0.1:2181(CONNECTED) 15] create -e /node_1/node_1_1 www.appblog.cn
Created /node_1/node_1_1

创建了一个临时节点-e,并且携带数据www.appblog.cn,使用stat命令查看这个新建的临时节点

[zk: 127.0.0.1:2181(CONNECTED) 16] stat /node_1/node_1_1
cZxid = 0x200000003
ctime = Sat Aug 27 15:27:30 CST 2017
mZxid = 0x200000003
mtime = Sat Aug 27 15:27:30 CST 2017
pZxid = 0x200000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x156cacb918b0000
dataLength = 3
numChildren = 0

ephemeralOwner值不再是0,表示这个临时节点的版本号,如果是永久节点则其值为 0x0

[zk: 127.0.0.1:2181(CONNECTED) 1] create -s /node_1/node_1_1 www.appblog.cn
Created /node_1/node_1_10000000001

通过使用-s参数,创建一个顺序节点,我们虽然指定的节点名是node_1_1,但是实际上,名称却是 node_1_10000000001,如果我们重复执行:

[zk: 127.0.0.1:2181(CONNECTED) 2] create -s /node_1/node_1_1 www.appblog.cn
Created /node_1/node_1_10000000002

效果如上,这个特性,我们可以利用一下,生成在分布式环境下的主键生成器

-s-e可以同时使用

退出:

quit
[zk: 127.0.0.1:2181(CONNECTED) 19] quit
Quitting...
2017-08-27 15:29:44,760 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x156cacb918b0000 closed
2017-08-27 15:29:44,763 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x156cacb918b0000

这个时候如果重新登录,执行ls /node_1,发现其子节点是空的,创建的node_1_1子节点不见了,那是因为之前创建的时候就已经指定,我们创建的是一个临时节点。当客户端会话结束后,临时节点是会被删除的。

$ cd zookeeper-3.4.13/bin/
$ zkCli.sh -server localhost:2181

修改指令

set path data [version]
[zk: 127.0.0.1:2181(CONNECTED) 14] set /node_1 http://www.appblog.cn
cZxid = 0x200000002
ctime = Sat Aug 27 15:24:39 CST 2017
mZxid = 0x20000000a
mtime = Sat Aug 27 15:38:40 CST 2017
pZxid = 0x200000008
cversion = 5
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 3

如果我们多次修改,会发现dataVersion,也就是数据版本,在不停得发生变化(自增)

如果在set的时候手动去指定了版本号,就必须和上一次查询出来的结果一致,否则 就会报错。

这个可以用于在修改节点数据的时候,保证我们修改前数据没被别人修改过。因为如果别人修改过了,我们这次修改是不会成功的

删除指令

delete path [version]

删除指定节点数据,其version参数的作用与set指定一致

> delete /node_1/node_1_10000000001

整个节点全删除

注意:delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,使用rmr命令

> rmr /node_1

操作案例

> create /idgen idgen
> create /idgen/config config
> create /idgen/config/1 1
> set /idgen/config/1 "1,[F:%G%m%d][SEQ],8,0,0,0,99999999,1,1000"
> get /idgen/config/1

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/18/add-delete-modify-and-query-nodes-through-zkcli-sh-in-zookeeper-client/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
ZooKeeper客户端 zkCli.sh 节点的增删改查
在 bin 目录下的zkCli.sh就是ZooKeeper客户端 ./zkCli.sh -timeout 5000 -server 127.0.0.1:2181 //客户端与ZooKeeper建立链接 timeout:超时时间,单位毫……
<<上一篇
下一篇>>
文章目录
关闭
目 录