Hadoop記錄- zookeeper 監控指標

目前zookeeper獲取監控指標已知的有兩種方式:node

一、經過zookeeper自帶的 four letter words command 獲取各類各樣的監控指標shell

二、經過JMX Client鏈接zookeeer對外提供的MBean來 獲取監控指標 (須要修改啓動腳本,使其支持遠程JMX鏈接)apache

上述兩種方式獲取的指標大致上是一致的。vim

經過下列命令來獲取這些監控信息 echo commands  |  nc ip port緩存

如:echo conf | nc 192.168.144.110 2181服務器

如今吧能獲取到的監控大體列出來:session

 

conf:app

可以獲取到zookeeper的配置信息,包括jvm

客戶端端口,分佈式

數據以及日誌路徑,

間隔單位時間,

單臺server與單個client端的鏈接數限制,

超時時間,

serverId等等信息,

Follower在啓動過程當中,會從Leader同步全部最新數據,而後肯定本身可以對外服務的起始狀態。Leader容許F在initLimit時間內完成這個工做。

在運行過程當中,Leader負責與ZK集羣中全部機器進行通訊,例如經過一些心跳檢測機制,來檢測機器的存活狀態。若是L發出心跳包在syncLimit以後,尚未從F那裏收到響應,那麼就認爲這個F已經不在線了。

選舉端口。

詳細信息以下:

clientPort=2181
dataDir=/export/servers/zookeeper-3.4.6/data/version-2
dataLogDir=/export/servers/zookeeper-3.4.6/logs/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=2
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0


cons:
鏈接信息的總覽,

鏈接ip

端口號

該鏈接的發包數

該鏈接的收包數

鏈接的session Id

最後操做方式/命令

鏈接的時間戳

超時時間(未確認)

最後的zxid

最後的響應時間戳

鏈接的時間延時信息

 

crst:

重置鏈接狀態,是一個execute 操做 不是一個select 操做

執行後返回一個狀態信息:

Connection stats reset.
dump:

輸出全部等待隊列中的會話和臨時節點的信息

envi:

當前server的環境信息:

版本信息

主機的host

jvm相關參數:version,classpath,lib等等

os相關參數:name,version等等

當前host用戶信息:name,dir等等

ruok:

查詢當前server狀態是否正常 若正常返回imok

imok

如何獲取這些指標?

ZooKeeper 提供了四字命令(The Four Letter Words),用來獲取 ZooKeeper 服務的當前狀態及相關信息。

有哪些命令可使用?

ZooKeeper四字命令 功能描述
conf 打印配置
cons 列出全部鏈接到這臺服務器的客戶端所有鏈接/會話詳細信息。包括"接受/發送"的包數量、會話id、操做延遲、最後的操做執行等等信息。
crst 重置全部鏈接的鏈接和會話統計信息。
dump 列出那些比較重要的會話和臨時節點。這個命令只能在leader節點上有用。
envi 打印出服務環境的詳細信息。
reqs 列出未經處理的請求
ruok 即"Are you ok",測試服務是否處於正確狀態。若是確實如此,那麼服務返回"imok",不然不作任何相應。
stat 輸出關於性能和鏈接的客戶端的列表。
srst 重置服務器的統計。
srvr 列出鏈接服務器的詳細信息
wchs 列出服務器watch的詳細信息。
wchc 經過session列出服務器watch的詳細信息,它的輸出是一個與watch相關的會話的列表。
wchp 經過路徑列出服務器watch的詳細信息。它輸出一個與session相關的路徑。
mntr 輸出可用於檢測集羣健康狀態的變量列表

如何使用四字命令?

能夠在客戶端能夠經過 telnet 或 nc 向 ZooKeeper 提交相應的命令。舉個最經常使用的栗子:

echo mntr | nc ip 2181
指標名 解釋
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 主從狀態
zk_znode_count znode 數
zk_watch_count watch 數
zk_ephemerals_count 臨時節點數
zk_approximate_data_size 近似數據總和大小
zk_open_file_descriptor_count 打開 文件描述符 數
zk_max_file_descriptor_count 最大 文件描述符 數
leader纔有的指標  
zk_followers Follower 數
zk_synced_followers 已同步的 Follower 數
zk_pending_syncs 阻塞中的 sync 操做
 

Log4j日誌優化

調整爲 DaliyRollingFileAppender,天天滾動建立新的日誌文件

vim $ZOOKEEPER_HOME/conf/log4j.properties

zookeeper.root.logger=INFO, CONSOLE
  zookeeper.console.threshold=INFO
  zookeeper.log.dir=. zookeeper.log.file=zookeeper.log zookeeper.log.threshold=DEBUG zookeeper.tracelog.dir=. zookeeper.tracelog.file=zookeeper_trace.log log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file} log4j.appender.ROLLINGFILE.DatePattern='.'yyyy-MM-dd

增長 ZOO_LOG_DIR 配置

vim bin/zkServer.sh

ZOO_LOG_DIR=$ZOOBINDIR/../log4j

CONSOLE改成ROLLINGFILE

vim bin/zkEnv.sh

 # if [ "x${ZOO_LOG4J_PROP}" = "x" ]  # then  # ZOO_LOG4J_PROP="INFO,CONSOLE"  # fi if [ "x${ZOO_LOG4J_PROP}" = "x" ] then ZOO_LOG4J_PROP="INFO,ROLLINGFILE" fi

2.zoo.cfg配置

  • globalOutstandingLimit=100000

客戶端鏈接過多,限制客戶端請求,避免OOM

  • preAllocSize=64M 日誌文件預分配大小; snapCount=100,000 多少次寫事務,生成一個快照若是快照生成頻繁可適當調大該參數。

通常zk的應用提倡讀大於寫,性能較好(10:1),存儲元數據用來協調分佈式數據最終一致。寫過於頻繁使用緩存更好

  • 日誌文件自動清除
autopurge.snapRetainCount=3 # 要在dataDir中保留的快照數 autopurge.purgeInterval=24 # 設置日誌清除時間間隔;設置爲「0」以禁用自動清除功能

謹慎修改:

  • skipACL=yes

忽略ACL驗證,能夠減小權限驗證的相關操做,提高一點性能。

  • forceSync=no

在不追求強一致性的狀況下能夠把這個設爲no,對寫請求的性能提高頗有幫助。

forceSync指每次寫請求都強制從pagecache固化到磁盤上,纔算是寫成功返回。

當寫請求數量到達必定程度的時候,後續寫請求會等待前面寫請求的forceSync操做,形成必定延時。

若是追求低延時的寫請求,配置forceSync=no,數據寫到pagecache後就返回。

可是機器斷電的時候,pagecache中的數據有可能丟失。

  • forceSync=yes;fsync.warningthresholdms=50

若爲強一致性場景,能夠再設置個fsync.warningthresholdms=50, 數據固化到磁盤的操做fsync超過50ms的時候,將會在zookeeper.out中輸出一條warn日誌(forceSync=yes有效)。

相關文章
相關標籤/搜索