服务器部署 配置jetty运行参数_Zookeeper+websocket实现对分布式服务器的实时监控...
Zookeeper簡介
Zookeeper是Hadoop的一個子項目,它是分布式系統(tǒng)中的協(xié)調(diào)系統(tǒng)。
簡單來說就是一個Zookeeper注冊同步中心,內(nèi)部結(jié)構(gòu)為一個樹形目錄,每個節(jié)點上可以存放一定量(默認(rèn)的數(shù)據(jù)量上限是1M,但是可以通過調(diào)整參數(shù)修改)的數(shù)據(jù),客戶端(一段通過Zookeeperapi編寫的程序或者一個cmd和shell窗口)連接Zookeeper后,可以在任何節(jié)點上注冊監(jiān)聽(watcher),當(dāng)節(jié)點被刪除或者節(jié)點上的數(shù)據(jù)有變化時,Zookeeper會主動觸發(fā)注冊在當(dāng)前節(jié)點上的監(jiān)聽程序。
同時Zookeeper類似于文件系統(tǒng),各個節(jié)點都可以配置不同的讀寫訪問權(quán)限。
zookeeper本身是支持多個zookeeper組成集群,利用選舉機制選出負(fù)責(zé)不同職責(zé)的角色,本文暫不涉及。
案例
備注:由于全文粘貼代碼實在不好排版,本文代碼相關(guān)部分,只介紹了相關(guān)片段,完整的請下載后查看。
界面示例(動效):
本文利用Zookeeper節(jié)點可存放數(shù)據(jù)以及節(jié)點可監(jiān)聽的機制,借助WebSocket實現(xiàn)對多個服務(wù)器的實時監(jiān)控。具體web端效果如下(由于是模擬,界面略顯粗糙):
可以同時打開多個瀏覽器,接收WebSocket推送的實時監(jiān)控數(shù)據(jù)。
?
實現(xiàn)邏輯
?
實現(xiàn)過程
本文用到maven以及websocket,這兩部分內(nèi)容本文只做配置介紹,相關(guān)知識需自己提前掌握。同時zookeeper的詳細(xì)命令和api也不做詳細(xì)解釋,可自己試驗。
環(huán)境:
eclispe Oxygen Release (4.7.0);
maven 3.2.2
Zookeeper3.4.13
win10環(huán)境(一般線上都是linux環(huán)境,這里為了省事所有都在自己的筆記本上折騰的,所以用了win環(huán)境)
1、Zookeeper的安裝
安裝比較簡單,這里略過,下載后解壓,配置zoo.cfg里面的目錄參數(shù),完后就可以啟動了。
2、啟動Zookeeper
打開cmd窗口運行Zookeeper安裝目錄bin下的zkServer.cmd,即可。
也可寫個bat文件,方便每次使用,內(nèi)容(保存即可,其中d:zookeeper-3.4.13bin是我的zookeeper的bin目錄)如下:
cd d:zookeeper-3.4.13bin
d:
zkServer.cmd
@pause
3、創(chuàng)建根目錄
通過cmd連接到Zookeeper創(chuàng)建更目錄/servers,也可通過java代碼來創(chuàng)建。
client的bat啟動內(nèi)容參考如下:
cd d:zookeeper-3.4.13bin
d:
zkCli.cmd -server 127.0.0.1:2181
@pause
回車之后,通過命令create /server serverlist 完成根節(jié)點的創(chuàng)建, 后面所有待監(jiān)控的服務(wù)器都在此節(jié)點下創(chuàng)建子節(jié)點(臨時節(jié)點)。
關(guān)于zookeeper節(jié)點的類型,也請自行腦補。
這里根節(jié)點為持久化節(jié)點,服務(wù)器數(shù)據(jù)節(jié)點為臨時節(jié)點,是因為服務(wù)器程序在于zookeeper斷開后,需要刪除節(jié)點,這樣才監(jiān)控程序才能知道服務(wù)器下線了。當(dāng)然實際線上應(yīng)該都會采用持久化節(jié)點,然后通過狀態(tài)數(shù)據(jù)來判斷,這里就偷懶了。
3、代碼編寫
maven配置
整個示例有2個項目組成:一個是模擬服務(wù)器的程序(定時采集監(jiān)控指標(biāo),把指標(biāo)數(shù)據(jù)更新到node上),一個是監(jiān)控程序(用于監(jiān)控zookeeper節(jié)點變化,并獲取節(jié)點數(shù)據(jù)計算閾值,并通過Websocket推送數(shù)據(jù)到瀏覽器)。
?
business-server(服務(wù)器指標(biāo)采集程序)的maven配置
只依賴zookeeper的jar:
?
business-server-monitor(監(jiān)控程序)的maven配置:
由于有web界面,所以需依賴Servlet、JavaEE相關(guān)包,同時容器采用了maven的jetty插件,關(guān)于maven配置jetty以及如何啟動可以參考上一篇文章中的相關(guān)介紹:模塊化編程及Maven配置最佳實踐之一。
當(dāng)然實現(xiàn)Websocket的方式有很多,比如SpringMvc,SpringBoot等等,這里為了防止太多干擾就用了原生寫法。具體maven配置如下:
?
1、business-server(服務(wù)器指標(biāo)采集程序) 代碼片段:
代碼邏輯為:啟動后(main方法)連接zookeeper并建立臨時節(jié)點,同時初始化數(shù)據(jù),之后啟動模擬指標(biāo)采集的線程,間隔一段時間生成隨機指標(biāo)數(shù)據(jù)。
?
創(chuàng)建臨時節(jié)點代碼片段:
?
其中ACL是zookeeper的節(jié)點訪問權(quán)限配置,也需要自行腦補。
模擬指標(biāo)變化并將數(shù)據(jù)更新到節(jié)點上
?
其中ServerData是我自己創(chuàng)建的bean對象,用于存放服務(wù)器指標(biāo),如下:
主要包含3個模擬指標(biāo),cpu,內(nèi)存,磁盤,可自己添加。指標(biāo)和zookeeper無關(guān)。
?
至此采集程序代碼就結(jié)束了。
2、business-server-monitor(監(jiān)控程序)實時監(jiān)控zookeeper節(jié)點變化并推送數(shù)據(jù)的代碼片段
項目啟動采用了JavaEE的ServletContextListener監(jiān)聽啟動的方式來啟動和Zookeeper的連接,需要在web.xml配置這個Listener。
?
繼承ServletContextListener
當(dāng)jetty容器初始化后,觸發(fā)建立和zookeeper的連接并注冊監(jiān)聽:
?
?
然后通過Zookeeper api中的的getChildren獲取節(jié)點數(shù)據(jù)并啟動監(jiān)聽,
List servers = zk.getChildren(ServerData.serverRootNode, true);
當(dāng)節(jié)點發(fā)生數(shù)據(jù)變化時觸發(fā)監(jiān)聽的process方法,process方法獲取根節(jié)點下的所有子節(jié)點的數(shù)據(jù)并封裝成ServerData對象列表,用于websocket推送。
?
之后通過Websocket推送到瀏覽器:
Websocket配置很簡單,只需要注釋上先關(guān)annotation(@ServerEndpoint)即可,無需其他配置,容器啟動時會自行掃描到此類。
?
推送數(shù)據(jù)這里就簡單了拼接成了html,界面上就直接放在div就行了。
?
3、monitor.jsp獲取實時監(jiān)控數(shù)據(jù)
?
以上便是這個例子的完成介紹過程。
總結(jié)
以上是生活随笔為你收集整理的服务器部署 配置jetty运行参数_Zookeeper+websocket实现对分布式服务器的实时监控...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 19年助梦数万考生奔赴考场:全国唯一“高
- 下一篇: 苹果怎么付费购买内存_【苹果手机多长时间