有些事不是努力就能夠改變的,五十塊的人民幣設計的再好看,也沒有一百塊的招人喜歡。java
前言
因爲公司年末要更換辦公地點,因此最近投了一下簡歷,發現面試官如今很喜歡問dubbo
、zookeeper
和高併發等。因爲公司沒有使用dubbo
,只知道dubbo
是一個遠程服務調用的分佈式框架,zookeeper
爲分佈式應用程序協調服務。所以,本週查閱資料整理下zookeeper
學習筆記。node
安裝zookeeper
安裝參考連接http://www.javashuo.com/article/p-wbhetwvn-mx.htmlmysql
基礎命令操做
啓動zk服務
./zkServer.sh start
[root@localhost bin]# ./zkServer.sh ZooKeeper JMX enabled by default Using config: /usr/home/zookeeper-3.4.11/bin/../conf/zoo.cfg Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd} # 提示要以./zkCli.sh start 啓動zk ./zkCli.sh start
查看zk的運行狀態
./zkServer.sh status
因爲我已經配置了zk
的集羣,因此此處顯示狀態爲leader
[root@localhost bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/home/zookeeper-3.4.11/bin/../conf/zoo.cfg Mode: leader
客戶端連接zk
[root@localhost bin]# ./zkCli.sh ...... WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0]
help 查看客戶端幫助命令
help
[zk: localhost:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port [zk: localhost:2181(CONNECTED) 1]
ls 查看
ls
查看命令(niocoder
是我測試集羣建立的節點,默認只有zookeeper
一個節點)
[zk: localhost:2181(CONNECTED) 1] ls / [niocoder, zookeeper] [zk: localhost:2181(CONNECTED) 2] ls /zookeeper [quota] [zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota []
get 獲取節點數據和更新信息
get
內容爲空- cZxid :建立節點的id
- ctime : 節點的建立時間
- mZxid :修改節點的id
- mtime :修改節點的時間
- pZxid :子節點的id
- cversion : 子節點的版本
- dataVersion : 當前節點數據的版本
- aclVersion :權限的版本
- ephemeralOwner :判斷是不是臨時節點
- dataLength : 數據的長度
- numChildren :子節點的數量
[zk: localhost:2181(CONNECTED) 7] get /zookeeper #下面空行說明節點內容爲空 cZxid = 0x0 ctime = Thu Jan 01 00:00:00 UTC 1970 mZxid = 0x0 mtime = Thu Jan 01 00:00:00 UTC 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1 [zk: localhost:2181(CONNECTED) 8]
stat 得到節點的更新信息
stat
[zk: localhost:2181(CONNECTED) 8] stat /zookeeper cZxid = 0x0 ctime = Thu Jan 01 00:00:00 UTC 1970 mZxid = 0x0 mtime = Thu Jan 01 00:00:00 UTC 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
ls2 ls命令和stat命令的整合
ls2
[zk: localhost:2181(CONNECTED) 10] ls2 /zookeeper [quota] cZxid = 0x0 ctime = Thu Jan 01 00:00:00 UTC 1970 mZxid = 0x0 mtime = Thu Jan 01 00:00:00 UTC 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1 [zk: localhost:2181(CONNECTED) 11]
create 建立節點
create [-s] [-e] path data acl
能夠注意一下各個版本的變化
#建立merryyou節點,節點的內容爲merryyou [zk: localhost:2181(CONNECTED) 1] create /merryyou merryyou Created /merryyou #得到merryyou節點內容 [zk: localhost:2181(CONNECTED) 3] get /merryyou merryyou cZxid = 0x200000004 ctime = Sat Jun 02 14:20:06 UTC 2018 mZxid = 0x200000004 mtime = Sat Jun 02 14:20:06 UTC 2018 pZxid = 0x200000004 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0
create -e 建立臨時節點
create -e
#建立臨時節點 [zk: localhost:2181(CONNECTED) 4] create -e /merryyou/temp merryyou Created /merryyou/temp [zk: localhost:2181(CONNECTED) 5] get /merryyou merryyou cZxid = 0x200000004 ctime = Sat Jun 02 14:20:06 UTC 2018 mZxid = 0x200000004 mtime = Sat Jun 02 14:20:06 UTC 2018 pZxid = 0x200000005 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 1 [zk: localhost:2181(CONNECTED) 6] get /merryyou/temp merryyou cZxid = 0x200000005 ctime = Sat Jun 02 14:22:24 UTC 2018 mZxid = 0x200000005 mtime = Sat Jun 02 14:22:24 UTC 2018 pZxid = 0x200000005 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x2000000d4500000 dataLength = 8 numChildren = 0 [zk: localhost:2181(CONNECTED) 7] #斷開重連以後,臨時節點自動消失 WATCHER:: WatchedEvent state:SyncConnected type:None path:null #由於默認的心跳機制,此時查詢臨時節點還存在 [zk: localhost:2181(CONNECTED) 0] ls /merryyou [temp] #再次查詢,臨時節點消失 [zk: localhost:2181(CONNECTED) 1] ls /merryyou [] [zk: localhost:2181(CONNECTED) 2]
create -s 建立順序節點 自動累加
create -s
# 建立順序節點,順序節點會自動累加 [zk: localhost:2181(CONNECTED) 2] create -s /merryyou/sec seq Created /merryyou/sec0000000001 [zk: localhost:2181(CONNECTED) 3] create -s /merryyou/sec seq Created /merryyou/sec0000000002
set path data [version] 修改節點
[zk: localhost:2181(CONNECTED) 6] get /merryyou merryyou cZxid = 0x200000004 ctime = Sat Jun 02 14:20:06 UTC 2018 mZxid = 0x200000004 mtime = Sat Jun 02 14:20:06 UTC 2018 pZxid = 0x200000009 cversion = 4 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 2 # 修改節點內容爲new-merryyou [zk: localhost:2181(CONNECTED) 7] set /merryyou new-merryyou cZxid = 0x200000004 ctime = Sat Jun 02 14:20:06 UTC 2018 mZxid = 0x20000000a mtime = Sat Jun 02 14:29:23 UTC 2018 pZxid = 0x200000009 cversion = 4 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 12 numChildren = 2 #再次查詢,節點內容已經修改 [zk: localhost:2181(CONNECTED) 8] get /merryyou new-merryyou cZxid = 0x200000004 ctime = Sat Jun 02 14:20:06 UTC 2018 mZxid = 0x20000000a mtime = Sat Jun 02 14:29:23 UTC 2018 pZxid = 0x200000009 cversion = 4 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 12 numChildren = 2 #set 根據版本號更新 dataVersion 樂觀鎖 [zk: localhost:2181(CONNECTED) 9] set /merryyou test-merryyou 1 cZxid = 0x200000004 ctime = Sat Jun 02 14:20:06 UTC 2018 mZxid = 0x20000000b mtime = Sat Jun 02 14:31:30 UTC 2018 pZxid = 0x200000009 cversion = 4 dataVersion = 2 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 13 numChildren = 2 #由於數據的版本號已經修改成2 再次使用版本號1修改節點提交錯誤 [zk: localhost:2181(CONNECTED) 10] set /merryyou test-merryyou 1 version No is not valid : /merryyou
delete path [version] 刪除節點
[zk: localhost:2181(CONNECTED) 13] delete /merryyou/sec000000000 sec0000000001 sec0000000002 [zk: localhost:2181(CONNECTED) 13] delete /merryyou/sec0000000001 [zk: localhost:2181(CONNECTED) 14] ls /merryyou [sec0000000002] [zk: localhost:2181(CONNECTED) 15] #版本號操做與set相似 version
watcher通知機制
關於watcher
機制大致的理解能夠爲,當每一個節點發生變化,都會觸發watcher
事件,相似於mysql
的觸發器。zk
中 watcher
是一次性的,觸發後當即銷燬。能夠參考http://www.javashuo.com/article/p-wuvkttpg-cp.htmlgit
stat path [watch]
設置watch事件get path [watch]
設置watch事件- 子節點建立和刪除時觸發watch事件,子節點修改不會觸發該事件
stat path [watch] 設置watch事件
#添加watch 事件 [zk: localhost:2181(CONNECTED) 18] stat /longfei watch Node does not exist: /longfei #建立longfei節點時觸發watcher事件 [zk: localhost:2181(CONNECTED) 19] create /longfei test WATCHER:: WatchedEvent state:SyncConnected type:NodeCreated path:/longfei Created /longfei
get path [watch] 設置watch事件
#使用get命令添加watch事件 [zk: localhost:2181(CONNECTED) 20] get /longfei watch test cZxid = 0x20000000e ctime = Sat Jun 02 14:43:15 UTC 2018 mZxid = 0x20000000e mtime = Sat Jun 02 14:43:15 UTC 2018 pZxid = 0x20000000e cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #修改節點觸發watcher事件 [zk: localhost:2181(CONNECTED) 21] set /longfei new_test WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/longfei cZxid = 0x20000000e ctime = Sat Jun 02 14:43:15 UTC 2018 mZxid = 0x20000000f mtime = Sat Jun 02 14:45:06 UTC 2018 pZxid = 0x20000000e cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 [zk: localhost:2181(CONNECTED) 22] #刪除觸發watcher事件 [zk: localhost:2181(CONNECTED) 23] get /longfei watch new_test cZxid = 0x20000000e ctime = Sat Jun 02 14:43:15 UTC 2018 mZxid = 0x20000000f mtime = Sat Jun 02 14:45:06 UTC 2018 pZxid = 0x20000000e cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 [zk: localhost:2181(CONNECTED) 24] delete /longfei WATCHER:: WatchedEvent state:SyncConnected type:NodeDeleted path:/longfei [zk: localhost:2181(CONNECTED) 25]
ACL權限控制
ZK的節點有5種操做權限:CREATE
、READ
、WRITE
、DELETE
、ADMIN
也就是 增、刪、改、查、管理權限,這5種權限簡寫爲crwda
(即:每一個單詞的首字符縮寫)。 注:這5種權限中,delete是指對子節點的刪除權限,其它4種權限指對自身節點的操做權限github
身份的認證有4種方式:面試
world
:默認方式,至關於全世界都能訪問auth
:表明已經認證經過的用戶(cli中能夠經過addauth digest user:pwd 來添加當前上下文中的受權用戶)digest
:即用戶名:密碼這種方式認證,這也是業務系統中最經常使用的ip
:使用Ip地址認證
使用[scheme:id:permissions]
來表示acl權限spring
getAcl:獲取某個節點的acl權限信息
#獲取節點權限信息默認爲 world:cdrwa任何人均可以訪問 [zk: localhost:2181(CONNECTED) 34] getAcl /merryyou 'world,'anyone : cdrwa [zk: localhost:2181(CONNECTED) 35]
setAcl 設置權限
[zk: localhost:2181(CONNECTED) 35] create /merryyou/test test Created /merryyou/test [zk: localhost:2181(CONNECTED) 36] getAcl /merryyou/test 'world,'anyone : cdrwa #設置節點權限 crwa 不容許刪除 [zk: localhost:2181(CONNECTED) 37] setAcl /merryyou/test world:anyone:crwa cZxid = 0x200000018 ctime = Sat Jun 02 16:18:18 UTC 2018 mZxid = 0x200000018 mtime = Sat Jun 02 16:18:18 UTC 2018 pZxid = 0x200000018 cversion = 0 dataVersion = 0 aclVersion = 1 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #查詢剛纔設置的acl權限信息 crwa 沒有刪除權限 [zk: localhost:2181(CONNECTED) 38] getAcl /merryyou/test 'world,'anyone : crwa [zk: localhost:2181(CONNECTED) 39] [zk: localhost:2181(CONNECTED) 39] create /merryyou/test/abc abc Created /merryyou/test/abc #刪除子節點的時候提交權限不足 [zk: localhost:2181(CONNECTED) 40] delete /merryyou/test/abc Authentication is not valid : /merryyou/test/abc #設置節點的權限信息爲rda [zk: localhost:2181(CONNECTED) 41] setAcl /merryyou/test world:anyone:rda cZxid = 0x200000018 ctime = Sat Jun 02 16:18:18 UTC 2018 mZxid = 0x200000018 mtime = Sat Jun 02 16:18:18 UTC 2018 pZxid = 0x20000001a cversion = 1 dataVersion = 0 aclVersion = 2 ephemeralOwner = 0x0 dataLength = 4 numChildren = 1 [zk: localhost:2181(CONNECTED) 42] getAcl /merryyou/test 'world,'anyone : dra #能夠成功刪除 [zk: localhost:2181(CONNECTED) 43] delete /merryyou/test/abc [zk: localhost:2181(CONNECTED) 46] ls /merryyou/test [] [zk: localhost:2181(CONNECTED) 47] #設置節點信息爲a admin [zk: localhost:2181(CONNECTED) 47] setAcl /merryyou/test world:anyone:a cZxid = 0x200000018 ctime = Sat Jun 02 16:18:18 UTC 2018 mZxid = 0x200000018 mtime = Sat Jun 02 16:18:18 UTC 2018 pZxid = 0x20000001d cversion = 2 dataVersion = 0 aclVersion = 3 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #獲取 設置都提示權限不足 [zk: localhost:2181(CONNECTED) 49] get /merryyou/test Authentication is not valid : /merryyou/test [zk: localhost:2181(CONNECTED) 50] set /merryyou/test 123 Authentication is not valid : /merryyou/test [zk: localhost:2181(CONNECTED) 51]
acl Auth 密碼明文設置
[zk: localhost:2181(CONNECTED) 53] create /niocoder/merryyou merryyou Created /niocoder/merryyou #查詢默認節點權限信息 [zk: localhost:2181(CONNECTED) 54] getAcl /niocoder/merryyou 'world,'anyone : cdrwa [zk: localhost:2181(CONNECTED) 55] #使用auth設置節點權限信息 [zk: localhost:2181(CONNECTED) 2] setAcl /niocoder/merryyou auth:test:test:cdrwa Acl is not valid : /niocoder/merryyou # 註冊test:test 帳號密碼 [zk: localhost:2181(CONNECTED) 3] addauth digest test:test [zk: localhost:2181(CONNECTED) 4] setAcl /niocoder/merryyou auth:test:test:cdrwa cZxid = 0x200000020 ctime = Sat Jun 02 16:32:08 UTC 2018 mZxid = 0x200000020 mtime = Sat Jun 02 16:32:08 UTC 2018 pZxid = 0x200000020 cversion = 0 dataVersion = 0 aclVersion = 1 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 #查詢節點權限信息 密碼爲密文格式 [zk: localhost:2181(CONNECTED) 5] getAcl /niocoder/merryyou 'digest,'test:V28q/NynI4JI3Rk54h0r8O5kMug= : cdrwa [zk: localhost:2181(CONNECTED) 6]
acl digest 密碼密文設置
[zk: localhost:2181(CONNECTED) 13] create /names test Created /names [zk: localhost:2181(CONNECTED) 14] getAcl /names 'world,'anyone : cdrwa #使用digest設置節點的權限信息 密碼爲test密文 [zk: localhost:2181(CONNECTED) 15] setAcl /names digest:test:V28q/NynI4JI3Rk54h0r8O5kMug=:cdra cZxid = 0x400000006 ctime = Sun Jun 03 01:01:17 UTC 2018 mZxid = 0x400000006 mtime = Sun Jun 03 01:01:17 UTC 2018 pZxid = 0x400000006 cversion = 0 dataVersion = 0 aclVersion = 1 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #查詢節點權限信息 [zk: localhost:2181(CONNECTED) 16] getAcl /names 'digest,'test:V28q/NynI4JI3Rk54h0r8O5kMug= : cdra #獲取節點信息提示權限不足 [zk: localhost:2181(CONNECTED) 5] get /names Authentication is not valid : /names # 註冊帳戶 [zk: localhost:2181(CONNECTED) 4] addauth digest test:test # 能夠正常獲取 [zk: localhost:2181(CONNECTED) 17] get /names test cZxid = 0x400000006 ctime = Sun Jun 03 01:01:17 UTC 2018 mZxid = 0x400000006 mtime = Sun Jun 03 01:01:17 UTC 2018 pZxid = 0x400000006 cversion = 0 dataVersion = 0 aclVersion = 1 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #因爲沒有設置寫權限不能修改節點 w [zk: localhost:2181(CONNECTED) 18] set /names 111 Authentication is not valid : /names [zk: localhost:2181(CONNECTED) 19] delete /names [zk: localhost:2181(CONNECTED) 20]
acl ip 控制客戶端
[zk: localhost:2181(CONNECTED) 22] create /niocoder/ip aa Created /niocoder/ip [zk: localhost:2181(CONNECTED) 23] get /niocoder/ip aa cZxid = 0x40000000a ctime = Sun Jun 03 01:06:47 UTC 2018 mZxid = 0x40000000a mtime = Sun Jun 03 01:06:47 UTC 2018 pZxid = 0x40000000a cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 2 numChildren = 0 # 添加ip控制的權限信息 [zk: localhost:2181(CONNECTED) 24] setAcl /niocoder/ip ip:192.168.0.68:cdrwa cZxid = 0x40000000a ctime = Sun Jun 03 01:06:47 UTC 2018 mZxid = 0x40000000a mtime = Sun Jun 03 01:06:47 UTC 2018 pZxid = 0x40000000a cversion = 0 dataVersion = 0 aclVersion = 1 ephemeralOwner = 0x0 dataLength = 2 numChildren = 0 [zk: localhost:2181(CONNECTED) 25] getAcl /niocoder/ip 'ip,'192.168.0.68 : cdrwa [zk: localhost:2181(CONNECTED) 26]
acl super超級管理員
使用super
權限須要修改zkServer.sh
,添加super
管理員,重啓zkServer.sh
sql
"-Dzookeeper.DigestAuthenticationProvider.superDigest=test:V28q/NynI4JI3Rk54h0r8O5kMug=" nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationprovider.superDigest=test:V28q/NynI4JI3Rk54h0r8O5kMug=" \ -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null & #重啓進入zkCli #因爲以前設置ip權限,因此不容許訪問 [zk: localhost:2181(CONNECTED) 2] ls /niocoder/ip Authentication is not valid : /niocoder/ip #登陸帳號信息,即爲管理員帳號 [zk: localhost:2181(CONNECTED) 3] addauth digest test:test #正常訪問,節點內容爲空 [zk: localhost:2181(CONNECTED) 4] ls /niocoder/ip [] [zk: localhost:2181(CONNECTED) 5] get /niocoder/ip aa cZxid = 0x40000000a ctime = Sun Jun 03 01:06:47 UTC 2018 mZxid = 0x40000000a mtime = Sun Jun 03 01:06:47 UTC 2018 pZxid = 0x40000000a cversion = 0 dataVersion = 0 aclVersion = 1 ephemeralOwner = 0x0 dataLength = 2 numChildren = 0 [zk: localhost:2181(CONNECTED) 6]
四字命令Four Letter Words
- 使用四字命令須要安裝
nc
命令,(yum install nc
)
stat 查看狀態信息
[root@localhost bin]# echo stat | nc 192.168.0.68 2181 Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT Clients: /192.168.0.68:49346[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/4 Received: 62 Sent: 61 Connections: 1 Outstanding: 0 Zxid: 0x50000000a Mode: follower Node count: 10 [root@localhost bin]#
ruok 查看zookeeper是否啓動
[root@localhost bin]# echo ruok | nc 192.168.0.68 2181 imok[root@localhost bin]#
dump 列出沒有處理的節點,臨時節點
imok[root@localhost bin]# echo dump | nc 192.168.0.68 2181 SessionTracker dump: org.apache.zookeeper.server.quorum.LearnerSessionTracker@29805957 ephemeral nodes dump: Sessions with Ephemerals (0): [root@localhost bin]#
conf 查看服務器配置
[root@localhost bin]# echo conf | nc 192.168.0.68 2181 clientPort=2181 dataDir=/usr/home/zookeeper-3.4.11/data/version-2 dataLogDir=/usr/home/zookeeper-3.4.11/data/version-2 tickTime=2000 maxClientCnxns=60 minSessionTimeout=4000 maxSessionTimeout=40000 serverId=2 initLimit=10 syncLimit=5 electionAlg=3 electionPort=3888 quorumPort=2888 peerType=0 [root@localhost bin]#
cons 顯示鏈接到服務端的信息
[root@localhost bin]# echo cons | nc 192.168.0.68 2181 /192.168.0.68:49354[0](queued=0,recved=1,sent=0) [root@localhost bin]#
envi 顯示環境變量信息
[root@localhost bin]# echo envi | nc 192.168.0.68 2181 Environment: zookeeper.version=3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT host.name=localhost java.version=1.8.0_111 java.vendor=Oracle Corporation java.home=/usr/local/jdk1.8.0_111/jre java.class.path=/usr/home/zookeeper-3.4.11/bin/../build/classes:/usr/home/zookeeper-3.4.11/bin/../build/lib/*.jar:/usr/home/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/home/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/usr/home/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/usr/home/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/usr/home/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/usr/home/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/usr/home/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/usr/home/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/usr/home/zookeeper-3.4.11/bin/../conf: java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib java.io.tmpdir=/tmp java.compiler=<NA> os.name=Linux os.arch=amd64 os.version=3.10.0-514.10.2.el7.x86_64 user.name=root user.home=/root user.dir=/usr/home/zookeeper-3.4.11/bin [root@localhost bin]#
mntr 查看zk的健康信息
[root@localhost bin]# echo mntr | nc 192.168.0.68 2181 zk_version 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT zk_avg_latency 0 zk_max_latency 4 zk_min_latency 0 zk_packets_received 68 zk_packets_sent 67 zk_num_alive_connections 1 zk_outstanding_requests 0 zk_server_state follower zk_znode_count 10 zk_watch_count 0 zk_ephemerals_count 0 zk_approximate_data_size 124 zk_open_file_descriptor_count 32 zk_max_file_descriptor_count 4096 [root@localhost bin]#
wchs 展現watch的信息
[root@localhost bin]# echo wchs | nc 192.168.0.68 2181 0 connections watching 0 paths Total watches:0 [root@localhost bin]#
wchc和wchp 顯示session的watch信息 path的watch信息
- 須要在 配置
zoo.cfg
文件中添加4lw.commands.whitelist=*
[root@localhost bin]# echo wchc | nc 192.168.0.68 2181 wchc is not executed because it is not in the whitelist. [root@localhost bin]# echo wchp | nc 192.168.0.68 2181 wchp is not executed because it is not in the whitelist.
總結
熟悉zookeeper
基礎命令操做後,再使用zookeeper
提供的api
或者第三方封裝的api
,會感受一目瞭然。shell
推薦文章
- Java建立區塊鏈系列
- Spring Security源碼分析系列
- Spring Data Jpa 系列
- 【譯】數據結構中關於樹的一切(java版)
- SpringBoot+Docker+Git+Jenkins實現簡易的持續集成和持續部署
🙂🙂🙂關注微信小程序java架構師歷程 上下班的路上無聊嗎?還在看小說、新聞嗎?不知道怎樣提升本身的技術嗎?來吧這裏有你須要的java架構文章,1.5w+的java工程師都在看,你還在等什麼?apache