Zookeeper3:数据模型和命令使用

Zookeeper3:数据模型和命令使用

 

1. 相关命令

# 查看当前节点 root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh status # 关闭节点,默认是找conf下的zoo.cfg文件 root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkServer.sh stop
notion image
 

2. Zooker数据模型

2.0 数据模型

ZooKeeper 的层次模型称作 data tree。Data tree 的每个节点叫做 znode。不同于文件系统,每个节点都可以保存数据。每个节点都有一个版本(version),版本从 0 开始计数。必须以/为路径。每一个ZNode默认能够存储1MB的数据,每个Zode都可以通过其路径唯一标识。
notion image
使用zkCli.sh连接zk的本地server,使用ls / 查看数据
root@redis01:~/zookeeper/apache-zookeeper-3.7.0-bin/bin# ./zkCli.sh
notion image
# 创建节点test1 [zk: localhost:2181(CONNECTED) 1] create /test1 Created /test1 [zk: localhost:2181(CONNECTED) 2] ls / [test1, zookeeper] # 创建子节点sub1 [zk: localhost:2181(CONNECTED) 3] create /test1/sub1 Created /test1/sub1 [zk: localhost:2181(CONNECTED) 4] ls / [test1, zookeeper] # 创建节点test2,并存入数据henggao [zk: localhost:2181(CONNECTED) 5] create /test2 henggao Created /test2 # 查看节点数据 [zk: localhost:2181(CONNECTED) 6] get /test2 henggao
 

2.1 znode的类型

2.1.1 持久节点

  • 创建出的节点,在会话结束后依然存在,保存数据
[zk: localhost:2181(CONNECTED) 7] create /test2

2.1.2 持久序号节点:

  • 创建出的节点,根据先后顺序,会在节点之后带上一个数值,越后执行数值越大,适用于分布式锁的应用场景,单调递增
[zk: localhost:2181(CONNECTED) 9] create -s /test2
notion image

2.1.3 临时节点

  • :是在会话结束后,自动被删除的,通过这个特性,zk可以实现服务注册与发现的效果。那么临时节点是如何维持心跳呢
# -e 随着会话的结束,等待10一小会儿左右就会删除 [zk: localhost:2181(CONNECTED) 11] create -e /test3

2.1.4 临时序号节点

  • 临时的分布式锁
create -e -s /test3

2.1.5 容器节点

  • 当容器中没有子节点,会定期自动删除(默认是60s)
create -c /mycontainer

2.1.6 TTL节点

  • 新的方法,目前还不稳定
 

2.2 ZK中的Znode是什么样的结构

zk中的znode,包含了四个部分
  • data:保存数据
  • acl:权限
  • c:create创建权限,允许在该节点下创建子节点
  • w:write更新权限,允许更新该节点的数据
  • r:read读取权限,允许读取该节点的内容以及子节点的列表信息
  • d:delete删除权限,允许删除该节点的子节点
  • a:admin管理者权限,允许对该节点进行acl权限设置
  • stat:描述当前znode的元数据
  • child:当前节点的子节点
 

3. 查询节点

3.1 递归查询

ls -R /test3

3.2 查询信息

get -s /test2
  • cZxid:创建节点的事务ID
  • mzxid:修改节点的事务ID
  • pzxid:添加和删除子节点的事务ID
  • ctime:节点创建的时间
  • mtime:节点最近修改的时间
  • odataVersion:节点内数据的版本,每更新一次数据,版本会+1
  • aclversion:此节点的权限版本
  • ephemeralOwner:如果当前节点是临时节点,该值是当前节点所有者的sessionid。如果节点不是临时节点,则该值为零。
  • dataLength:节点内数据的长度
  • numchildren:该节点的子节点个数

4. 删除节点

  • 普通删除
  • 乐观锁删除
# 删除空节点 delete /test1 # 删除节点 deleteall /test1 delete -v 1 /test1

5. 权限设置

  1. 注册当前会话的账号和密码
addauth digest xiaoming:12345
  1. 创建节点并设置权限
create /test-node abc auth:xiaoming:123456:cdrwa
notion image
另一个窗口,没设置权限,无法获取,可以设置密码权限,可以读到。
notion image
addauth digest xiaoming:12345