上一篇文章,博主介绍了zookeeper集群的搭建全过程;今天博主将为你们分享的是zookeeper的命令行客户端使用、zookeeper的数据结构和监听功能。node
zookeeper启动与关闭服务的命令:windows
./bin/zkServer.sh start 开启zookeeper ./bin/zkServer.sh stop 中止zookeeper
1、zookeeper数据结构服务器
zookeeper特性:session
1)、Zookeeper:一个leader,多个follower组成的集群
2)、全局数据一致:每一个server保存一份相同的数据副本,client不管链接到哪一个server,数据都是一致的
3)、分布式读写,更新请求转发,由leader实施
4)、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
5)、数据更新原子性,一次数据更新要么成功,要么失败
6)、实时性,在必定时间范围内,client能读到最新数据数据结构
zookeeper数据结构:app
1)、层次化的目录结构,命名符合常规文件系统规范(见下图)
2)、每一个节点在zookeeper中叫作znode,而且其有一个惟一的路径标识
3)、节点Znode能够包含数据和子节点(EPHEMERAL短暂类型的节点不能有子节点)
4)、客户端应用能够在节点上设置监视器 分布式
数据结构的图:工具
节点类型ui
1)、Znode有两种类型:
短暂(ephemeral)(断开链接本身删除)
持久(persistent)(断开链接不删除)
2)、Znode有四种形式的目录节点(默认是persistent )
PERSISTENT -----永久节点
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 ) ------永久序号节点
EPHEMERAL -----临时节点(短暂节点)
EPHEMERAL_SEQUENTIAL ------短暂序号节点
3)、建立znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
4)、在分布式系统中,顺序号能够被用于为全部的事件进行全局排序,这样客户端能够经过顺序号推断事件的顺序命令行
2、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)、客户端命令例子
一、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容: [zk: 192.168.29.135(CONNECTED) 1] ls / 二、建立一个新的 znode ,使用 create /zk myData 。这个命令建立了一个新的 znode 节点“ zk ”以及与它关联的字符串,默认为建立永久节点: [zk: 192.168.29.135(CONNECTED) 2] create /zk "myData“ 三、咱们运行 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 四、下面咱们经过 set 命令来对 zk 所关联的字符串进行设置: [zk: 192.168.29.135(CONNECTED) 5] set /zk "zsl“ 五、下面咱们将刚才建立的 znode 删除,只能删除叶子节点: [zk: 192.168.29.135(CONNECTED) 6] delete /zk 六、删除节点,可删除非叶子节点及其下的子节点的全部数据:rmr [zk: 192.168.29.135(CONNECTED) 7] rmr /zk 七、建立短暂节点(客户端退出后自动删除) [zk: 192.168.29.135(CONNECTED) 8] create -e /aap2 “bbb” 八、带序号的短暂节点,zookeeper在建立带序号的节点时,若是历来没建立过,序号冲0开始,反之从1开始 [zk: 192.168.29.135(CONNECTED) 9] create -s -e /aap2 “bbb” 九、设置值 [zk: 192.168.29.135(CONNECTED) 10] set /app1 bbbb 十、拿数据而且注册监听本节点数据的变化(监听只生效一次) [zk: 192.168.29.135(CONNECTED) 11] get /app1 watch 十一、获取子节点变化的监听 [zk: 192.168.29.135(CONNECTED) 12] ls /app1 watch 十二、quit退出zookeeper客户端 [zk: 192.168.29.135(CONNECTED) 12] quit
3、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命令退出客户端