zookeeper节点类型、常用命令及ACL管理权限

尤飞尘
2023-12-01

zk节点和节点类型

节点类型:

1、PERSISTENT--持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后, 该节点被删除,临时节点不可以创建子节点
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

常用命令: 

客户端链接:

保证集群启动
使用zkCli.sh默认链接本机
zkCli.sh
close 关闭会话
quit 退出 或者直接使用quit
或者使用 zkCli -server ip或者主机名:端口号 链接相应服务器
zkCli.sh -server 192.168.23.11:2181
zkCli.sh -server cluster3:2181
或者是在zk命令行: connect ip地址或者主机名称:端口号, 链接相应服务器
[zk: 192.168.23.12:2181(CONNECTED) 0] connect 192.168.170.42:2181
connect cluster3:2181
quit 退出

常用命令:

 help 帮助命令,会显示所有zk的命令

ls 存储路径 查看路径下的信息(路径必须是绝对路径)
ls path
close 关闭与服务端的链接
close
quit 退出
create [-s] [-e] path [data] [acl]
-s 创建有序节点
-e 创建临时节点
不加参数表示创建持久化不带序号的节点
data 节点内容
acl(access control list) 访问控制权限
创建持久节点
create /frame 'frame'
create /frame/spring 'spring'
ls /frame
close
quit
zkCli.sh 再次连接,发现会话ID发生变化,说明不是一次会话
ls /
ls /frame 断开会话后持久化节点依然存在

 创建持久有序节点

create -s /frame/spring/ioc 'ioc1'

create -s /frame/spring/ioc 'ioc2'

create -s /frame/spring/ioc 'ioc3'
ls /frame/spring 发现3个持久有序节点
quit 退出
zkCli.sh 再次连接,发现会话ID发生变化,说明不是一次会话
ls /frame/spring 发现3个持久有序节点依然存在
create /frame/spring/ioc0000000000/ioccontainer 'iocc' 在持久有序节点下还可以创建
子节点
ls /frame/spring/ioc0000000000
总结: 只要持久节点,都可以有子节点

 创建临时节点:create -e 路径 “字符串信息” (-e是创建短暂节点)

create -e /frame/spring/aop 'aop'
ls /frame/spring/aop 发现 ephemeralOwner 就是依赖当前会话ID
ls /
ls /frame 发现持久节点 ephemeralOwner 都是0x0
create /frame/spring/aop/cglibproxy 'cglibproxy' create -e /frame/spring/aop/cglibproxy 'cglibproxy' 都错误 临时节点不能有子节点

 创建 临时有序节点

create -e -s /frame/spring/mvc 'mvc1'
create -e -s /frame/spring/mvc 'mvc2'
create -e -s /frame/spring/mvc 'mvc3'
ls /frame/spring
create -e -s /frame/spring/mvc0000000005/ds 'DespatcherServlet'
ls -s /frame/spring/mvc0000000005 发现 ephemeralOwner 就是依赖当前会话ID
quit
zkCli.sh
ls /frame/spring/ 退出quit当前节点,再次链接zkCli.sh查看,发现临时节点不存在

 总结: 只要是临时节点,都不可以有孩子

在zk1查看节点 get 路径 [watch] 获取数据时,启动监听,监听数据(只生效一次)
[zk: localhost:2181(CONNECTED) 18] get /aaa watch
在zk2在另一链接上:
[zk: localhost:2181(CONNECTED) 0] set /aaa 11
get path
查看节点数据 -s 包含节点状态 -w 添加监听
get /frame/spring
set /frame/spring 'spirng1'
get /frame/spring
set /frame/spring 'spirng111'
get /frame/spring
create /frame/spring/boot 'boot'
get /frame/spring
delete /frame/spring/boot
get /frame/spring
在另外一个会话中,改变/frame/spring的内容 set /frame/spring 'spirng4'
set /frame/spring 'spirng5'
zxid:节点创建时的zxid
ctime:节点创建时间
mZxid:节点最近一次更新时的zxid
mtime:节点最近一次更新的时间
pZxid: 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子
节点列表,但是修改子节点的数据内容则不影响该ID
cversion:子节点更新次数
dataVersion:本节点数据更新次数
aclVersion:节点ACL(授权信息)的更新次数
ephemeralOwner:如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session
id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength:节点数据长度,本例中为hello world的长度
numChildren:子节点个数
set 更新节点内容:
set /frame/spring 'spring1' 更新节点内容
delete [-v version] path 删除单个节点
删除节点,(不能存在子节点)
delete /frame/spring/mvc0000000008
create /frame/spring/boot 'boot'
create /frame/spring/boot/sarun 'SpringApplicationrun'
delete /frame/spring/boot 错误
rmr path 删除有子节点的路经
rmr /frame/spring

 stat查看节点的状态

stat /frame/spring

 ACL权限控制:

 ACL:Access Control List 访问控制列表

相关命令:
getAcl 获取某个节点的acl权限信息
setAcl 设置某个节点的acl权限信息
addauth 输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是
以加密后的形式存在的
特性:
ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
每个znode支持设置多种权限控制方案和多个权限
子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点

 授权格式:

授权策略:授权对象: 权限
scheme: id: Permission
Scheme:(计划)授权的策略 包含下面:
world:默认方式,相当于全部都能访问 代表所有人
ip:使用客户端的主机IP作为ACL ID 。这个ACL表达式的格式为addr/bits ,此时
addr中的有效位与客户端addr中的有效位进行比对。
auth:使用已添加认证的用户认证(cli中可以通过addauth digest user:pwd 来添加当前
上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的。用
username:password 字符串来产生一个MD5串,然后该串被用来作为ACL ID。认证是通过
明文发送username:password 来进行的,当用在ACL时,表达式为username:base64 ,
base64是password的SHA1摘要的编码。

 

ID:授权的对象
权限赋予的用户或者一个实体,例如:IP 地址 或者是用户(授权) 或者是
anyone
Permission:授予的权限 CRWDA
zookeeper支持的权限
CREATE(c): 创建权限,可以在在当前node下创建child node
READ(r): 读权限,可以获内容及子节点
WRITE(w): 写权限,可以向当前node写数据
DELETE(d): 删除权限, 可以删除当前的child nodes
ADMIN(a): 管理权限,可以设置当前node的permission
 类似资料: