在ZooKeeper安装目录下的bin目录下有几个客户端脚本工具,本文中涉及的是关于zkCli.sh对zookeeper服务器的节点操作;
在建立了一个可以正常运行的zookeeper集群之后(搭建ZooKeeper集群),可以使用zkCli.sh客户端对ZooKeeper进行操作;进入bin目录之后执行zkCli.sh命令:
能看到以上输出的信息,表示已经正常连接上ZooKeeper服务器了,直接使用zkCli.sh进行客户端登录这种没有显示指定ZooKeeper服务器地址的连接,默认是连接本地的ZooKeeper服务器,如果希望连接到指定的ZooKeeper服务器上,可以使用带地址的连接命令,如下:
zkCli.sh -server ip:port
1.创建节点
使用create命令,可以创建一个ZooKeeper节点:
create [-s] [-e] path data acl
-s和-e分别指定节点特性:顺序或临时节点,默认情况下,不添加-s或-e参数的,创建的是持久节点
acl:用来进行权限控制,缺省情况下,不做任何权限控制.
path:节点路劲
data:节点保存的数据
示例:
WatchedEvent state:SyncConnected type:None path:null
create /zk-user yzr
Created /zk-user
[zk: localhost:2181(CONNECTED) 1]
执行完create /zk-user yzr 这命令之后,就在ZooKeeper的根节点下创建了一个叫做/zk-user的节点,并且节点的数据内容是"yzr";
2.读取节点数据
读取有两个相关的命令,一个是ls,用来查看节点分布情况,另外一个get,用来查看具体节点的数据和属性.
使用ls,可以查看ZooKeeper指定节点下的所有子节点,但是只能看到指定节点下的所属子节点,即第一级子节点,其他子节点是看不到的.
第一次部署ZooKeeper集群,默认在根节点"/"下面有一个/zookeeper的保留节点:
[zk: localhost:2181(CONNECTED) 1] ls /
[zk-user, zookeeper]
[zk: localhost:2181(CONNECTED) 2]
可以看到根节点下有两个第一级子节点,.zk-user和zookeeper子节点.
使用get可以获取ZooKeeper指定节点的数据内容和属性信息: get path [watch]
[zk: localhost:2181(CONNECTED) 2] get /zk-user
yzr
cZxid = 0x300000002
ctime = Wed Jul 26 19:32:54 CST 2017
mZxid = 0x300000002
mtime = Wed Jul 26 19:32:54 CST 2017
pZxid = 0x300000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 3]
从输出信息可以看到第一行就是节点的数据内容,剩余的其他内容就是zookeeper节点的数据结构.
3.更新节点数据内容
使用set命令可以更新指定节点的数据内容:
set path data [version]
data是更新的新内容,后面跟着一个version参数,在zookeeper中,节点的数据是有版本概念的,version用于指定本次更新操作是基于ZNode的哪一个数据版本进行的.
[zk: localhost:2181(CONNECTED) 3] set /zk-user lyf
cZxid = 0x300000002
ctime = Wed Jul 26 19:32:54 CST 2017
mZxid = 0x300000003
mtime = Wed Jul 26 19:47:15 CST 2017
pZxid = 0x300000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 4]
/zk-user节点数据内容更改为lyf,且dataversion的值变为1.节点数据版本发生了变化.
4.删除节点
delete命令可以删除ZooKeeper上的指定节点:
delete path [version]
[zk: localhost:2181(CONNECTED) 4] delete /zk-user
[zk: localhost:2181(CONNECTED) 5] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 6]
执行以上命令就可以删除/zk-user节点,需要注意的一点是,若要删除某一个指定的节点,该节点必须没有子节点,不然会报Node not empty的错误;
5.命令帮助
使用h命令可以查看zkCli.sh下所支持的所有命令:
[zk: localhost:2181(CONNECTED) 6] h
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) 7]
6.另外的一些节点
stat path [watch] :查看指定节点的状态信息:
[zk: localhost:2181(CONNECTED) 7] 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
[zk: localhost:2181(CONNECTED) 8]
ls2 :等价于ls+ stat两个命令,作用是它们的组合:
[zk: localhost:2181(CONNECTED) 8] ls2 /zookeeper
[quota]
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
[zk: localhost:2181(CONNECTED) 9]
rmr path:联级删除,删除当前路径节点及其所有子节点
[zk: localhost:2181(CONNECTED) 14] create /zk-test 123
Created /zk-test
[zk: localhost:2181(CONNECTED) 15] create /zk-test/info 456
Created /zk-test/info
[zk: localhost:2181(CONNECTED) 16] ls /
[zk-test, zookeeper]
[zk: localhost:2181(CONNECTED) 17] ls /zk-test
[info]
[zk: localhost:2181(CONNECTED) 18] rmr /zk-test
[zk: localhost:2181(CONNECTED) 19] ls
[zk: localhost:2181(CONNECTED) 20] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 21]
setquota :设置配额,-n指定子节点的个数,-b是限制子节点的数据长度,超出配额后,ZooKeeper不会报错,而是在日志信息中记录(可以查看zookeeper.out)
listquota path :查看路径节点的配额信息
delquota [-n|-b] path :删除节点路径的配额信息
connect host:port 和 close :在当前连接中连接其他的ZooKeeper服务器和关闭服务器
history 和 redo cmdno :查看客户端这次会话所执行的所有命令 和 执行指定cmd编号的历史命令
[zk: localhost:2181(CONNECTED) 21] history
11 - create /zk-test/info/data
12 - ls /zk-test
13 - ls /
14 - create /zk-test 123
15 - create /zk-test/info 456
16 - ls /
17 - ls /zk-test
18 - rmr /zk-test
19 - ls
20 - ls /
21 - history
[zk: localhost:2181(CONNECTED) 22] redo 14
Created /zk-test
[zk: localhost:2181(CONNECTED) 23]
quit :退出客户端
[zk: localhost:2181(CONNECTED) 23] quit
Quitting...
2017-07-26 20:17:31,138 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x15d7e8ab8ca0000 closed
2017-07-26 20:17:31,146 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x15d7e8ab8ca0000
[root@centos-server-yzr bin]#