以前經過客戶端鏈接以後咱們已經知道了zk相關的不少命令(Zookeeper(1)---初識)。html
節點屬性:app
如今咱們就經過stat指令來看看節點都有哪些屬性,或者使用get 指令和-s參數來查看節點數據以及屬性分佈式
abc 節點數據post
cZxid = 0x5 建立節點的事務ID加密
ctime = Sat Oct 17 15:25:43 CST 2020 建立時間url
mZxid = 0xc 修改節點的事務ID(修改當前節點數據)spa
mtime = Wed Oct 21 22:51:14 CST 2020 最後修改時間翻譯
pZxid = 0x6 子節點變動(增長和刪除,數據修改不會影響該ID)的事務ID3d
cversion = 1 子節點進行的更改(增長和刪除,數據修改不會影響該ID)次數(不包括子節點)htm
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:密鑰 經過sha1與base64組合加密碼生成,可經過如下命令生成
echo -n <用戶名>:<密碼> | openssl dgst -binary -sha1 | openssl base64
注2:爲節點設置digest 權限後,訪問前必須執行addauth,當前會話才能夠防問。
ACL的特殊說明:
權限僅對當前節點有效,不會讓子節點繼承。如限制了IP防問A節點,但不妨礙該IP防問A的子節點