在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]# 








Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐