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序号自增

image-20220329222538210

临时节点

应用:服务注册发现

原理: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
posted @ 2022-03-31 21:29  RollBack2010  阅读(158)  评论(0编辑  收藏  举报