zookeeper节点的监听
-
ls -w path : 监听子节点的的变化(增,删)
/ 下有一个/course节点,现在监听这个/course节点
增加一个/course的子节点 /course/Java。
现在删除这个/course/Java节点,看会不会监听到:
可以看到并没有监听到子节点的删除,原因是监听是一次性的,设置对这个节点的监听只能监听一次,想要永久的监听,就要不断的设置监听。 -
get -w path 监听节点数据的变化
现在/course节点的数据为:课程
对该节点设置监听
修改该节点数据:
同样监听只生效一次。 -
stat -w path 监听节点属性的变化
该监听也只能监听本节点数据的变化,与get -w path 一样,不能监听到子节点的增加或删除。 -
printwatches on|off 触发监听后,是否打印监听事件(默认on)
acl权限设置
ACL全称为Access Control List(访问控制列表),用于控制资源的访问权限。ZooKeeper使用ACL来控制对其znode的防问。基于scheme : id : permission的方式进行权限控制。scheme表示授权模式、id模式对应值、permission即具体的增删改权限位。
scheme:认证模型
描述 | 方案 |
---|---|
world | 开放模式,world表示全世界都可以访问(这是默认设置 ) id:anyone |
ip | ip模式,限定客户端IP防问 |
auth | 用户密码认证模式,只有在会话中添加了认证才可以防问 |
digest | 与auth类似,区别在于auth用明文密码,而digest 用sha-1+base64加密后的密码。在实际使用中digest 更常见。 |
permission权限位
权限位 | 权限 | 描述 |
---|---|---|
c | CREATE | 可以创建子节点 |
d | DELETE | 可以删除子节点(仅下一级节点) |
r | READ | 可以读取节点数据及显示子节点列表 |
w | WRITE | 可以设置节点数据 |
a | ADMIN | 可以设置节点访问控制列表权限 |
acl 相关命令
命令 | 使用方式 | 描述 |
---|---|---|
getAcl | getAcl
|
读取ACL权限 |
setAcl | setAcl
|
设置ACL权限 |
addauth | addauth | 添加认证用户 |
word权限示例
语法: setAcl
当前/course节点的权限为cdrwa.
修改/course权限为rwa
现在节点/course对任何用户的权限是可读该节点数据,可写该节点数据,可设置该节点访问权限,不能删除和增加子节点。
尝试增加子节点:
· 修改数据成功
digest权限示例:
语法1:setAcl
语法2:addauth digest <用户名>:<密码>
- 通过sha1与base64组合生成密码,可通过以下命令生成:
echo -n <用户名>:<密码> | openssl dgst -binary -sha1 | openssl base64
定义用户名密码为:zhangsan , 123456,返回密钥
设置digest权限:
设置成功,该节点只没有设置该节点权限的权力,
给当前会话添加权限帐户:addauth digest zhangsan:123456 ,才能操作该节点
增加和删除一个节点,设置和查询数值:
将权限修改为cdrwa:
没有权限修改,第一次权限修改最好保留a权限,有a权限可以修改为原来的模式和权限
auth模式示例
语法:
- setAcl
auth:<用户名>:<密码>:<权限位> - addauth digest <用户名>:<密码>
auth 与diges模式差不多,只不过auth模式的密码是明文
IP权限示例:
语法: setAcl
ACL的特殊说明:
权限仅对当前节点有效,不会让子节点继承。如限制了IP防问A节点,但不妨碍该IP防问A的子节点 /A/B。