Zookeeper(2)---節點屬性、監聽和許可權
之前通過客戶端連線之後我們已經知道了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 許可權示例:
- setAcl <path> digest :<使用者名稱>:<金鑰>:<許可權位>
- addauth digest <使用者名稱>:<密碼>
注1:金鑰 通過sha1與base64組合加密碼生成,可通過以下命令生成
echo -n <使用者名稱>:<密碼> | openssl dgst -binary -sha1 | openssl base64
注2:為節點設定digest 許可權後,訪問前必須執行addauth,當前會話才可以防問。
ACL的特殊說明:
許可權僅對當前節點有效,不會讓子節點繼承。如限制了IP防問A節點,但不妨礙該IP防問A的子