A. linux如何查看zookeeper是否啟動
1、首先需要登陸你的linux伺服器,用cd 命令切換到/etc/rc.d/init.d/目錄下。
B. 【Zookeeper系列】ZK命令基本使用
在了解 ZK 底層原理之前,咱們先簡單了解常用的 ZK 命令,熟悉常用 ZK 命令有利於排查相關問題或了解基於 ZK 自研系統等場景。比如在開發的時候,發現有些Dubbo服務無法被調用,這有可能是服務沒有注冊到ZK或者斷開連接;也有可能公司有自研的系統使用 ZK 作為配置中心,熟悉 ZK 命令就能知道是如何做到服務發現注冊和配置動態更新。
話不多說,咱們先來了解常見的 ZK 命令吧!
實際上,ZK並沒有help命令,你可以隨意敲一兩個字元也會這樣顯示,只不過基於使用Linux的習慣,姑且認為輸入help能列印出ZK支持的命令吧。
ls 命令可以查看指定目錄下的節點,使用可選的參數,能夠更加詳細的看到節點的相關信息
stat / 等價於 ls -s /
和 ls 命令相似的,加上-w參數添加監聽
在ZK 3.5版本之後,新增了容器和TTL節點,分別是使用 -c 和 -t 創建。所以讀者們要注意你當前使用的版本,如果版本低於3.5的,是沒有容器和TTL節點。
特別說明一下容器節點和TTL節點的使用:
另外關於 TTL節點 的使用,需要特別注意的是,如果使用默認的配置文件啟動zk,想創建有存活時間的節點,比如執行 create -t 10 /test 是會報 KeeperErrorCode = Unimplemented for XXX 這樣的錯誤。解決辦法是需要在ZK啟動前,先在配置文件加上 extendedTypesEnabled=true 然後重啟ZK(集群部署的話,所有ZK都需要修改配置文件再重啟)
配置後重啟,執行 create -t 10 /test 這樣的命令就不會報錯啦
例子:get -s /demo
例子:先查詢節點版本號,模擬並發下修改同一節點
get -s /demo 可知當前 dataVersion = 1
客戶端1:set -v 1 /demo demo-data1
客戶端2:set -v 1 /demo demo-data2
客戶端1比客戶端2先執行,客戶端2再執行的話,這時顯示報錯
-v version:和 set 命令相似,-v 參數用於判斷當前操作的版本
例子:先創建一個delNode節點,然後刪除
在前面使用create命令的時候,有一個acl參數是設置節點許可權的,那麼我們應該怎麼設置?
舉個例子: create /testAcl demo world:anyone:crwda
這行命令的意思是,創建 testAcl 這個節點,節點值為demo,其許可權策略是所有人都可以執行 crwda 操作。那麼接下來,咱們先看下 ACL 是什麼東東?
ACL 全稱是 Access Control List ,也就是訪問控制列表,ACL可以設置節點的操作許可權。那麼控制許可權的粒度是怎樣呢?
對於節點 ACL 許可權控制,是通過使用: scheme:id:perm 來標識(也就是例子中的格式 -> world:anyone:crwda),其含義是:
Scheme 有哪些授權策略?
ID 授權對象有哪些?
Permission 許可權有哪些?
根據上面的參數可知,我們可以通過給所有人、特定的賬號密碼、特定的 ip 設置節點許可權,這樣能夠更加方面地管理節點的訪問。
值得注意的是,節點可以設置多種授權策略,但對於上下節點而言,許可權的設置只對當前節點有效。換言之,許可權不存在繼承關系,即使節點被設置許可權,但不會影響上下節點原來的許可權!
上面執行了 create /testAcl demo world:anyone:crwda 命令給節點設置許可權,那怎麼看節點的許可權咧?
很簡單,執行 getAcl 節點路徑 就可以查看對應節點的許可權,比如 getAcl /testAcl,執行結果如下
除了在執行create命令創建節點的時候設置許可權,還可以通過 setAcl 指定節點設置許可權,比如我想指定/testAcl這個節點只可以通過特定 IP操作,並且限制執行許可權為crdw,那麼可以執行 setAcl /testAcl ip:127.0.0.1:crwd ,再次執行 getAcl /testAcl 結果如下:
ZK 的命令還有部分沒有演示,這並不阻礙咱們學習ZK的原理,先掌握常見的命令,如果日後有其他場景的話,再根據特定的命令學習就可以啦。
無意中發現有 Zookeeper的客戶端,感興趣的讀者可以玩一下~ 友情提醒,可能在節點數量很多的時候,打開很慢,甚至卡死,所以這個可視化工具可以在自己本地玩玩,不建議應用在生產上哈。這也側面的說明,學會 ZK 命令的重要性(認真臉.jpg)
解壓縮後,進入ZooInspector的build目錄,執行 java -jar zookeeper-dev-ZooInspector.jar 就可以啟動工具。
連接上 ZK 後,就可以看到節點的信息和節點的ACL,具體玩法,可以再自己摸索哈~
好了,以上是 ZK 常見命令的基本使用和可視化工具的基本使用。
參考資料:
《從Paxos到Zookeeper分布式一致性原理與實踐》
如果覺得文章不錯的話,麻煩點個贊哈,你的鼓勵就是我的動力!對於文章有哪裡不清楚或者有誤的地方,歡迎在評論區留言~
C. 如何啟動zookeeper-3.3.6
如何啟動zookeeper-3.3.6?
啟動zookeeper-3.3.6的方法:下載安裝配置zookeeper的伺服器環境-創建文件-設置許可權-編輯-重啟即可。
具體步驟:
一、登陸linux伺服器用cd 命令切換到/etc/rc.d/init.d/目錄下。
十、重啟即可。
D. Zookeeper常用命令
ZooKeeper服務命令:
在准備好相應的配置之後,可以直接通過zkServer.sh 這個腳本進行服務的相關操作
1. 啟動ZK服務: sh bin/zkServer.sh start
2. 查看ZK服務狀態: sh bin/zkServer.sh status
3. 停止ZK服務: sh bin/zkServer.sh stop
4. 重啟ZK服務: sh bin/zkServer.sh restart
zk客戶端命令
ZooKeeper命令行工具類似於Linux的shell環境,不過功能肯定不及shell啦,但是使用它我們可以簡單的對ZooKeeper進行訪問,數據創建,數據修改等操作. 使用 zkCli.sh -server 127.0.0.1:2181 連接到 ZooKeeper 服務,連接成功後,系統會輸出 ZooKeeper 的相關環境以及配置信息。
命令行工具的一些簡單操作如下:
1. 顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容
2. 顯示根目錄下、文件: ls2 / 查看當前節點數據並能看到更新次數等數據
3. 創建文件,並設置初始內容: create /zk "test" 創建一個新的 znode節點「 zk 」以及與它關聯的字元串
4. 獲取文件內容: get /zk 確認 znode 是否包含我們所創建的字元串
5. 修改文件內容: set /zk "zkbak" 對 zk 所關聯的字元串進行設置
6. 刪除文件: delete /zk 將剛才創建的 znode 刪除
7. 退出客戶端: quit
8. 幫助命令: help
9rmr命令
刪除節點命令,此命令與delete命令不同的是delete不可刪除有子節點的節點,但是rmr命令可以刪除,注意路徑為絕對路徑。
如rmr /zookeeper/znode
10 delquota命令
刪除配額,-n為子節點個數,-b為節點數據長度。
如delquota –n 2,請參見listquota和setquota命令。
11printwatches命令
設置和顯示監視狀態,on或者off。
如printwatches on
listquota命令
顯示配額。
如listquota /zookeeper
absolute path is/zookeeper/quota/zookeeper/zookeeper_limits
Output quota for /zookeepercount=2,bytes=-1
解釋:
/zookeeper節點個數限額為2,長度無限額。
setAcl命令
設置節點Acl。
此處重點說一下acl,acl由大部分組成:1為scheme,2為user,3為permission,一般情況下表示為scheme:id:permissions。
其中scheme和id是相關的,下面將scheme和id一起說明。
scheme和id
world : 它下面只有一個id, 叫anyone, world:anyone代表任何人,zookeeper中對所有人有許可權的結點就是屬於world:anyone的
auth : 它不需要id, 只要是通過authentication的user都有許可權(zookeeper支持通過kerberos來進行authencation, 也支持username/password形式的authentication)
digest : 它對應的id為username:BASE64(SHA1(password)),它需要先通過username:password形式的authentication
ip : 它對應的id為客戶機的IP地址,設置的時候可以設置一個ip段,比如ip:192.168.1.0/16, 表示匹配前16個bit的IP段
super : 在這種scheme情況下,對應的id擁有超級許可權,可以做任何事情(cdrwa)
permissions
CREATE (c): 創建許可權,可以在在當前node下創建child node
DELETE (d): 刪除許可權,可以刪除當前的node
READ (r): 讀許可權,可以獲取當前node的數據,可以list當前node所有的child nodes
WRITE (w): 寫許可權,可以向當前node寫數據
ADMIN (a): 管理許可權,可以設置當前node的permission
綜上,一個簡單使用setAcl命令,則可以為:
setAcl /zookeeper/node1 world:anyone:cdrw
getAcl命令
獲取節點Acl。
如getAcl /zookeeper/node1
'world,'anyone
: cdrwa
註:可參見setAcl命令。
sync命令
強制同步。
如sync /zookeeper
由於請求在半數以上的zk server上生效就表示此請求生效,那麼就會有一些zk server上的數據是舊的。sync命令就是強制同步所有的更新操作。
redo命令
再次執行某命令。
如redo 10
其中10為命令ID,需與history配合使用。
addauth命令
節點認證。
如addauth digest username:password,可參見setAcl命令 digest處。
使用方法:
一、通過setAcl設置用戶名和密碼
setAcl pathdigest:username:base64(sha1(password)):crwda
二、認證
addauth digest username:password
delete命令
刪除節點。
如delete /zknode1
setquota命令
設置子節點個數和數據長度配額。
如setquota –n 4 /zookeeper/node 設置/zookeeper/node子節點個數最大為4
setquota –b 100 /zookeeper/node 設置/zookeeper/node節點長度最大為100
ZooKeeper 常用四字命令:
ZooKeeper 支持某些特定的四字命令字母與其的交互。它們大多是查詢命令,用來獲取 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端可以通過 telnet 或 nc 向 ZooKeeper 提交相應的命令
1. 可以通過命令:echo stat|nc 127.0.0.1 2181 來查看哪個節點被選擇作為follower或者leader
2. 使用echo ruok|nc 127.0.0.1 2181 測試是否啟動了該Server,若回復imok表示已經啟動。
3. echo mp| nc 127.0.0.1 2181 ,列出未經處理的會話和臨時節點。
4. echo kill | nc 127.0.0.1 2181 ,關掉server
5. echo conf | nc 127.0.0.1 2181 ,輸出相關服務配置的詳細信息。
6. echo cons | nc 127.0.0.1 2181 ,列出所有連接到伺服器的客戶端的完全的連接 / 會話的詳細信息。
7. echo envi |nc 127.0.0.1 2181 ,輸出關於服務環境的詳細信息(區別於 conf 命令)。
8. echo reqs | nc 127.0.0.1 2181 ,列出未經處理的請求。
9. echo wchs | nc 127.0.0.1 2181 ,列出伺服器 watch 的詳細信息。
10. echo wchc | nc 127.0.0.1 2181 ,通過 session 列出伺服器 watch 的詳細信息,它的輸出是一個與 watch 相關的會話的列表。
11. echo wchp | nc 127.0.0.1 2181 ,通過路徑列出伺服器 watch 的詳細信息。它輸出一個與 session 相關的路徑。