一、节点类型
persistent 持久节点
persistent_sequential 持久序号节点
ephemeral 临时节点
ephemeral_sequential 临时序号节点
1.persistent 持久节点
默认创建的节点
创建方式
create /newNode
2.persistent_sequential 持久序号节点
给创建的持久节点后面加上序号后缀。 非常适用于分布式锁、分布式选举等场景
创建的时候添加-s参数即可
create -s /test
#返回创建的实际路径
created /test0000000001
create -s /test
#返回创建的实际路径2
created /test0000000002
3.ephemeral 临时节点
临时节点会在客户端会话断开后自动删除。适用于心跳,服务发现等场景
创建的时候加上参数 -e 即可
create -e /temp
4.ephemeral_sequential 临时序号节点
与持久序号节点类似,不同之处是临时序号节点会在会话断开后删除。
创建的时候加上参数 -e -s 即可
create -e -s /tempNum
二、节点属性
节点属性的查看方式 stat /nodePath
节点属性说明
===============================================================
cZxid 创建节点的事务ID
ctime 创建时间
mZxid 修改节点的事务ID
mtime 最后修改时间
pZxid 子节点变更事务ID
cversion 对此znode的子节点进行的更改次数(不包括子节点)
dataVersion 数据版本,变更次数
aclVersion 权限版本,变更次数
ephemeralOwner 临时节点所属会话ID
dataLength 数据长度
numChildren 子节点数
===============================================================
三、节点的监听
客户添加 -w 参数可以实时监听节点和子节点的变化,并且实时收到通知。非常适用于保障分布式情况下的数据一致性。
===============================================================
ls -w path 监听子节点的变化(增、删)
===============================================================
get -w path 接听节点数据的变化
===============================================================
stat -w path 监听节点属性的变化
===============================================================
printwatches on|off 触发监听后,是否打印监听事件(默认on)
===============================================================
四、acl权限设置
ACL全称 access control list(访问控制列表) 用于控制资源的访问权限
zk使用ACL来控制对其znode的访问
基于scheme:id:permission的方式进行权限控制
scheme: 表示授权模式
id: 模式对应值
permission: 具体的正删改权限位
scheme
================================================================
world 开发模式,全世界都可以访问 默认的设置
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 path 获取ACL权限
setAcl setAcl path acl 设置ACL权限
addauth addauth scheme auth 添加认证用户
================================================================
world权限示例
setAcl path world:anyone:权限位
[zk: localhost:2181(CONNECTED) 17] create -e /testAcl
Created /testAcl
[zk: localhost:2181(CONNECTED) 18] getAcl /testAcl
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 19] setAcl /testAcl world:anyone:rw
[zk: localhost:2181(CONNECTED) 20]
[zk: localhost:2181(CONNECTED) 20] get /testAcl
null
[zk: localhost:2181(CONNECTED) 21] getAcl /testAcl
'world,'anyone
: rw
[zk: localhost:2181(CONNECTED) 22] create /testAcl/sa
Authentication is not valid : /testAcl/sa
[zk: localhost:2181(CONNECTED) 23]
[zk: localhost:2181(CONNECTED) 23]
IP权限示例
setAcl
auth模式示例:
语法:
1.setAcl path auth:用户名:密码:权限位
2.addauth digest 用户名:密码
digest权限示例:
语法:
1.setAcl path digest:用户名:密钥:权限位
2.addauth digest 用户名:密码
ACL特殊说明:
权限仅对当前节点有效,不会让子节点继承。如果限制了IP访问A节点,但是不妨碍该IP访问A节点的子节点/A/B
2020 6月 ——于南京
——天气很热, 继续努力