2.znode操作&类型&结构
目录
节点操作
通过./zkCli.sh进入
创建节点
create /name1
#创建一个节点name
create /name1/name1-1
#在name1节点下创建name1-1
查看节点
ls /
#查看根节点,根据根节点再查其他的节点
删除节点
方式一:非乐观锁
delete /节点名称
#删除空节点,节点不为空则删除失败
deleteall /节点名称
#删除节点,包括节点下所有数据
方式二:乐观锁
-
查看版本号
#1.创建一个节点 [zk: localhost:2181(CONNECTED) 20] create /versionNode Created /versionNode #2.查看节点元数据,观察dataVersion当前版本 [zk: localhost:2181(CONNECTED) 21] get -s /versionNode . . dataVersion = 0 . . #3.在节点下创建一个节点 [zk: localhost:2181(CONNECTED) 22] set /versionNode n1 #4.再次查看节点元数据,观察dataVersion当前版本 [zk: localhost:2181(CONNECTED) 23] get -s /versionNode . . dataVersion = 1 . . #版本变了
-
根据版本号删除
delete -v 1 /versionNode #通过-v 1添加版本号,当dataVersion ==输入值时,才会删除
节点下添加数据
节点创建时添加
create /val-node val
节点创建后添加
set /val-node val
获得添加的数据
get /val-node
获得节点下所有的子节点(递归查询)
ls -R /node2
znode结构
Znode 是 ZooKeeper 中数据的最小单元,每个 Znode 都兼具文件和目录两种特点,既能像文件一样保存和维护数据,又可以由一系列使用斜杠(/)进行分割的方式作为路径标识的一部分。每个 Znode 都有以下三部分组成。
- Stat:状态信息,用于存储该 Znode 的版本、权限、时间戳等信息;
- Data:实际存储的数据;
- Children:对子节点的信息描述;
需要特别说明的是,Znode 节点虽然可以存储数据信息,但它并不能像数据库那样存储大量的数据,Znode 的设计初衷就是存储分布式应用中的配置文件、集群状态等元数据信息。
名称 | 简写 | 权限说明 |
---|---|---|
CREATE | c | 允许创建当前节点下的字节点 |
DELETE | d | 允许删除当前节点下的子节点,仅限下一级 |
READ | r | 允许读取节点数据以及显示子节点的列表 |
WRITE | w | 允许设置当前节点的数据 |
ADMIN | a | 管理员权限,允许设置或读取当前节点的权限列表 |
节点元数据
通过命令 get -s /node2 可得到节点元数据
[a1] #节点存的值
cZxid = 0xe #创建数据节点时的事务ID
ctime = Wed Mar 16 14:09:00 CST 2022 #创建数据节点时的时间
mZxid = 0xe #最后一次修改数据节点时的事务ID
mtime = Wed Mar 16 14:09:00 CST 2022 #最后一次修改数据节点时的时间
pZxid = 0xf #表示该数据节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)
cversion = 1 #子节点版本号(子节点的更改次数),子节点每次修改版本号加1
dataVersion = 0 #数据版本号(节点数据的更改次数),数据每次修改该版本号加1
aclVersion = 0 #权限版本号(节点的 ACL 的更改次数),权限每次修改该版本号加1
ephemeralOwner = 0x0 #创建该临时节点的会话的sessionID。(如果该节点是持久节点,那么这个属性值为0)
dataLength = 3 #节点的数据长度
numChildren = 1 #节点拥有子节点的数量(只统计直接子节点的数量)
znode类型
持久节点
create /node1
#create 不带参数,默认是持久节点,不可重复
持久自增节点
应用:分布式锁
create -s /num/lock
#序号自增 ,允许节点重复,后面添加0001,00002序号自增
临时节点
应用:服务注册发现
原理:zk客户端会给zk服务器发心跳,当客户端挂了,心跳停了,那节点也就没了
create -e /temp
临时序号节点
create -e -s /temp-num
Container节点(容器节点)
当节点下没有任何子节点,会被zk定期删除(60秒)
create -c /c-node
TTL节点
需要在配置文件中添加extendedTypesEnabled=true,然后重启zookeeper
create -t 5 /ttl-node