zookeeper=类似unix文件系统+通知机制+Znode(path路径+data+stat描述节点状态)节点,zookeeper的重要功能不是增删改查,而是通知机制!
Zookeeper维护一个类似文件系统的数据节点,所使用的数据模型风格很像文件系统的目录树结构,简单来说,有点类似windows中注册表的结构!
ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个znode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
在分布式架构中,每一个节点存储的是一个个应用服务,配置信息都配置到对象的节点中!
序号 | 命令 | 注释 |
---|---|---|
1 | help | |
2 | ls | 使用 ls 命令来查看当前znode中所包含的内容 |
3 | ls2 | 查询子节点数和状态(stat)信息 |
4 | stat | 展示状态信息 |
5 | set | 修改节点值 |
6 | get | 查询节点值 |
7 | create | 新建节点(4种) |
8 | delete | 删除无子节点的目录 |
9 | rmr | 递归删除节点 |
create [-s] [-e] path data acl //注意:创建节点的同时一定要添加数据!!!
(1)create path data //创建持久化节点【普通节点】
(2)create -s path data //创建持久化序号节点
(3)create -e path data //创建临时节点,客户断开连接就会被删除
(4)create -s -e path data //创建持久化序号、临时的节点
[zk: localhost:2181(CONNECTED) 12] ls /
[zookeeper]
//不可重复创建(统一的命名服务),这里无权限,Linux用户已经设置了用户
[zk: localhost:2181(CONNECTED) 13] create /lindaxia java191028//(1)创建持久化节点
Created /lindaxia
[zk: localhost:2181(CONNECTED) 14] ls /
[lindaxia, zookeeper]
[zk: localhost:2181(CONNECTED) 15] create /lindaxia java191029 //路径是唯一的
Node already exists: /lindaxia
[zk: localhost:2181(CONNECTED) 26] ls /
[lindaxia, zookeeper]
[zk: localhost:2181(CONNECTED) 27] create -s /znode java191028 //(2)创建持久化序号节点
Created /znode0000000002
[zk: localhost:2181(CONNECTED) 28] ls /
[lindaxia, znode0000000002, zookeeper]
[zk: localhost:2181(CONNECTED) 28] ls /
[lindaxia, znode0000000002, zookeeper]
[zk: localhost:2181(CONNECTED) 29] create -e /test java191028//(3)创建临时节点
Created /test
[zk: localhost:2181(CONNECTED) 30] ls /
[lindaxia, znode0000000002, zookeeper, test]
[zk: localhost:2181(CONNECTED) 30] ls /
[lindaxia, znode0000000002, zookeeper, test]
[zk: localhost:2181(CONNECTED) 31] create -s -e /test java191028//(4)创建持久化序号、临时的节点
Created /test0000000004
[zk: localhost:2181(CONNECTED) 32] ls /
[lindaxia, znode0000000002, zookeeper, test, test0000000004]
[zk: localhost:2181(CONNECTED) 33] quit //①关闭客户端
Quitting...
2019-10-28 19:56:28,477 [myid:] - INFO [main:ZooKeeper@687] - Session: 0x1000517e59c0002 closed
2019-10-28 19:56:28,478 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@520] - EventThread shut down for session: 0x1000517e59c0002
[root@localhost bin]# ./zkCli.sh //②重启客户端
[zk: localhost:2181(CONNECTED) 0] ls / //查询节点信息,临时节点被删除
[lindaxia, znode0000000002, zookeeper]
get path [watch]
[zk: localhost:2181(CONNECTED) 17] get /lindaxia
java191028 //获取节点
cZxid = 0x8
ctime = Mon Oct 28 19:01:55 CST 2019
mZxid = 0x8
mtime = Mon Oct 28 19:01:55 CST 2019
pZxid = 0x8
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
默认zookeeper的stat的结构体
[zk: localhost:2181(CONNECTED) 18] get /zookeeper //查询zookeeper节点
cZxid = 0x0 //创建节点的事务的Zxid(zookeeper Transaction id)
ctime = Thu Jan 01 08:00:00 CST 1970 //znode被创建的毫秒数
mZxid = 0x0 //znode最后更新的Zxid
mtime = Thu Jan 01 08:00:00 CST 1970 //znode被修改的毫秒数
pZxid = 0x0 //znode最后更新的子节点的Zxid
cversion = -1 //znode子节点变化号,znode子节点修改次数
dataVersion = 0 //znode数据变化号
aclVersion = 0//znode访问控制列表的变化号
ephemeralOwner = 0x0//如果是临时节点,这个znode拥有者的session id,如果不是临时节点则是0【默认创建持久化节点】
dataLength = 0 //数据长度
numChildren = 1 //子节点数量
set path data [version]
[zk: localhost:2181(CONNECTED) 19] get /lindaxia
java191028
cZxid = 0x8
ctime = Mon Oct 28 19:01:55 CST 2019
mZxid = 0x8
mtime = Mon Oct 28 19:01:55 CST 2019
pZxid = 0x8
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: localhost:2181(CONNECTED) 20] set /lindaxia java1910288 //修改节点信息
cZxid = 0x8
ctime = Mon Oct 28 19:01:55 CST 2019
mZxid = 0xa
mtime = Mon Oct 28 19:25:35 CST 2019
pZxid = 0x8
cversion = 0
dataVersion = 1 //znode数据变化号【版本号已经修改】
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
[zk: localhost:2181(CONNECTED) 21] get /lindaxia
java1910288
cZxid = 0x8
ctime = Mon Oct 28 19:01:55 CST 2019
mZxid = 0xa
mtime = Mon Oct 28 19:25:35 CST 2019 //znode被修改的毫秒数【已改变】
pZxid = 0x8
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0 //默认创建持久化节点
dataLength = 11
numChildren = 0
delete path [version]
rmr path [version]
[zk: localhost:2181(CONNECTED) 5] ls /
[lindaxia, znode0000000002, zookeeper]
[zk: localhost:2181(CONNECTED) 6] delete /z
znode0000000002 zookeeper
[zk: localhost:2181(CONNECTED) 6] delete /znode0000000002 //删除无子节点的目录
[zk: localhost:2181(CONNECTED) 7] ls /
[lindaxia, zookeeper]
[zk: localhost:2181(CONNECTED) 7] ls /
[lindaxia, zookeeper]
[zk: localhost:2181(CONNECTED) 8] rmr /lindaxia //递归删除节点
[zk: localhost:2181(CONNECTED) 9] ls /
[zookeeper]
序号 | 命令 |
---|---|
1 | ruok:测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应 |
2 | stat:输出关于性能和连接的客户端的列表 |
3 | conf:输出相关服务配置的详细信息 |
4 | cons:列出所有连接到服务器的客户端的完全的连接 /会话的详细信息。包括“接受 / 发送”的包数量、会话id 、操作延迟、最后的操作执行等等信息 |
5 | dump:列出未经处理的会话和临时节点 |
6 | envi:输出关于服务环境的详细信息(区别于conf命令) |
7 | reqs:列出未经处理的请求 |
8 | wchs:列出服务器watch的详细信息【观察连接点】 |
9 | wchc:通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表 |
10 | wchp:通过路径列出服务器 watch的详细信息。它输出一个与 session相关的路径 |
[root@localhost bin]# echo stat|nc 127.0.0.1 2181 //(1)输出关于性能和连接的客户端的列表
Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
Clients:
/0:0:0:0:0:0:0:1:57970[1](queued=0,recved=836,sent=836)
/127.0.0.1:60364[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/34
Received: 1480
Sent: 1479
Connections: 2
Outstanding: 0
Zxid: 0x12
Mode: standalone
Node count: 4
[root@localhost bin]# echo conf|nc 127.0.0.1 2181 //(2)输出相关服务配置的详细信息
clientPort=2181
dataDir=/tmp/zookeeper/version-2
dataLogDir=/tmp/zookeeper/version-2
tickTime=2000 //心跳
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
☝上述分享来源个人总结,如果分享对您有帮忙,希望您积极转载;如果您有不同的见解,希望您积极留言,让我们一起探讨,您的鼓励将是我前进道路上一份助力,非常感谢!我会不定时更新相关技术动态,同时我也会不断完善自己,提升技术,希望与君同成长同进步!
☞本人博客:https://coding0110lin.blog.csdn.net/ 欢迎转载,一起技术交流吧!