zookeeper核心特性与节点
是一个分布式协调框架,提供统一命名服务,状态同步服务,集群管理,分布式应用配置项的管理等;本质上是一个存储少量数据的基于内存的数据库。两个核心:文件系统数据结构和监听通知机制。
文件系统数据结构
每个子目录都被称为znode;
1、持久化目录节点;
2、持久化顺序目录节点;
3、临时目录节点;
4、临时顺序目录节点;
持久化节点:客户端与zookeeper断开后,节点依然存在;
临时节点:客户端与zookeeper断开后,节点被删除;
顺序节点:zookeeper会对节点进行顺序编号;
5、Container节点:若该节点下无子节点,一段时间后会被zookeeper删除;
6、TTL节点:过了TTL时间后,该节点会被删除
创建节点:
[zk: localhost:2181(CONNECTED) 1] create /test-node some-data
Created /test-node
[zk: localhost:2181(CONNECTED) 2] get /test-node
some-data
修改节点数据:
[zk: localhost:2181(CONNECTED) 3] set /test-node ysy
[zk: localhost:2181(CONNECTED) 4] get /test-node
ysy
查看节点状态:
[zk: localhost:2181(CONNECTED) 5] stat /test-node
cZxid = 0x4 事务ID
ctime = Mon Dec 07 08:41:14 CST 2020 创建时间
mZxid = 0x5 最后修改的事务ID
mtime = Mon Dec 07 08:42:06 CST 2020 最近的修改时间
pZxid = 0x4 最后添加或者删除子节点的事务ID
cversion = 0
dataVersion = 1 当前数据版本,结合乐观锁
aclVersion = 0
ephemeralOwner = 0x0 表示临时节点的sessionID,非临时节点为0
dataLength = 3 数据字段长度
numChildren = 0 子节点的数量
查看节点数据和状态:
[zk: localhost:2181(CONNECTED) 6] get -s /test-node
ysy
cZxid = 0x4
ctime = Mon Dec 07 08:41:14 CST 2020
mZxid = 0x5
mtime = Mon Dec 07 08:42:06 CST 2020
pZxid = 0x4
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
根据版本号乐观锁机制去修改数据:
[zk: localhost:2181(CONNECTED) 7] set -v 1 /test-node ysy1
[zk: localhost:2181(CONNECTED) 8] set -v 1 /test-node ysy1
version No is not valid : /test-node
创建子节点:不支持相对路径,不支持递归创建
[zk: localhost:2181(CONNECTED) 10] create /test-node/test-sub-node
Created /test-node/test-sub-node
创建临时节点:临时节点不能创建子节点
[zk: localhost:2181(CONNECTED) 15] create -e /linshi ysy
Created /linshi
创建序号节点:
[zk: localhost:2181(CONNECTED) 16] create -s /xuhao ysy
Created /xuhao0000000002
[zk: localhost:2181(CONNECTED) 17] create -s /xuhao ysy
Created /xuhao0000000003
[zk: localhost:2181(CONNECTED) 18] create -s /xuhao ysy
Created /xuhao0000000004
创建临时序号节点:
[zk: localhost:2181(CONNECTED) 19] create -e -s /xuhao2 ysy
Created /xuhao20000000005
创建容器节点:如果没有给其创建子节点,容器节点表现和持久化节点一样,如果创建了子节点,又删除了子节点,容器节点也会被删除;
[zk: localhost:2181(CONNECTED) 20] create -c /container
Created /container
[zk: localhost:2181(CONNECTED) 21] create -c /container/ysy1
Created /container/ysy1
注册监听是一次性的
注册监听的同时,获取数据
[zk: localhost:2181(CONNECTED) 36] get -w /test-node
ysy1
[zk: localhost:2181(CONNECTED) 37] set /test-node ysy2
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/test-node
监听节点,获取元数据信息
[zk: localhost:2181(CONNECTED) 38] stat -w /test-node
cZxid = 0x4
ctime = Mon Dec 07 08:41:14 CST 2020
mZxid = 0x13
mtime = Mon Dec 07 09:07:01 CST 2020
pZxid = 0x9
cversion = 1
dataVersion = 4
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 1
针对目录的监听
[zk: localhost:2181(CONNECTED) 40] ls -w /test-node
[test-sub-node]
[zk: localhost:2181(CONNECTED) 41] delete /test-node/test-sub-node
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/test-node
针对递归子目录的监听
[zk: localhost:2181(CONNECTED) 44] ls -R -w /test-node
/test-node
/test-node/test-sub-node0
/test-node/test-sub-node1