一、節點類型
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 <path> ip:<ip地址|地址段>:<權限位>
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月 ——於南京
——天氣很熱, 繼續努力