一、ZooKeeper簡介
ZooKeeper作為分布式系統中重要的組件,目前在業界使用越來越廣泛,ZooKeeper的使用場景非常多,以下是幾種典型的應用場景:
l 數據發布與訂閱(配置中心)
l 負載均衡
l 命名服務(Naming Service)
l 分布式通知/協調
l 集群管理與Master選舉
l 分布式鎖
zk環境搭建
這里不詳細說明,提供詳細blog說明。
Zookeeper集群搭建:http://www.cnblogs.com/linuxbug/p/4840137.html
Zookeeper配置文件詳解:http://www.cnblogs.com/linuxbug/p/4840136.html
Zookeeper常用四字命令:http://www.cnblogs.com/linuxbug/p/4840135.html
二、ZooKeeper監控
在部門內部,有不少應用已經強依賴ZooKeeper,ZooKeeper的工作狀態直接影響它們的正常工作。先來看一看哪些因素對ZooKeeper正常工作有比較大的影響:
影響ZooKeeper工作的主要因素
l 用於zookeeper寫事務日志的目錄要有足夠大小,並且強烈建議在單獨的磁盤(掛載點)上,這是影響ZK性能最大因素之一。
l 連接數。
l 注冊的Watcher數。
l ZNode是否可讀,可寫。
l ZK事件通知的延時是否過大。
針對監控平台的以上幾點要求,部內內部選用了目前使用業界已經比較成熟的阿里開源ZooKeeper監控框架TaoKeeper。
TaoKeeper源碼及搭建方法參考https://github.com/alibaba/taokeeper
TaoKeeper介紹
TaoKeeper是阿里開源ZooKeeper監控告警框架,提供以下功能:
l CPU/MEM/LOAD的監控
l ZK日志目錄所在磁盤剩余空間監控
l 單機連接數的峰值報警
l 單機 Watcher數的峰值報警
l 節點自檢:是指對集群中每個IP所在ZK節點上的PATH: /YINSHI.MONITOR.ALIVE.CHECK 定期進行三次如下流程 : 節點連接 - 數據發布 - 修改通知 - 獲取數據 - 數據對比, 在指定的延時內,三次流程均成功視為該節點處於正常狀態。
工作原理
Taokeeper通過SSH連接到ZooKeeper部署的機器上,再在上面執行ZooKeeper的四字命令來得到統計信息,再分析保存到mysql數據庫中。
監控目標機器的負載,也是通過SSH連接到目標機器,再執行top等命令,再分析得到數據。
常見四字命令:
l echo stat|nc 127.0.0.1 2181 來查看哪個節點被選擇作為follower或者leader
l echo ruok|nc 127.0.0.1 2181 測試是否啟動了該Server,若回復imok表示已經啟動。
l echo cons | nc 127.0.0.1 2181 列出所有連接到服務器的客戶端的完全的連接/會話的詳情。
l echo wchs | nc 127.0.0.1 2181 列出服務器 watch 的詳細信息。
注意事項
1 taokeeper通過ssh信道到訪登錄每台機器,需要打開ssh的password登陸方式,不然taokeeper運行時會出現authentication failed錯誤。打開方式如下:
l 對於contos機器(sshd版本為標准OpenSSL):需要把sshd配置文件中(本機為/etc/ssh/sshd_config.l)中PasswordAuthentication變量設置成yes;
l 對於suse機器(sshd版本為SSH Secure Shell):需要把sshd配置文件中(本機為/etc/ssh2/sshd2_config.l)中AllowedAuthentications變量加上password(AllowedAuthentications publickey,keyboard-interactive,password);
2 監控的每台機器需要安裝nc命令(suse中叫netcat,可以直接做個軟鏈到nc)
使用TaoKeeper,目前已建立起部門內ZooKeeper的監控視圖
ZooKeeper集群實時狀態
點擊查看按鈕可以查看具體信息
Watch數
連接數
集群狀態趨勢圖
新增監控集群
三、ZooKeeper告警
TaoKeeper查看主要針對以下幾個維度:
l ZooKeeper宕機告警
l 單機連接數超過閥值告警
l 單機Watch數超過閥值告警
l 磁盤,CPU,內存超過閥值告警
或自己使用四字命令+nc寫腳本去做告警也行,這里不再詳述。