Zookeeper(2)---節點屬性、監聽和權限 Zookeeper(1)---初識

之前通過客戶端連接之後我們已經知道了zk相關的很多命令(Zookeeper(1)---初識)。

節點屬性

現在我們就通過stat指令來看看節點都有哪些屬性,或者使用get 指令和-s參數來查看節點數據以及屬性

 

abc  節點數據

cZxid = 0x5 創建節點的事務ID

ctime = Sat Oct 17 15:25:43 CST 2020   創建時間

mZxid = 0xc 修改節點的事務ID(修改當前節點數據)

mtime = Wed Oct 21 22:51:14 CST 2020  最後修改時間

pZxid = 0x6 子節點變更(增加和刪除,數據修改不會影響該ID)的事務ID

cversion = 1 子節點進行的更改(增加和刪除,數據修改不會影響該ID次數(不包括子節點)

dataVersion = 1  數據版本

aclVersion = 0 權限變化版本 access control list

ephemeralOwner = 0x0  字面翻譯臨時節點擁有者,持久節點值爲0,非持久節點不爲0(會話ID

dataLength = 3  數據長度

numChildren = 1 子節點數量(不包括子子節點)

監聽:

我們可以通過-w參數對一些節點設置監聽,適用於分佈式保障數據一致性的場景。多個服務同時監聽一個節點,當這個節點發生對應的變化時,就會通知到監聽了該節點的所有服務。

比如之前說的配置信息發生變化,每個服務獲取到變更信息之後進行變更,而不需要一個一個服務的去操作。

 

ls -w 監聽子節點的變化(增,刪)

get -w 監聽節點數據的變化

stat -w 監聽節點屬性的變化

printwatches on|off 觸發監聽後,是否打印監聽事件(默認on)

 

現在我們開啓兩個客戶端來看看上面的這些監聽操作

1.數據變化監聽 get -w

客戶端添加監聽

 

客戶端2修改數據

 

客戶端1監聽到數據變化

 

可以看到監聽的了數據變化

如果我們再次修改數據,會發現無法再次監聽到變化了。因爲這個監聽是一次性的,只會出發一次,如果還需要監聽需要重新設置監聽

2.節點變化(增、刪)ls -w

這個監聽可以用於服務心跳維護或者服務註冊。監聽一個持久節點,每個服務上線的時候在該持久節點下面,新增一個臨時(序號)節點,date可以存放ip信息和端口。當某個服務宕機的時候,該節點的子節點變化就會被監聽到了。

客戶端1監聽

客戶端2新增節點

客戶端1監聽到節點變化

 

 

3.監聽屬性變化 stat -w

這個監聽相當於就是前面兩個監聽的彙總,數據修改,子節點變更都會涉及到屬性變化

權限設置:

Access Control List(訪問控制列表),用於控制節點的訪問操作權限

基於scheme:id:permission的方式進行權限控制。scheme表示授權模式、id模式對應值、permission即具體的增刪改權限位。

scheme:認證模型

world   開放模式, world表示全世界都可以訪問(這是默認設置)

ip        ip模式,  限定客戶端IP防問

auth     用戶密碼認證模式,只有在會話中添加了認證纔可以防問

digest    auth類似,區別在於auth用明文密碼,而digest 用sha-1+base64加密後的密碼

 

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> 添加認證用戶(addauth digest <用戶名>:<密碼>)

開放模式:只有一個值anyone, 未設置寫權限,無法寫入數據:

Ip模式:

setAcl /apps ip:127.0.0.1:ra

setAcl /apps ip:127.0.0.1/101:ra 網段設置

digest 權限示例:

  1. setAcl <path> digest :<用戶名>:<密鑰>:<權限位>
  2. addauth digest <用戶名>:<密碼>

1:密鑰 通過sha1與base64組合加密碼生成,可通過以下命令生成

echo -n <用戶名>:<密碼> | openssl dgst -binary -sha1 | openssl base64

2:爲節點設置digest 權限後,訪問前必須執行addauth,當前會話纔可以防問。

 

ACL的特殊說明:

權限僅對當前節點有效,不會讓子節點繼承。如限制了IP防問A節點,但不妨礙該IP防問A的子節點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章