- 在源碼包的bin/目錄下包含一系列的腳本,其中:
- .sh:在Linux系統下使用的腳本工具(本文介紹的)
- .cmd:在Windows系統下使用的腳本工具
一、zkServer.sh
- 功能:用來操作zooKeeper服務器的
- 參數如下:
--config
- 說明:在啓動服務器時通過該參數來指定配置文件
- 備註:
- 這個參數指定的是路徑,而非文件
- 配置文件名稱必須爲zoo.cfg,其他配置文件名不能接受
- 並且路徑不能以/結尾,例如配置文件爲/etc/zoo.cfg,那麼傳遞時參數必須爲“/etc”而不能是“/etc/”
- 如果沒有指定該參數,那麼默認會在./conf目錄下查找一個名爲zoo.cfg的配置文件
- 演示案例:
./bin/zkServer.sh --config ./conf start
start
- 說明:用來啓動服務器
- 備註:
- 該參數啓動的服務器是以守護進程方式運行的
- 啓動時默認端口爲2181
- 演示案例:
./bin/zkServer.sh --config ./conf start
start-foreground
- 說明:用來啓動服務器,與start的區別是其啓動的服務器是在前臺運行的,因此信息都會輸出到前臺
- 演示案例:
# 停止服務器 ./bin/zkServer.sh --config ./conf stop # 在前臺啓動服務器 ./bin/zkServer.sh --config ./conf start-foreground
restart
- 說明:重啓服務器
- 演示案例:
./bin/zkServer.sh restart
stop
- 說明:用來停止服務器
- 演示案例:
./bin/zkServer.sh --config ./conf stop
version
- 說明:顯示服務器的版本
- 演示案例:
./bin/zkServer.sh version
status
- 說明:顯示服務器的狀態、模式和角色
- 演示案例:
./bin/zkServer.sh status
print-cmd
- 說明:打印服務器的啓動參數
- 演示案例:
./bin/zkServer.sh print-cmd
二、zkCli.sh
- ZooKeeper客戶端工具
-timeout
- 功能:連接服務器的超時時間,單位爲毫秒
- 例如:連接服務器,超時等待時間爲3秒
./bin/zkCli.sh -timeout 3000
-server
- 功能:指定要連接服務器
- 例如:連接服務器的地址爲127.0.0.1:2181
./bin/zkCli.sh -server 127.0.0.1:2181
-client-configuration
- 功能:指定連接服務器時使用的配置文件
- 例如:連接服務器的地址爲127.0.0.1:2181
./bin/zkCli.sh -client-configuration /path/to/client.properties
連接信息分析
- 當我們連接到服務端的時候會有一些詳細的信息輸出,我們來分析一下:
- ①客戶端啓動程序來建立一個會話
- ②客戶端嘗試連接到localhost/127.0.0.1:2181
- ③客戶端連接成功,服務器開始初始化這個會話
- ④會話初始化完成,會話ID爲0x10007b4f27d0000
- ⑤服務器向客戶端發送一個SyncConnected事件
查看命令列表
- 輸入任意錯誤的命令即可查看命令列表
close
- 功能:關閉當前客戶端/會話與服務端的連接
- 關閉之後還可以再次進行連接
- 演示案例:
close
quit
- 功能:退出當前客戶端
- 演示案例:
quit
connect
- 功能:關閉當前客戶端/會話
- 格式:
connect host:port
- 備註:
- 如果當前會話已斷開(調用了close),可以使用這個命令連接到服務器
- 如果當前會話未斷開,可以調用這個命令來切換連接到其他服務節點
- 演示案例,接着上面的演示案例,我們重新去連接
connect 127.0.0.1:2181
config
- 功能:關閉當前客戶端/會話
- 格式:
config [-c] [-w] [-s]
- 演示案例:
version
- 功能:顯示zookeeper客戶端的版本
- 演示案例:
version
create
- 功能:用來創建一個znode節點
- 格式:
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
- 參數:
- 默認情況下,忽略任何參數時:創建的是持久性節點
- -s:創建持久有序節點
- -e:創建臨時節點
- -s -e組合:創建臨時有序節點
- -c:創建容器節點。當容器的最後一個子容器被刪除時,該容器將被刪除
- -t :創建ttl node節點,節點在ttl時間之後會自動刪除,時間單位爲毫秒
- path:創建節點的路徑
- data:創建節點時給節點指定的數據(可選)
- acl:acl規則
- 演示案例:創建持久性節點
create /persistent_node "persistent_node"
- 演示案例:創建持久有序節點
create -s /test_node "HelloWorld"
- 演示案例:創建臨時節點
create -e /tempnode "tempnode"
- 演示案例:創建臨時有序節點
create -s -e /ephemeral-sequential_node "ephemeral-sequential_node"
- 演示案例:創建容器節點。當容器的最後一個子容器被刪除時,該容器將被刪除
create -c /container_node "container_node"
- 演示案例:創建ttl節點,ttl時間爲5秒
# 創建ttl節點,ttl時間爲5秒 create -t 5000 /ttl_node "ttl_node" # 5秒之內查看 get /ttl_node # 5秒之後查看 get /ttl_node
delete
- 功能:用刪除一個znode節點
- 格式:
delete [-v version] path
- 選項:
- -v:指定一個版本,當且僅當節點的版本號與version相等時才刪除
- 演示案例:將上面我們創建的節點全部刪除
deleteall
- 功能:刪除特定路徑下的所有節點
- 格式:
deleteall path [-b batch size]
get
- 功能:獲取特定路徑的數據
- 格式:
get [-s] [-w] path
- 參數:
- -s:查看節點的狀態信息
- -w:監視(watch)節點上數據的變化。備註:要將printwatches設置爲on纔可以使用
- 演示案例:默認情況下,輸出節點的數據
create /latest_producer_id_block "latest_producer_id_block" get /latest_producer_id_block create /test_node get /test_node
- 演示案例:查看節點的狀態信息
get -s /latest_producer_id_block
- 演示案例:監視(watch)節點上數據的變化
printwatches on # 添加監視 get -w /latest_producer_id_block # 刪除該節點時,會有信息輸出 delete /latest_producer_id_block
getAllChildrenNumber
- 功能:獲取特定路徑下的所有子節點數
- 格式:
getAllChildrenNumber path
- 演示案例:
getEphemerals
- 功能:獲取此會話創建的所有臨時節點
- 格式:
getEphemerals path
- 演示案例:
# 創建一個臨時節點 create -e /temporary_node getEphemerals
history
- 功能:顯示您最近執行的11個命令的歷史
- 當前會話結束之後,歷史全部消失
- 演示案例:
history
addWatch
- 功能:對一個節點添加監視
- 格式:
addWatch [-m mode] path
- 選項:
- -m:可選的值有PERSISTENT,PERSISTENT_RECURSIVE。默認爲PERSISTENT_RECURSIVE
removewatches
- 功能:刪除節點下的監視
- 格式:
removewatches path [-c|-d|-a] [-l]
- 演示案例:
create /test_node get -w /test_node removewatches /test_node
listquota
- 功能:列出一個路徑的配額
- 格式:
listquota path
- 演示案例:
listquota /zookeeper
delquota
- 功能:刪除路徑下的配額
- 格式:
delquota [-n|-b] path
setquota
- 功能:在一個路徑中設置配額
- 格式:
setquota -n|-b val path
- 選項:
- -n:限制子節點的數量(包括它本身)
- -b:限制一個路徑的字節(數據長度)
- 備註:-n和-b不是強制約束,當超過指定的值時只會給出一個警告。例如下面分別爲超出子節點數量和路徑長度時給出的警告
- 演示案例:
setquota -n 2 /quota_test
- 演示案例:
setquota -b 5 /brokers
ls
- 功能:列出一個路徑的子節點
- 格式:
ls [-s] [-w] [-R] path
- 選項如下:
- -s:列出節點的狀態信息(與get -s的功能是一樣的)
- -w:監視(watch)節點上數據的變化。備註:要將printwatches設置爲on纔可以使用(與get -w的功能是一樣的)
- -R: 遞歸地顯示子節點
- 演示案例:列出/zookeeper節點的狀態信息
ls -s /zookeeper
- 演示案例:監視/zookeeper節點上數據的變化
printwatches on ls -w /zookeeper
- 演示案例:遞歸地顯示子節點
ls -R /zookeeper
printwatches
- 功能:開關,用來是否打印監視(watchers)信息
- 格式:
printwatches on|off
- 演示案例:
printwatches on
reconfig
- 功能:在運行時更改集合的成員
- 在使用之前,可以參閱有關重新配置功能的詳細信息,尤其是“安全性”部分:https://zookeeper.apache.org/doc/current/zookeeperReconfig.html
- 使用條件:
- 在配置文件zoo.cfg中設置了reconfigEnabled = true
- 添加超級用戶或skipAcl,否則將顯示“身份驗證無效”。例如:addauth digest zookeeper:admin
- 格式:
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
- 演示案例:
- 將跟隨者2(Follower)更改爲觀察者(Observer),同時指定其端口從2182更改爲12182
- 將觀察者5(Observer)添加到集合中
- 將觀察者4(Observer)移除到集合中
reconfig --add 2=localhost:2781:2786:observer;12182 --add 5=localhost:2781:2786:observer;2185 -remove 4
- 演示案例:任命成員
reconfig -members server.1=localhost:2780:2785:participant;0.0.0.0:2181,server.2=localhost:2781:2786:observer;0.0.0.0:12182,server.3=localhost:2782:2787:participant;0.0.0.0:12183
演示案例:將當前配置更改爲myNewConfig.txt中的配置,當且僅當前配置版本爲2100000010時纔會說呢過小
reconfig -file /data/software/zookeeper/zookeeper-test/conf/myNewConfig.txt -v 2100000010
redo
- 功能:從歷史記錄重做cmd
- 格式:
redo cmdno
- 演示案例:重新執行history ID爲1的命令
set
- 功能:設置/更新路徑上的數據
- 格式:
set [-s] [-v version] path data
- 選項:
- -s:顯示此節點的狀態
- -v:使用CAS設置數據,當且僅當節點的dataVersion=version才能修改,dataVersion可以i使用stat命令查看
- 演示案例:更改一個節點的數據
set /test_node "World"
- 演示案例:更改一個節點的數據時,同時顯示此節點的狀態
set -s /test_node "Hello"
- 演示案例:更更改/test_node節點的數據,修改前它數據版本dataVersion爲2,更改之後加1
set -v 0 /test_node "World"
addauth
- 功能:添加ACL的授權用戶
- 格式:
addauth scheme auth
- 演示案例(待續):
create /acl_digest_test getAcl /acl_digest_test addauth digest user1:12345 getAcl /acl_digest_test
setAcl
- 功能:設置一個節點的Acl權限
- 格式:
setAcl [-s] [-v version] [-R] path acl
- 選項:
- -R:設置Acl遞歸
- -v:當且僅當節點所屬的aclVersion與version相等時才設置Acl
- 演示案例:
setAcl -R /acl_auth_test auth:user1:12345:crwad
- 演示案例:
setAcl -v 3 /acl_auth_test auth:user1:12345:crwad
getAcl
- 功能:獲取一個路徑的ACL權限
- 格式:
getAcl [-s] path
- 演示案例:
create /acl_test mydata ip:127.0.0.1:crwd getAcl /acl_test
stat
- 功能:顯示一個節點的統計/元數據
- 格式:
stat [-w] path
- 選項:
- -w:顯示數據時同時在節點上設置觀察點
- 演示案例:
stat /zookeeper
sync
- 功能:在leader和follower之間同步一個節點的數據(異步同步)
- 格式:
sync path
- 演示案例:
sync /
三、zkCleanup.sh
- 功能:清理舊的快照和事務日誌
演示案例
- 保持最新的5個日誌和快照
./bin/zkCleanup.sh -n 5
四、zkEnv.sh
- 功能:ZooKeeper服務器的環境設置
日誌屬性的設置
- ZOO_LOG_DIR:存儲日誌的目錄
五、zkSnapShotToolkit.sh
- 功能:將快照文件轉儲到stdout,顯示每個zk節點的詳細信息
-d
- 功能:顯示帶有數據內容的每個zk節點信息
- 後面的路徑爲dataDir選項所指定的路徑
- 演示案例(內容過多,截圖不完整):
./bin/zkSnapShotToolkit.sh -d /tmp/zookeeper/version-2/snapshot.4
-json
- 功能:以json格式顯示每個zk節點信息
- 後面的路徑爲dataDir選項所指定的路徑
- 演示案例(內容過多,截圖不完整):
./bin/zkSnapShotToolkit.sh -json /tmp/zookeeper/version-2/snapshot.4
六、zkTxnLogToolkit.sh
- 功能:是ZooKeeper附帶的命令行工具,可以恢復CRC損壞的事務日誌條目
- 詳細請參考文檔
七、zkServer-initialize.sh
- 待續