上一篇文章,博主介绍了zookeeper集群的搭建全过程;今天博主将为大家分享的是zookeeper的命令行客户端使用、zookeeper的数据结构和监听功能。
zookeeper启动与关闭服务的命令:
./bin/zkServer.sh start 开启zookeeper
./bin/zkServer.sh stop 停止zookeeper
一、zookeeper数据结构
zookeeper特性:
1)、Zookeeper:一个leader,多个follower组成的集群
2)、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
3)、分布式读写,更新请求转发,由leader实施
4)、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
5)、数据更新原子性,一次数据更新要么成功,要么失败
6)、实时性,在一定时间范围内,client能读到最新数据
zookeeper数据结构:
1)、层次化的目录结构,命名符合常规文件系统规范(见下图)
2)、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
3)、节点Znode可以包含数据和子节点(EPHEMERAL短暂类型的节点不能有子节点)
4)、客户端应用可以在节点上设置监视器
数据结构的图:
节点类型
1)、Znode有两种类型:
短暂(ephemeral)(断开连接自己删除)
持久(persistent)(断开连接不删除)
2)、Znode有四种形式的目录节点(默认是persistent )
PERSISTENT -----永久节点
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 ) ------永久序号节点
EPHEMERAL -----临时节点(短暂节点)
EPHEMERAL_SEQUENTIAL ------短暂序号节点
3)、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
4)、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
二、zookeeper命令行客户端初识
zookeeper的客户端和其它可执行命令都在其bin目录中,分别是zkCli.sh和zkCli.cmd,前者是Linux中使用的客户端启动脚本,后者是windows系统中的客户端启动脚本。
1)、运行 zkCli.sh –server <ip>进入命令行工具:./zkCli.sh -server 192.168.29.135
cd /opt/apps/zookeeper-3.4.13/bin
./zkCli.sh -server 192.168.29.135 如果不指定-server参数,连接的是本机ip
2)、命令行客户端连接上zookeeper后,输入help可查看zookeeper命令帮助
3)、客户端命令例子
1、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:
[zk: 192.168.29.135(CONNECTED) 1] ls /
2、创建一个新的 znode ,使用 create /zk myData 。这个命令创建了一个新的 znode 节点“ zk ”以及与它关联的字符串,默认为创建永久节点:
[zk: 192.168.29.135(CONNECTED) 2] create /zk "myData“
3、我们运行 get 命令来确认 znode 是否包含我们所创建的字符串:
[zk: 192.168.29.135(CONNECTED) 3] get /zk
//数据描述信息
""
cZxid=0x30000004创建事务id
ctime=Tue apr 05 02:35:02 CST 2016
mZxid=0x30000004修改事务id
mtime=Tue apr 05 02:35:02 CST 2016
cversion=1创建版本号,
dataversion=1 数据版本号
aclversion=0 权限版本号
ephemeralOwner
dataLength=5数据长度
numChildren=1子节点数
#监听这个节点的变化,当另外一个客户端改变/zk时,它会打出下面的
#WATCHER::
#WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk
[zk: 192.168.29.135(CONNECTED) 4] get /zk watch
4、下面我们通过 set 命令来对 zk 所关联的字符串进行设置:
[zk: 192.168.29.135(CONNECTED) 5] set /zk "zsl“
5、下面我们将刚才创建的 znode 删除,只能删除叶子节点:
[zk: 192.168.29.135(CONNECTED) 6] delete /zk
6、删除节点,可删除非叶子节点及其下的子节点的所有数据:rmr
[zk: 192.168.29.135(CONNECTED) 7] rmr /zk
7、创建短暂节点(客户端退出后自动删除)
[zk: 192.168.29.135(CONNECTED) 8] create -e /aap2 “bbb”
8、带序号的短暂节点,zookeeper在创建带序号的节点时,如果从来没创建过,序号冲0开始,反之从1开始
[zk: 192.168.29.135(CONNECTED) 9] create -s -e /aap2 “bbb”
9、设置值
[zk: 192.168.29.135(CONNECTED) 10] set /app1 bbbb
10、拿数据并且注册监听本节点数据的变化(监听只生效一次)
[zk: 192.168.29.135(CONNECTED) 11] get /app1 watch
11、获取子节点变化的监听
[zk: 192.168.29.135(CONNECTED) 12] ls /app1 watch
12、quit退出zookeeper客户端
[zk: 192.168.29.135(CONNECTED) 12] quit
三、zookeeper命令行客户端命令详解
1)、connect命令,连接zk服务端,(与close命令配合使用可以连接或者断开zk服务端),可用于更换连接的zookeeper服务器:
2)、close命令,用于关闭与服务端的链接
3)、get命令,用于获取节点的信息,注意节点的路径必须是以/开头的绝对路径。如get /
数据详细信息说明:
cZxid:节点创建时的zxid
ctime:节点创建时间
mZxid:节点最近一次更新时的zxid
mtime:节点最近一次更新的时间
cversion:子节点数据更新次数
dataVersion:本节点数据更新次数
aclVersion:节点ACL(授权信息)的更新次数
ephemeralOwner:如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength:节点数据长度,本例中为根节点/的长度
numChildren:子节点个数
4)、stat命令,用于查看节点的状态信息,如stat /;该命令的结果参数说明同get命令
5)、set命令,用于设置节点的数据,如:set /userid2 32222
6)、ls命令是用于获取路径下的节点信息,注意路径为绝对路径,如:ls2 /userid2
7)、ls2命令是ls命令的增强版,比ls命令多输出本节点信息,如:ls2 /userid2
8)、listquota命令用于显示配额,如listquota /userid3
9)、setquota命令用于设置节点个数以及数据长度的配额,如:
setquota –n 4 /userid3 设置/userid3子节点个数最大为4
setquota –b 100 /userid3 设置/userid3节点长度最大为100
10)、delquota命令用于删除配额,-n为子节点个数,-b为节点数据长度,如:delquota –n 2
11)、history用于列出最近的命令历史,可以和redo配合使用。如history
12)、redo命令用于再次执行某个命令,使用方式为redo cmdid 如 redo 20,常与history配合使用
13)、create命令用于创建节点,其中-s为顺序充点,-e临时节点
14)、delete命令用于删除节点,如delete /userid3
15)、addauth命令用于节点认证,使用方式:如addauth digest username:password
16)、setAcl命令用于设置节点Acl
Acl由三部分构成:1为scheme,2为user,3为permission,一般情况下表示为scheme:id:permissions
17)、getAcl命令获取节点的Acl,如getAcl /node1
18)、sync命令用于强制同步,由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作。
19)、printWatchers命令用于设置和显示监视状态,值为on或则off
20)、quit命令退出客户端
来源:oschina
链接:https://my.oschina.net/u/2371923/blog/1919909