ZooKeeper客户端脚本

进入到ZooKeeper的bin目录下,我们看到有如下的几个命令

[root@iZbp13pwlxqwiu1xxb6szsZ bin]# ll
total 44
-rwxr-xr-x 1 1001 1001  232 Mar 23  2017 README.txt
-rwxr-xr-x 1 1001 1001 1937 Mar 23  2017 zkCleanup.sh
-rwxr-xr-x 1 1001 1001 1056 Mar 23  2017 zkCli.cmd
-rwxr-xr-x 1 1001 1001 1534 Mar 23  2017 zkCli.sh
-rwxr-xr-x 1 1001 1001 1628 Mar 23  2017 zkEnv.cmd
-rwxr-xr-x 1 1001 1001 2696 Mar 23  2017 zkEnv.sh
-rwxr-xr-x 1 1001 1001 1089 Mar 23  2017 zkServer.cmd
-rwxr-xr-x 1 1001 1001 6773 Mar 23  2017 zkServer.sh
-rw-r--r-- 1 root root 7955 Dec 29 12:49 zookeeper.out
[root@iZbp13pwlxqwiu1xxb6szsZ bin]# 

我们通过执行sh zkCli.sh 来连接本地的ZooKeeper服务器,有如下的信息就表示客户端连接成功

Welcome to ZooKeeper!
2019-12-29 17:54:22,884 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2019-12-29 17:54:22,959 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@876] - Socket connection established to localhost/127.0.0.1:2181, initiating session
2019-12-29 17:54:22,976 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x16f4aa40b760000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

如果需要连接指定的远程ZooKeeper服务器,执行 sh zkCli.sh -server ip:port

连接上ZooKeeper服务器,我们就可以执行客户端脚本命令了,如下

help命令

help命令用于查询客服端所支持的所用的命令,执行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
[zk: localhost:2181(CONNECTED) 1] 

create命令

create [-s] [-e] path data acl

  • -s 有序节点

一个znode还可以设置为有序(sequential)节点。一个有序znode节点被分配唯一个单调递增的整数。当创建有序节点时,一个序号会被追加到路径之后。

  • -e 临时节点

默认情况下创建的是持久节点。

  • acl权限控制,缺省情况下不做任何权限控制。
[zk: localhost:2181(CONNECTED) 0] create /zk-test 123
Created /zk-test
[zk: localhost:2181(CONNECTED) 1]

我们在根节点下创建了一个叫做/zk-test的持久节点,节点的数据内容是123

get命令

get path [watch]

get命令用于获取节点的数据内容和属性信息,注意节点的路径必须是以/开头的绝对路径

[zk: localhost:2181(CONNECTED) 2] get /zk-test
123
cZxid = 0x3144
ctime = Sun Dec 29 18:02:30 CST 2019
mZxid = 0x3144
mtime = Sun Dec 29 18:02:30 CST 2019
pZxid = 0x3144
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 3] 

 第一行是数据内容123,其他的属性信息如下表

状态属性 说明
cZxid 节点创建的事务zxid。每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
ctime znode的创建时间
mzxid znode最后修改的zxid
mtime znode最后修改时间
pZxid znode最后更新的子节点zxid
cversion znode子节点变化号,每变化一次就自增1
dataversion znode数据变化号,数据每变化一次就自增1
aclVersion znode访问控制列表的变化号
ephemeralOwner 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0
dataLength znode的数据长度
dataLength znode子节点数量

ls命令

ls path [watch]

ls命令用于获取指定节点下第一级的所有子节点,路径为绝对路径。

[zk: localhost:2181(CONNECTED) 1] ls /zk-test
[]

因为zk-test节点下没有子节点,因此返回的是空。我们看下根节点下的子节点信息

[zk: localhost:2181(CONNECTED) 4] ls /
[zk-test, zookeeper]
[zk: localhost:2181(CONNECTED) 5] 

在根节点下有zookeeper(默认保留的节点)、zk-test节点(我们刚才创建的节点)

set命令

set path data [version]

更新指定节点的数据内容

注意:在命令后面有一个version参数,在ZooKeeper中,节点的数据是有版本概念的,这个参数用于指定本次更新操作是基于ZNode的哪一个数据版本进行的。

我们不带version参数进行如下的更新,dataVersion由原来的0变成了1

[zk: localhost:2181(CONNECTED) 5] set /zk-test 456
cZxid = 0x3144
ctime = Sun Dec 29 18:02:30 CST 2019
mZxid = 0x3145
mtime = Sun Dec 29 18:18:43 CST 2019
pZxid = 0x3144
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] 

如果我们再执行一次带version参数的命令,如下

[zk: localhost:2181(CONNECTED) 6] set /zk-test 456 0
version No is not valid : /zk-test
[zk: localhost:2181(CONNECTED) 7] 

我们发现,如果我们的version是0的话,则更新不了,版本是无效的。

我们使用dataVersion的最新版本1进行更新,如下,我们更新成功了,同时dataVersion变成了2

[zk: localhost:2181(CONNECTED) 7] set /zk-test 789 1
cZxid = 0x3144
ctime = Sun Dec 29 18:02:30 CST 2019
mZxid = 0x3147
mtime = Sun Dec 29 18:21:24 CST 2019
pZxid = 0x3144
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 8] 

delete命令

delete path [version] 

使用delete命令,可以删除ZooKeeper上的指定节点。

注意:要想删除某一个指定的节点,该节点必须没有子节点存在。

我们先给zk-test创建一个子节点

[zk: localhost:2181(CONNECTED) 12] create /zk-test/sub-test 777
Created /zk-test/sub-test
[zk: localhost:2181(CONNECTED) 13] ls /zk-test
[sub-test]
[zk: localhost:2181(CONNECTED) 14] delete /zk-test
Node not empty: /zk-test
[zk: localhost:2181(CONNECTED) 15] 

如上面所示,因为zk-test下面存在sub-test子节点,我们执行删除节点命令,会报错Node not empty: /zk-test

quit命令

退出客户端

发布了212 篇原创文章 · 获赞 135 · 访问量 137万+

猜你喜欢

转载自blog.csdn.net/ystyaoshengting/article/details/103755871