基本数据结构
Zookeeper是树形结构,类似于Linux的文件目录。
每一个节点都称之为znode,它可以有子节点,也可以有数据。
每个节点分为临时节点和永久节点,临时节点在客户端断开后消失。
每个zk节点都各自的版本号,可以通过命令行来显示节点信息。
每当节点数据发生变化,那么该节点的版本号version会累加(乐观锁)。
删除/修改过时的节点,版本号不匹配则会报错。
每个zk节点存储的数据不宜过大,几K即可。
节点可以设置权限acl,可以通过权限来限制用户访问
客户端基本操作
启动客户端
./zkCli.shConnecting to localhost:2181
查看
查看当前znode中所包含的内容
ls /[zookeeper]
查看当前节点详细数据
ls2 /[zookeeper]cZxid = 0x0ctime = Thu Jan 01 08:00:00 CST 1970mZxid = 0x0mtime = Thu Jan 01 08:00:00 CST 1970pZxid = 0x0cversion = -1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 1
创建
创建节点
[zk: localhost:2181(CONNECTED) 2] create /zk_path1 foo1Created /zk_path1[zk: localhost:2181(CONNECTED) 3] create /zk_path1/zk_path2 foo2Created /zk_path1/zk_path2
获取节点数据
[zk: localhost:2181(CONNECTED) 4] get /zk_path1foo1cZxid = 0x2ctime = Wed Aug 28 00:18:29 CST 2019mZxid = 0x2mtime = Wed Aug 28 00:18:29 CST 2019pZxid = 0x3cversion = 1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 1[zk: localhost:2181(CONNECTED) 5] get /zk_path1/zk_path2foo2cZxid = 0x3ctime = Wed Aug 28 00:18:48 CST 2019mZxid = 0x3mtime = Wed Aug 28 00:18:48 CST 2019pZxid = 0x3cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 0
创建短暂节点
[zk: localhost:2181(CONNECTED) 6] create -e /zk_tmp barCreated /zk_tmp[zk: localhost:2181(CONNECTED) 7] get /zk_tmpbarcZxid = 0x4ctime = Wed Aug 28 00:21:18 CST 2019mZxid = 0x4mtime = Wed Aug 28 00:21:18 CST 2019pZxid = 0x4cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x100006be7770000dataLength = 3numChildren = 0[zk: localhost:2181(CONNECTED) 8] quit$ zkCli.sh[zk: localhost:2181(CONNECTED) 0] get /zk_tmpNode does not exist: /zk_tmp
删除
删除节点
delete /zk_test
ls
ls path 查看某个路径下目录列表,ls / 查看根目录下有一个zookeeper的目录。 目录就是一个节点。/ 根节点 zookeeper是子节点
[zk: localhost:2181(CONNECTED) 1] ls /[zookeeper]
stat
查看节点状态信息。
[zk: localhost:2181(CONNECTED) 9] stat /cZxid = 0x0ctime = Thu Jan 01 08:00:00 CST 1970mZxid = 0x0mtime = Thu Jan 01 08:00:00 CST 1970pZxid = 0x0cversion = -1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 1
cZxid Zookeeper为节点分配的Id
cTime 节点创建时间
mZxid 修改后的id
mtime 修改时间
pZxid 子节点id
cversion 子节点的version
dataVersion 当前节点数据的版本号
aclVersion 权限Version
dataLength 数据长度
numChildren 子节点个数
ls2
ls2 显示了数据的一些状态信息 是ls和stat命令的组合
[zk: localhost:2181(CONNECTED) 7] ls2 /[zookeeper]cZxid = 0x0ctime = Thu Jan 01 08:00:00 CST 1970mZxid = 0x0mtime = Thu Jan 01 08:00:00 CST 1970pZxid = 0x0cversion = -1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 1
create
create /test testdataCreated /test
创建临时节点
[zk: localhost:2181(CONNECTED) 12] create -e /test/tmp tmpdataCreated /test/tmp
创建顺序节点
[zk: localhost:2181(CONNECTED) 4] create -s /test/sec sequencerCreated /test/sec0000000001
get
get path获取节点数据信息
get /testtestdatacZxid = 0x2ctime = Wed May 08 17:28:06 CST 2019mZxid = 0x2mtime = Wed May 08 17:28:06 CST 2019pZxid = 0x2cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 8numChildren = 0
set
修改节点值
[zk: localhost:2181(CONNECTED) 5] set /test newdatacZxid = 0x2ctime = Wed May 08 17:28:06 CST 2019mZxid = 0x7mtime = Wed May 08 17:59:07 CST 2019pZxid = 0x6cversion = 3dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 7numChildren = 1
如果节点不存在或修改失败
[zk: localhost:2181(CONNECTED) 7] set /test1 newdata1Node does not exist: /test1
乐观锁修改
set pata data dataversion
[zk: localhost:2181(CONNECTED) 8] set /test new-data 1cZxid = 0x2ctime = Wed May 08 17:28:06 CST 2019mZxid = 0x9mtime = Wed May 08 18:02:29 CST 2019pZxid = 0x6cversion = 3dataVersion = 2aclVersion = 0ephemeralOwner = 0x0dataLength = 8numChildren = 1[zk: localhost:2181(CONNECTED) 9] set /test new-data 1version No is not valid : /test
delete
删除节点
[zk: localhost:2181(CONNECTED) 23] delete /test0000000001[zk: localhost:2181(CONNECTED) 24] delete /test0000000001Node does not exist: /test0000000001
四字命令Four letter Words
zk可以通过它自身提供的简写命令来和服务器进行交互
安装nc命令
命令格式
echo [commond] | nc [ip] [port]
stat 查看zk的状态信息 以及是否mode
baxiangs-Mac-mini:~ baxiang$ echo stat | nc localhost 2181Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMTClients:/0:0:0:0:0:0:0:1:50696[0](queued=0,recved=1,sent=0)/127.0.0.1:50565[1](queued=0,recved=140,sent=140)Latency min/avg/max: 0/0/7Received: 865Sent: 864Connections: 2Outstanding: 0Zxid: 0x1d99Mode: standaloneNode count: 19
ruok 查看当前zkserver是否启动,返回imok
echo ruok | nc localhost 2181imok
dump 列出未经处理的回话和临时节点
$ echo dump | nc localhost 2181SessionTracker dump:Session Sets (3):0 expire at Thu Jan 01 10:36:30 CST 1970:0 expire at Thu Jan 01 10:36:40 CST 1970:1 expire at Thu Jan 01 10:36:50 CST 1970:0x100000872ba0003ephemeral nodes dump:Sessions with Ephemerals (0):
conf 查看服务器配置
echo conf | nc localhost 2181clientPort=2181dataDir=/usr/local/var/run/zookeeper/data/version-2dataLogDir=/usr/local/var/run/zookeeper/data/version-2tickTime=2000maxClientCnxns=60minSessionTimeout=4000maxSessionTimeout=40000serverId=0
cons 展示连接到服务器的客户端信息
echo cons | nc localhost 2181/0:0:0:0:0:0:0:1:50728[0](queued=0,recved=1,sent=0)/127.0.0.1:50565[1](queued=0,recved=184,sent=184,sid=0x100000872ba0003,lop=PING,est=1557332837106,to=30000,lcxid=0x9,lzxid=0x1d99,lresp=9618134,llat=0,minlat=0,avglat=0,maxlat=2)
envi 查看环境变量配置
mntr 监控zk监控信息
echo mntr | nc localhost 2181zk_version 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMTzk_avg_latency 0zk_max_latency 7zk_min_latency 0zk_packets_received 942zk_packets_sent 941zk_num_alive_connections 2zk_outstanding_requests 0zk_server_state standalonezk_znode_count 19zk_watch_count 0zk_ephemerals_count 0zk_approximate_data_size 258zk_open_file_descriptor_count 32zk_max_file_descriptor_count 10240
wchs 展示watch的信息
$ echo wchs | nc localhost 21811 connections watching 1 pathsTotal watches:1
wchc/wchp session与watch 以及path与watch信息
