【Zookeeper系列】ZK命令基本使用

在了解 ZK 底層原理之前,咱們先簡單了解常用的 ZK 命令硫眯,熟悉常用 ZK 命令有利于排查相關問題或了解基于 ZK 自研系統(tǒng)等場景垫蛆。比如在開發(fā)的時候,發(fā)現(xiàn)有些Dubbo服務無法被調用刹前,這有可能是服務沒有注冊到ZK或者斷開連接;也有可能公司有自研的系統(tǒng)使用 ZK 作為配置中心雌桑,熟悉 ZK 命令就能知道是如何做到服務發(fā)現(xiàn)注冊和配置動態(tài)更新喇喉。

話不多說,咱們先來了解常見的 ZK 命令吧校坑!

命令查找:help

實際上拣技,ZK并沒有help命令,你可以隨意敲一兩個字符也會這樣顯示耍目,只不過基于使用Linux的習慣膏斤,姑且認為輸入help能打印出ZK支持的命令吧。

查找目錄下的節(jié)點:ls

ls [-s] [-w] [-R] path

  • -s:查看節(jié)點狀態(tài)(其效果和stat命令一樣)
  • -w:監(jiān)聽子節(jié)點變化
  • -R:查看所有節(jié)點

ls 命令可以查看指定目錄下的節(jié)點邪驮,使用可選的參數(shù)莫辨,能夠更加詳細的看到節(jié)點的相關信息

查看節(jié)點狀態(tài):stat

stat [-w] path

stat / 等價于 ls -s /

和 ls 命令相似的,加上-w參數(shù)添加監(jiān)聽

添加節(jié)點:create

create [-s] [-e] [-c] [-t ttl] path [data] [acl]

  • -s:有序節(jié)點
  • -e:臨時節(jié)點
  • -c:容器的節(jié)點類型
  • -t ttl:TTL節(jié)點毅访,設置節(jié)點存活時間
  • path:指定要創(chuàng)建節(jié)點的路徑
  • data:節(jié)點存儲的數(shù)據(jù)
  • acl:訪問權限相關沮榜,默認是 world(關于這部分的使用,請繼續(xù)往下關注ACL部分的內容)

在ZK 3.5版本之后喻粹,新增了容器和TTL節(jié)點蟆融,分別是使用 -c-t創(chuàng)建。所以讀者們要注意你當前使用的版本守呜,如果版本低于3.5的型酥,是沒有容器和TTL節(jié)點。

特別說明一下容器節(jié)點和TTL節(jié)點的使用:

容器節(jié)點和持久節(jié)點相似查乒,但區(qū)別是ZK啟動是有單獨線程掃描所有容器節(jié)點弥喉,當發(fā)現(xiàn)容器節(jié)點的子節(jié)點數(shù)量為 0 時,會自動刪除該節(jié)點玛迄。-c 和 -s / -e / -t 參數(shù)都是互斥档桃,不能同時執(zhí)行
TTL節(jié)點實際上就是設置一個有存活時間的節(jié)點,過了存活時間的節(jié)點會自動“消失”憔晒。-t 和 -e 參數(shù)是互斥的藻肄,不能同時執(zhí)行

另外關于 TTL節(jié)點的使用,需要特別注意的是拒担,如果使用默認的配置文件啟動zk嘹屯,想創(chuàng)建有存活時間的節(jié)點,比如執(zhí)行 create -t 10 /test 是會報KeeperErrorCode = Unimplemented for XXX這樣的錯誤从撼。解決辦法是需要在ZK啟動前州弟,先在配置文件加上extendedTypesEnabled=true然后重啟ZK(集群部署的話,所有ZK都需要修改配置文件再重啟)

配置后重啟低零,執(zhí)行 create -t 10 /test 這樣的命令就不會報錯啦

查找節(jié)點:get

get [-s] [-w] path
-s:查看節(jié)點狀態(tài)(其效果和stat命令一樣)
-w:監(jiān)聽子節(jié)點變化

例子:get -s /demo

修改節(jié)點:set

set [-s] [-v version] path data
-s:查看節(jié)點狀態(tài)(其效果和stat命令一樣)
-v version:當前更新操作的版本號婆翔;用于樂觀鎖,每次更新都根據(jù) version 判斷版本

例子:先查詢節(jié)點版本號掏婶,模擬并發(fā)下修改同一節(jié)點

get -s /demo 可知當前 dataVersion = 1

客戶端1:set -v 1 /demo demo-data1

客戶端2:set -v 1 /demo demo-data2

客戶端1比客戶端2先執(zhí)行啃奴,客戶端2再執(zhí)行的話,這時顯示報錯

刪除節(jié)點:delete

delete [-v version] path

-v version:和 set 命令相似雄妥,-v 參數(shù)用于判斷當前操作的版本

例子:先創(chuàng)建一個delNode節(jié)點最蕾,然后刪除

增刪改查節(jié)點權限:getAcl、setAcl

在前面使用create命令的時候老厌,有一個acl參數(shù)是設置節(jié)點權限的瘟则,那么我們應該怎么設置?

舉個例子:create /testAcl demo world:anyone:crwda

這行命令的意思是枝秤,創(chuàng)建 testAcl 這個節(jié)點醋拧,節(jié)點值為demo,其權限策略是所有人都可以執(zhí)行 crwda 操作淀弹。那么接下來丹壕,咱們先看下 ACL 是什么東東?

ACL 全稱是Access Control List垦页,也就是訪問控制列表雀费,ACL可以設置節(jié)點的操作權限。那么控制權限的粒度是怎樣呢痊焊?

對于節(jié)點 ACL 權限控制盏袄,是通過使用:scheme:id:perm 來標識(也就是例子中的格式 -> world:anyone:crwda),其含義是:

  1. 權限模式(Scheme):授權的策略
  2. 授權對象(ID):授權的對象
  3. 權限(Permission):授予的權限

Scheme 有哪些授權策略薄啥?

world:默認方式辕羽,相當于所有人都能訪問
auth:授權的用戶才能訪問
digest:賬號密碼都正確鑒權的用戶才能訪問
ip:指定某ip的才能訪問

ID 授權對象有哪些?

IP:具體的 IP 地址或 IP 段
World:只有“anyOne”這一個Id
Digest:自定義垄惧,格式為 username:BASE64(SHA-1(username:password))

Permission 權限有哪些刁愿?

CREATE: c 可以創(chuàng)建子節(jié)點
DELETE: d 可以刪除子節(jié)點(僅下一級節(jié)點)
READ: r 可以讀取節(jié)點數(shù)據(jù)及顯示子節(jié)點列表
WRITE: w 可以設置節(jié)點數(shù)據(jù)
ADMIN: a 可以設置節(jié)點訪問控制列表權限

根據(jù)上面的參數(shù)可知,我們可以通過給所有人到逊、特定的賬號密碼铣口、特定的 ip 設置節(jié)點權限滤钱,這樣能夠更加方面地管理節(jié)點的訪問。

值得注意的是脑题,節(jié)點可以設置多種授權策略件缸,但對于上下節(jié)點而言,權限的設置只對當前節(jié)點有效叔遂。換言之他炊,權限不存在繼承關系,即使節(jié)點被設置權限已艰,但不會影響上下節(jié)點原來的權限痊末!

上面執(zhí)行了 create /testAcl demo world:anyone:crwda 命令給節(jié)點設置權限,那怎么看節(jié)點的權限咧哩掺?

很簡單凿叠,執(zhí)行getAcl 節(jié)點路徑就可以查看對應節(jié)點的權限,比如 getAcl /testAcl疮丛,執(zhí)行結果如下

[zk: localhost:2181(CONNECTED) 25] getAcl /testAcl
'world,'anyone
: cdrwa

除了在執(zhí)行create命令創(chuàng)建節(jié)點的時候設置權限幔嫂,還可以通過setAcl指定節(jié)點設置權限,比如我想指定/testAcl這個節(jié)點只可以通過特定 IP操作誊薄,并且限制執(zhí)行權限為crdw履恩,那么可以執(zhí)行 setAcl /testAcl ip:127.0.0.1:crwd,再次執(zhí)行 getAcl /testAcl 結果如下:

[zk: localhost:2181(CONNECTED) 27] getAcl /testAcl
'ip,'127.0.0.1
: cdrw

ZK 的命令還有部分沒有演示呢蔫,這并不阻礙咱們學習ZK的原理切心,先掌握常見的命令,如果日后有其他場景的話片吊,再根據(jù)特定的命令學習就可以啦绽昏。

【小彩蛋】下載Zookeeper可視化客戶端

無意中發(fā)現(xiàn)有 Zookeeper的客戶端,感興趣的讀者可以玩一下~ 友情提醒俏脊,可能在節(jié)點數(shù)量很多的時候全谤,打開很慢,甚至卡死爷贫,所以這個可視化工具可以在自己本地玩玩认然,不建議應用在生產(chǎn)上哈。這也側面的說明漫萄,學會 ZK 命令的重要性(認真臉.jpg)

下載鏈接:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

解壓縮后卷员,進入ZooInspector的build目錄,執(zhí)行 java -jar zookeeper-dev-ZooInspector.jar就可以啟動工具腾务。

ZK可視化工具.png

連接上 ZK 后毕骡,就可以看到節(jié)點的信息和節(jié)點的ACL,具體玩法,可以再自己摸索哈~

好了未巫,以上是 ZK 常見命令的基本使用和可視化工具的基本使用窿撬。

參考資料:
《從Paxos到Zookeeper分布式一致性原理與實踐》

如果覺得文章不錯的話,麻煩點個贊哈橱赠,你的鼓勵就是我的動力尤仍!對于文章有哪里不清楚或者有誤的地方,歡迎在評論區(qū)留言~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末狭姨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苏遥,更是在濱河造成了極大的恐慌饼拍,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件田炭,死亡現(xiàn)場離奇詭異师抄,居然都是意外死亡,警方通過查閱死者的電腦和手機教硫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門叨吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞬矩,你說我怎么就攤上這事茶鉴。” “怎么了景用?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵涵叮,是天一觀的道長。 經(jīng)常有香客問我伞插,道長割粮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任媚污,我火速辦了婚禮舀瓢,結果婚禮上,老公的妹妹穿的比我還像新娘耗美。我一直安慰自己京髓,他們只是感情好,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布幽歼。 她就那樣靜靜地躺著朵锣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甸私。 梳的紋絲不亂的頭發(fā)上诚些,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼诬烹。 笑死砸烦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的绞吁。 我是一名探鬼主播幢痘,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼家破!你這毒婦竟也來了颜说?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤汰聋,失蹤者是張志新(化名)和其女友劉穎门粪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烹困,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡玄妈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了髓梅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拟蜻。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枯饿,靈堂內的尸體忽然破棺而出酝锅,到底是詐尸還是另有隱情,我是刑警寧澤鸭你,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布屈张,位于F島的核電站,受9級特大地震影響袱巨,放射性物質發(fā)生泄漏阁谆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一愉老、第九天 我趴在偏房一處隱蔽的房頂上張望场绿。 院中可真熱鬧,春花似錦嫉入、人聲如沸焰盗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熬拒。三九已至,卻和暖如春垫竞,著一層夾襖步出監(jiān)牢的瞬間澎粟,已是汗流浹背蛀序。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留活烙,地道東北人徐裸。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像啸盏,于是被迫代替她去往敵國和親重贺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內容