zookeeper(2)
1. zookeeper客户端操作
新增节点
create [-s] [-e] path data //其中-s 为有序节点,-e 临时节点
创建持久化节点并写入数据:
创建持久化有序节点,此时创建的节点名为指定节点名 + 自增序号:
创建临时节点,临时节点会在会话过期后被删除:
创建临时有序节点,临时节点会在会话过期后被删除:
更新节点
更新节点的命令是 set ,可以直接进行修改,如下:
也可以基于版本号进行更改,此时类似于乐观锁机制,当你传入的数据版本号(dataVersion) 和当前节点的数据版本号不符合时,zookeeper 会拒绝本次修改:
删除节点
删除节点的语法如下:
delete path [version]
rmr path
和更新节点数据一样,也可以传入版本号,当你传入的数据版本号 (dataVersion)和当前节点的数据版本号不符合时,zookeeper 不会执行删除操作。
要想删除某个节点及其所有后代节点,可以使用递归删除,命令为 rmr path
查看节点
get path
节点各个属性如下。其中一个重要的概念是 Zxid(ZooKeeper TransactionId),ZooKeeper 节点的每一次更改都具有唯一的 Zxid,如果 Zxid1 小于 Zxid2,则Zxid1 的更改发生在 Zxid2 更改之前。
- cZxid:数据节点创建时的事务 ID
- ctime:数据节点创建时的时间
- mZxid:数据节点最后一次更新时的事务 ID
- mtime:数据节点最后一次更新时的时间
- pZxid:数据节点的子节点最后一次被修改时的事务 ID
- cversion:子节点的更改次数
- dataVersion:节点数据的更改次数
- aclVersion:节点的 ACL 的更改次数
- ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的
- SessionID:如果节点是持久节点,则该属性值为 0
- dataLength:数据内容的长度
- numChildren:数据节点当前的子节点个数
查看节点状态
可以使用 stat 命令查看节点状态,它的返回值和 get 命令类似,但不会返回节点数据
查看节点列表
查看节点列表有 ls path 和 ls2 path 两个命令,后者是前者的增强,不仅可以查看指定路径下的所有节点,还可以查看当前节点的信息
监听器get path [watch]
使用 get path [watch] 注册的监听器能够在节点内容发生改变的时候,向客户端发出通知。需要注意的是 zookeeper 的触发器是一次性的 (One-time trigger),即触发一次后就会立即失效。
监听器stat path [watch]
使用 stat path [watch] 注册的监听器能够在节点状态发生改变的时候,向客户端发出通知
监听器ls\ls2 path [watch]
使用 ls path [watch] 或 ls2 path [watch] 注册的监听器能够监听该节点下所有子节点的增加和删除操作。
2. zookeeper的acl权限控制
2.1 概述
zookeeper 类似文件系统,client 可以创建节点、更新节点、删除节点,那么如何做到节点的权限的控制呢?zookeeper的access control list 访问控制列表可以做到这一点。
acl 权限控制,使用scheme:id:permission 来标识,主要涵盖 3 个方面:
- 权限模式(scheme):授权的策略
- 授权对象(id):授权的对象
- 权限(permission):授予的权限
其特性如下:
- zooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
- 每个znode支持设置多种权限控制方案和多个权限
- 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
setAcl /test2 ip:192.168.60.130:crwda // 将节点权限设置为Ip:192.168.60.130的客户端可以对节点进行增、删、改、查、管理权限
2.2 权限模式
采用何种方式授权
- world:只有一个用户:anyone,代表登录zokeeper所有人(默认)
- ip:对客户端使用IP地址认证
- auth:使用已添加认证的用户认证
- digest:使用“用户名:密码”方式认证
2.3 授权的对象
给谁授予权限
授权对象ID是指,权限赋予的实体,例如:IP 地址或用户。
2.4 授予的权限
授予什么权限
create、delete、read、writer、admin也就是 增、删、改、查、管理权限,这5种权限简写为cdrwa,注意:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限
- create:c 可以创建子节点
- delete:d 可以删除子节点(仅下一级节点)
- read:r 可以读取节点数据及显示子节点列表
- write:w 可以设置节点数据
- admin:a 可以设置节点访问控制列表权限
2.5 授权的相关命令
- getAcl:读取ACL权限
- setAcl:设置ACL权限
- addauth:添加认证用户
2.6实践
world授权模式:
setAcl <path> world:anyone:<acl>
IP授权模式:
setAcl <path> ip:<ip>:<acl>
Auth授权模式:
addauth digest <user>:<password> #添加认证用户
setAcl <path> auth:<user>:<acl>
另起一个终端访问,就是没有全限的,如下:
然后执行addauth digest itcast:123456就可以正常访问了
Digest授权模式:
setAcl <path> digest:<user>:<password>:<acl>
这里的密码是经过SHA1及BASE64处理的密文,在SHELL中可以通过以下命令计算:
echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
先来计算一个密文
echo -n itheima:123456 | openssl dgst -binary -sha1 | openssl base64
acl 超级管理员
zookeeper的权限管理模式有一种叫做super,该模式提供一个超管可以方便的访问任何权限的节点