Apache ZooKeeper - FourLetterCommands运维命令
文章目錄
- Pre
- 安裝nc
- 常見的四字母命令
- FourLetterCommands
- 命令解析
- confs
- cons
- stat
- mntr
- srvr
- ruok
- Question
Pre
Apache ZooKeeper - JMX監控 ZooKeeper 的運行狀態
除了 JConsole 監控控制臺之外,ZooKeeper 還提供了一些命令,可使我們更加靈活地統計監控 ZooKeeper 服務的狀態信息。
ZooKeeper 提供的這些命令也叫作四字母命令,如它們的名字一樣,每一個命令都是由四個字母組成的。
比如,輸入相關的命令來查詢 ZooKeeper 服務,可以輸入 stat 命令來查看數據節點等信息。
echo {command} | nc 127.0.0.1 2181安裝nc
netcat(nc)不僅可以通過使用TCP或UDP協議的網絡連接讀寫數據,同時還是一個功能強大的網絡調試和探測工具。
默認未安裝 ,安裝如下
yum install -y nc常見的四字母命令
FourLetterCommands
org.apache.zookeeper.server.command.FourLetterCommands // specify all of the commands that are availablestatic {cmd2String.put(confCmd, "conf");cmd2String.put(consCmd, "cons");cmd2String.put(crstCmd, "crst");cmd2String.put(dirsCmd, "dirs");cmd2String.put(dumpCmd, "dump");cmd2String.put(enviCmd, "envi");cmd2String.put(getTraceMaskCmd, "gtmk");cmd2String.put(ruokCmd, "ruok");cmd2String.put(setTraceMaskCmd, "stmk");cmd2String.put(srstCmd, "srst");cmd2String.put(srvrCmd, "srvr");cmd2String.put(statCmd, "stat");cmd2String.put(wchcCmd, "wchc");cmd2String.put(wchpCmd, "wchp");cmd2String.put(wchsCmd, "wchs");cmd2String.put(mntrCmd, "mntr");cmd2String.put(isroCmd, "isro");cmd2String.put(telnetCloseCmd, "telnet close");}命令解析
| conf | echo conf | nc localhost 2181 | (New in 3.3.0)輸出相關服務配置的詳細信息。比如端口、zk數據及日志配置路徑、最大連接數,session超時時間、serverId等 |
| cons | echo cons | nc localhost 2181 | (New in 3.3.0)列出所有連接到這臺服務器的客戶端連接/會話的詳細信息。包括“接受/發送”的包數量、session id 、操作延遲、最后的操作執行等信息。 |
| crst | echo crst | nc localhost 2181 | (New in 3.3.0)重置當前這臺服務器所有連接/會話的統計信息 |
| dump | echo dump | nc localhost 2181 | 列出未經處理的會話和臨時節點(只在leader上有效)。 |
| envi | echo envi | nc localhost 2181 | 輸出關于服務器的環境詳細信息(不同于conf命令),比如zookeeper.version、host.name、java.version、java.home、user.dir=/data/zookeeper-3.4.6/bin之類信息 |
| ruok | echo ruok | nc localhost 2181 | 測試服務是否處于正確運行狀態。如果正常返回"imok",否則返回空。 |
| srst | echo srst | nc localhost 2181 | 重置服務器的統計信息 |
| srvr | echo srvr | nc localhost 2181 | (New in 3.3.0)輸出服務器的詳細信息。zk版本、接收/發送包數量、連接數、模式(leader/follower)、節點總數。 |
| stat | echo stat | nc localhost 2181 | 輸出服務器的詳細信息:接收/發送包數量、連接數、模式(leader/follower)、節點總數、延遲。 所有客戶端的列表。 |
| wchs | echo wchs | nc localhost 2181 | (New in 3.3.0)列出服務器watches的簡潔信息:連接總數、watching節點總數和watches總數 |
| wchc | echo wchc | nc localhost 2181 | (New in 3.3.0)通過session分組,列出watch的所有節點,它的輸出是一個與 watch 相關的會話的節點列表。如果watches數量很大的話,將會產生很大的開銷,會影響性能,小心使用。 |
| wchp | echo wchp | nc localhost 2181 | (New in 3.3.0)通過路徑分組,列出所有的 watch 的session id信息。它輸出一個與 session 相關的路徑。如果watches數量很大的話,將會產生很大的開銷,會影響性能,小心使用。 |
| mntr | echo mntr | nc localhost 2181 | (New in 3.4.0)列出集群的健康狀態。包括“接受/發送”的包數量、操作延遲、當前服務模式(leader/follower)、節點總數、watch總數、臨時節點總數。 |
confs
| clientPort | 客戶端端口號 | 2181 | 客戶端所連接的服務器所監聽的TCP端口 |
| dataDir | 數據文件目錄 | ${zkDir}/data/version-2 | 用于配置內存數據庫保存的快照目錄,(文件名snapshot.xxxxx) |
| dataLogDir | 日志文件目錄 | ${zkDir}/data/version-2 | 記錄的是事務日志 (文件名如log.xxxx), 服務端會順序寫入事務日志,由于快照的寫入可能會影響事務日志的寫入吞吐能力,可以將dataLogDir指向專用的日志存儲設備 |
| tickTime | Zk使用的基本時間度量單位 | 3000 (單位毫秒) | 客戶端的最小會話超時時間為兩個tickTime |
| 更低的tickTime可以更快的發現超時問題,但也會導致更高的網絡流量(心跳消息)和更高的CPU利用率(會話存儲器的處理) | |||
| maxClientCnxns | 客戶端最大連接數 | 60個 | 允許每個IP地址的并發socket連接的最大連接數。為了解決某些錯誤的客戶端每秒創建很多個Zookeeper連接,最后導致Dos而添加的選項。 |
| minSessionTimeout | 最小會話超時 | 2個tickTime時間 | 客戶端建立連接后會請求一個明確的超時值,此值不能低于minSessionTimeout |
| 該參數配置過低可能會導致錯誤的客戶端故障檢測,過高會延遲客戶端故障的檢測時間 | |||
| maxSessionTimeout | 最大會話超時 | 20個tickTime時間 | 客戶端建立連接后會請求一個明確的超時值,此值不能高于maxSessionTimeout |
| 該參數不會影響系統的性能,但卻可以限制一個客戶端消耗系統資源的時間 | |||
| serverId | id | ||
| initLimit | follower最初連接到master時的超時值 | 沒有默認值,單位是tickTime的倍數 | 當某個follower最初與master建立連接時,之間會傳輸大量的數據,尤其是follower落后整體很多的時候。此參數的配置取決于follower與master之間的網絡速度情況,以及傳輸的數據量大小,如果Zookeeper中保存的數據量很大,例如存在大量的znode節點或者傳輸網絡很慢,就需要增大時initLimit值,可以配置initLimit值為2倍你所期待的值,此值最好在網絡中進行follower和master之間進行網絡基準測試后再決定 |
| 屬于集群配置 | |||
| syncLimit | follower與master進行sync操作時的超時值 | 沒有默認值,單位為tickTime的倍數 | 當master與follower無法進行sync操作,而且超過了syncLimit的tickTime,就會放棄該follower |
| 屬于集群配置 | 與initLimit不同的是,syncLimit 并不依賴于Zk中保存的數據量大小,而是依賴于網絡的延遲和吞吐量 | ||
| 高延遲的網絡中或者相對較大的事務傳輸時,都需要提高syncLimit值 | |||
| electionAlg | 選舉算法 | 默認3 | 此配置不需要更改,目前其他的選舉算法已被棄用 |
| 0基于UDP的LeaderElection | |||
| 屬于集群配置 | 1基于UDP的FastLeaderElection | ||
| 2基于UDP和認證的FastLeaderElection | |||
| 3基于TCP的FastLeaderElection | |||
| electionPort | 選舉端口 | 無 | 在ZK的配置文件中配置,格式為: |
| server.x=[hostname]:port1:port2[:observer] | |||
| 配置文件可拷貝conf/zoo_sample.cfg文件,加入如上格式的配置,其中 | |||
| x表示服務器的ID(需要是整數),必須配置在data/myid文件中 | |||
| hostname表示當前服務器在網絡中的名稱 | |||
| port1表示用于事務發送的端口號,如2888 | |||
| port2表示用于master選舉的端口號,如3888 | |||
| observer表示將當前服務器設置為觀察者模式。此選項可選 | |||
| quorumPort | 法人端口 | 無 | |
| peerType | 角色類型對應的序號 | 默認0,表示參與者的角色 | 在源碼中使用LearnerType枚舉類來表示,有2種類型 PARTICIPANT(0), OBSERVER(1) |
| 可選值有0和1 | 分別表示參與者和觀察者,默認是參與者,可以參與投票進行選舉的角色 | ||
| 若需要修改為觀察者,需要在ZK配置文件中加入 | |||
| peerType=observer | |||
| 以及 | |||
| server.x=[hostname]:port1:port2 | |||
| 后加入:observer |
cons
cons 命令用于輸出當前這臺服務器上所有客戶端連接的詳細信息,包括每個客戶端的客戶端 IP 、會話 ID 和最后一次與服務器交互的操作類型等。
| ip+port | ip地址+端口 |
| [interestOps] | netty/NIO中定義的interestOps |
| queued | 已經提交但未響應的請求數 |
| recved | 收到的包數量 |
| sent | 發送的數據包數量(包括通知) |
| sid | session id |
| lop | 即 last operation 此連接執行的上一個操作 |
| est | 即 Established 建立連接的時間戳 |
| to | 會話超時時間,單位毫秒值 |
| lcxid | 此連接的最后一個 cxid (指客戶端發送一個數據包到服務器之前在服務器生成一個單調遞增的整數) |
| lzxid | 此連接的最后一個 zxid (事務ID) |
| lresp | 上次服務器在此連接上向客戶端發送的響應時間 |
| llat | 即 LastLatency 此連接對應客戶端的上次響應的延遲 (單位ms) |
| minlat | 最小延遲 ms |
| avglat | 平均延遲 ms |
| maxlat | 最大延遲 ms |
stat
stat 命令的作用是監控 ZooKeeper 服務器的狀態,我們通過 stat 命令統計 ZooKeeper 服務器的 ZooKeeper 版本信息、集群數節點等信息
| Zookeeper version | zookeeper版本號 |
| Clients | 客戶端相關信息 |
| Latency min/avg/max | 最小/平均/最大延遲 ms |
| Received | 收包數 |
| Sent | 發包數 |
| Connections | 已連接的客戶端數量 |
| Outstanding | 隊列中尚未完成的請求數 |
| Zxid | 上次處理的zxid |
| Mode | 所屬角色 |
| Node count | 節點數 |
mntr
| zk_version | 版本信息 |
| zk_avg_latency | 平均延遲 |
| zk_max_latency | 最大延遲 |
| zk_min_latency | 最小延遲 |
| zk_packets_received | 收包數 |
| zk_packets_sent | 發包數 |
| zk_num_alive_connections | 存活的連接數 |
| zk_outstanding_requests | 堆積的請求數 |
| zk_server_state | 服務器的狀態,包括:leader, follower, observer, read-only, standalone |
| zk_znode_count | znode節點總數 |
| zk_watch_count | watch總數 |
| zk_ephemerals_count | 臨時節點總數(znode) |
| zk_approximate_data_size | 數據的近似大小 |
| zk_open_file_descriptor_count | 打開的文件描述符數量 |
| zk_max_file_descriptor_count | 最大文件描述符數量 |
| zk_followers | follower數量 |
| zk_synced_followers | 已同步的follower數量 |
| zk_pending_syncs | 等待同步請求的數量 |
srvr
srvr 命令與 stat 命令的功能十分相似,唯一不同的地方是 srvr 命令不會將與客戶端的連接情況輸出,通過 srvr 命令只會查詢服務器的自身信息。
[root@localhost ~]# echo srvr | nc 127.0.0.1 2181 Zookeeper version: 3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT Latency min/avg/max: 0/0/0 Received: 5 Sent: 4 Connections: 1 Outstanding: 0 Zxid: 0x69ce Mode: standalone Node count: 5 [root@localhost ~]# [root@localhost ~]#ruok
ruok 命令的主要作用是查詢 ZooKeeper 服務器是否正常運行。如果 ZooKeeper 服務器正常運行,執行完 ruok 命令后,會得到 “imok” 返回值。如果 ZooKeeper 服務沒有正常運行,則不會有任何返回值。在使用 ruok 命令的時候,在這里我們要注意的一點是,有些時候即使返回了 “imok” 字段,ZooKeeper 服務也可能沒有正常運行,唯一能確定的是該臺服務器的 2181 端口是打開的.
[root@localhost ~]# echo ruok | nc 127.0.0.1 2181 imok [root@localhost ~]#Question
[root@localhost bin]# echo stat | nc 192.168.126.136 2181 stat is not executed because it is not in the whitelist.需要加入白名單才能使用 , 開啟 -Dzookeeper.4lw.commands.whitelist=*
解析類 org.apache.zookeeper.server.NettyServerCnxn#checkFourLetterWord
總結
以上是生活随笔為你收集整理的Apache ZooKeeper - FourLetterCommands运维命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache ZooKeeper - J
- 下一篇: Excle2MD