前言
ZooKeeper自帶一個交互式命令行工具(通過zkCli.sh
或zkCli.cmd
啟動),提供了一系列操作ZooKeeper數據節點的命令
下面我們對zookeeper常用命令進行介紹
使用prettyZoo命令行窗口
使用prettyZoo客戶端鏈接zookeeper? 打開zookeeper命令行窗口
如果還沒有安裝zookeeper并且沒有prettyZoo客戶端工具的同志,可以看我這篇文章
使用docker安裝Zookeeper-CSDN博客
鏈接zookeeper
打開zookeeper客戶端命令行窗口
zookeeper常見命令
查詢命令
ls 路徑? ? ? ? ? ? ? ? ? ?查看當前路徑下的子節點
get 路徑? ? ? ? ? ? ? ? ?查看當前路徑節點的信息
創建命令
create [-s] [-e]?[-c] [-t 存活時間]?節點c路徑 節點數據?[acl]
-s:? 創建順序節點(路徑后自動追加遞增序號,如 /path-0000000001)
-e:? 創建臨時節點(會話結束自動刪除)會話就是指服務器和zookeeper的長鏈接
-c:? 創建容器節點 容器節點中沒有任何子節點,容器節點會被一分鐘定時刪除,可以存儲數據
-
t:? 創建定時刪除節點,需要到系統配置開啟,不穩定不建議使用
acl:?訪問控制列表
其中,順序節點和臨時節點一般用于構建zookeeper分布式鎖進行使用的
臨時節點實現原理
sessionId是用來維持鏈接會話的
所以通過監控sessionId來確定臨時節點的存在,sessionId結束,臨時節點刪除
就可以實現會話結束臨時節點自動消失的效果了
zookeeper臨時節點實現注冊與發現
服務器注冊到zookeeper上面就是作為客戶端進行會話連接在zookeeper上面創建了一個臨時節點,當這個服務器出現故障下線時候,會話連接會斷開,因為臨時節點是斷開會話自動消失的,所以此時zookeeper上面就沒有這個服務器的注冊信息了,因為注冊的臨時節點自動刪除了
zookeeper構建分布式鎖原理
使用順序臨時節點實現
1、每一個服務器業務請求過來都會創建一個順序序號節點
2、代碼設置最小的節點拿到鎖
3、監聽前面序號節點,前面節點執行完業務之后刪除自己的臨時節點(解鎖),后面那個節點被喚醒開始執行。以此類推可以得到鎖的形式
4、順序節點要使用臨時節點,保證當服務器出現網絡故障的時候鎖自動刪除,其他客戶端重新競爭鎖,防止一直等待那個故障的服務器其他服務器獲取不到鎖導致死鎖
修改命令
set 節點路徑 節點數據?[version]
version:可選版本號 實現樂觀鎖,避免并發覆蓋
zookeeper樂觀鎖實現原理
使用樂觀鎖修改數據分為兩步
查詢出當前數據的版本號
對比當前版本號和獲取版本號是否一樣,一樣修改數據成功,否則失敗
????????這一步是原子操作,zookeeper在代碼中有專一的封裝方法可以調用
刪除命令
delete 節點路徑 [version]
version:可選版本號 實現樂觀鎖,避免并發覆蓋
權限命令
首先,權限是綁定到當前會話的,如果會話失效權限要重新賦予
說是給會話注冊賬號密碼,其實賬號密碼本質就是一個鑒權碼,訪問前驗證一下當前會話鑒權碼是否匹配
權限設置
注冊當前會話的賬號密碼
addauth digest 賬號:密碼
這里賦予好賬號密碼,下面就可以訪問針對這個身份開放權限的節點
創建節點并設置權限
create 節點路徑 節點內容 auth:賬號:密碼:權限字符
權限字符
????????c:create 創建權限,允許在該節點下創建子節點
????????w:write 更新權限,允許更新該節點的數據
????????r:read 讀取權限,允許讀取該節點的內容以及子節點的列表信息
????????d:delete 刪除權限,允許刪除該節點的子節點信息
????????a:admin 管理者權限,允許對該節點進行acl權限設置
權限字符 就是填上面這幾個字母,想賦予多個就連著追加多個字母即可
監聽節點命令
作用: 監聽zookeeper上面某一個節點的變化
get -w 路徑? ? ? ? ? ? ? ? ? ?查詢這個路徑節點的內容,并且在其他會話修改這個路徑節點的時候,當前會話會提示這個節點發生變化,只監聽一次數據變化,創建子節點監聽不到,修改和刪除節點內容可以監聽到
ls -w 路徑? ? ? ? ? ? ? ? ? ? ?監聽這個節點目錄下面子節點的變化(創建刪除),不能監聽節點內容
ls -R -w 路徑? ? ? ? ? ? ? ? 遞歸式的監聽這個節點目錄下的所有目錄的變化(創建刪除),不能監聽節點內容