Zookeeper(2)---節點屬性、監聽和許可權

白露非霜發表於2020-10-26

之前通過客戶端連線之後我們已經知道了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的子節點

相關文章