李薛劍, 胡月月, 余雪莉
(1. 安徽大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,合肥 230601;2. 安徽科技貿(mào)易學(xué)校,安徽 蚌埠 233000)
伴隨著計算機技術(shù)的不斷發(fā)展,對于系統(tǒng)服務(wù)穩(wěn)定性的要求顯得尤為重要,集群的監(jiān)控必不可少。盡管Linux操作系統(tǒng)提供了大量命令用于查看系統(tǒng)性能,但是這樣的命令使用繁瑣,結(jié)果不便于查看,且多是針對系統(tǒng)當(dāng)前狀態(tài)或是下一時刻的系統(tǒng)狀態(tài),對于歷史數(shù)據(jù)記錄不夠,不利于準(zhǔn)確地分析系統(tǒng)[1-3]。在此基礎(chǔ)之上,實現(xiàn)一個面向Linux集群的系統(tǒng)性能監(jiān)控管理工具,實時監(jiān)控系統(tǒng)性能將變得尤為重要[4-7];不僅可以更好更方便地維護系統(tǒng)穩(wěn)定,也將節(jié)省大量人力物力資源。通過監(jiān)控管理工具的應(yīng)用,在一定范圍內(nèi)使系統(tǒng)的各項資源使用趨于合理并保持一定的平衡,為集群服務(wù)器的維護提供了極大的幫助。
該面向Linux集群的系統(tǒng)性能監(jiān)控管理器基于C/S(客戶端/服務(wù)器)[8]模式來實現(xiàn)。服務(wù)器端主要負(fù)責(zé)采集本地數(shù)據(jù)并保存。客戶端程序通過網(wǎng)絡(luò)協(xié)議向服務(wù)器發(fā)送請求,并根據(jù)服務(wù)器響應(yīng)消息進行驗證和通信[9-13]。整體結(jié)構(gòu)如下圖1所示。
服務(wù)器端數(shù)據(jù)庫用來保存用戶信息和集群系統(tǒng)的狀態(tài)數(shù)據(jù),這里集群監(jiān)控管理器的與集群實際業(yè)務(wù)系統(tǒng)的用戶之間相互獨立。DBconnector作為連接數(shù)據(jù)庫的中間件。終端用戶能過login實現(xiàn)客戶端的登錄,使用getInf實現(xiàn)對服務(wù)器端主機系統(tǒng)性能的監(jiān)控。
圖1 整體結(jié)構(gòu)
根據(jù)系統(tǒng)監(jiān)控管理器的整體結(jié)構(gòu),依據(jù)功能實現(xiàn)可將監(jiān)控管理器分為四個模塊:數(shù)據(jù)采集處理模塊、數(shù)據(jù)傳輸模塊、數(shù)據(jù)可視化顯示模塊和數(shù)據(jù)定時清理模塊。監(jiān)控管理器的數(shù)據(jù)流圖如下圖2所示。
圖2 監(jiān)控管理器數(shù)據(jù)流圖
1.2.1數(shù)據(jù)采集處理模塊
數(shù)據(jù)采集處理模塊由服務(wù)器端程序完成,采用多線程技術(shù),由線程getIF、線程getPF和線程TreadsManager并發(fā)執(zhí)行,減少CPU利用率的同時帶來更好的實時性。線程getIF負(fù)責(zé)解析iotop命令,定時獲取磁盤I/O讀寫速度等數(shù)據(jù)信息,保存至消息隊列A中;線程getPF負(fù)責(zé)解析top命令,定時獲取CPU和內(nèi)存的占有率等相關(guān)數(shù)據(jù)信息,保存至消息隊列B中;線程TreadsManager負(fù)責(zé)分別從兩個非空隊列中定時取出隊首數(shù)據(jù)放入消息隊列C和數(shù)據(jù)庫中。值得注意的是,從消息隊里中取出的數(shù)據(jù)都是Java對象,無法對數(shù)據(jù)庫進行插入操作,需要用到Gson工具將數(shù)據(jù)轉(zhuǎn)換為Json數(shù)據(jù)格式再插入數(shù)據(jù)庫中,Gson工具的使用極大的方便了數(shù)據(jù)的寫入和獲取。
1.2.2網(wǎng)絡(luò)數(shù)據(jù)傳輸模塊
網(wǎng)絡(luò)數(shù)據(jù)傳輸模塊主要通過類getInf來完成。服務(wù)器與客戶端建立連接后,通過用戶名、密碼和IP地址,包括可選時間參數(shù)構(gòu)造URL地址通過HTTP協(xié)議向服務(wù)器發(fā)送GET請求。服務(wù)器端根據(jù)可選時間參數(shù)進行區(qū)分查詢實時數(shù)據(jù)和歷史數(shù)據(jù)。當(dāng)進行實時數(shù)據(jù)查詢時,直接將獲取的最新數(shù)據(jù)發(fā)送給客戶端;而進行歷史數(shù)據(jù)查詢時,根據(jù)時間參數(shù)從數(shù)據(jù)庫中進行查詢。
在查詢歷史數(shù)據(jù)時采用了內(nèi)存緩存[14-15],如圖3所示。由于數(shù)據(jù)庫容量不斷膨脹,當(dāng)客戶端發(fā)送一次查詢請求就需要對數(shù)據(jù)庫查詢一次,過多的請求查詢導(dǎo)致檢索速度減慢,而內(nèi)存緩存技術(shù)有效的減少查詢所帶來系統(tǒng)性能降低,在一定程度上也確保查詢數(shù)據(jù)的實時性。通過在系統(tǒng)空間開辟一塊內(nèi)存作為緩存區(qū)使用,當(dāng)服務(wù)器收到客戶端請求查詢某一時間點歷史數(shù)據(jù)時,服務(wù)器將從數(shù)據(jù)庫中的查詢結(jié)果發(fā)送給客戶端的同時繼續(xù)查詢該時間點和該時間點之后的60 s內(nèi)的數(shù)據(jù),將這部分?jǐn)?shù)據(jù)放入內(nèi)存緩存塊中。由于數(shù)據(jù)是集中的,且數(shù)據(jù)之間在時間上相關(guān)聯(lián),當(dāng)某一個數(shù)據(jù)被讀取時,該數(shù)據(jù)周圍的數(shù)據(jù)也很有可能被讀取。所以服務(wù)器再次接收到客戶端的請求查詢時直接從該內(nèi)存緩存塊中查找,找到則直接發(fā)送給客戶端;否則繼續(xù)執(zhí)行一次緩存操作,對內(nèi)存緩存塊中的數(shù)據(jù)進行更新。內(nèi)存緩存技術(shù)將節(jié)省大量時間,對監(jiān)控平臺的實時性也提供了一定的保障。
圖3 內(nèi)存緩存技術(shù)
1.2.3數(shù)據(jù)可視化界面展示模塊
可視化界面展示模塊由客戶端程序UI類完成??蛻舳私邮盏絹碜苑?wù)器端發(fā)送的數(shù)據(jù),對其進行處理分析,利用Java圖形界面編程進行可視化的界面展示。需要注意數(shù)據(jù)在發(fā)送和接收時數(shù)據(jù)格式的轉(zhuǎn)換,數(shù)據(jù)采集處理模塊和數(shù)據(jù)可視化界面展示模塊中處理的數(shù)據(jù)都是Java對象,而在網(wǎng)絡(luò)數(shù)據(jù)傳輸模塊中的數(shù)據(jù)是Json數(shù)據(jù)格式。
監(jiān)控管理器數(shù)據(jù)可視化界面是一個動態(tài)的實時的折線圖,直接通過圖形的波動直觀的表示了系統(tǒng)性能的改變,使監(jiān)控管理者對系統(tǒng)性能指標(biāo)有了更加清晰的認(rèn)識。同時當(dāng)系統(tǒng)中某一性能超出正常的指標(biāo)值而使系統(tǒng)處于危險,系統(tǒng)會自動發(fā)出警報,監(jiān)控管理者可以遠(yuǎn)程的對當(dāng)前系統(tǒng)中任意進程采取雙擊操作殺死該進程達(dá)到處理系統(tǒng)瓶頸的目的,在一定程度上提高了系統(tǒng)的安全性,增加了監(jiān)控平臺的可靠性。
1.2.4數(shù)據(jù)定時清理模塊
開啟服務(wù)器后,線程InitClass開始對數(shù)據(jù)庫中無用數(shù)據(jù)進行清理工作。線程InitClass通過對變量timespace和deletespace賦初值完成數(shù)據(jù)定時清理操作,timespace表示刪除數(shù)據(jù)庫中timespace小時前的數(shù)據(jù),而deletespace表示每隔deleteplace小時執(zhí)行一次清理工作。監(jiān)控平臺對兩個變量分別賦值為72和1,即為每隔1 h刪除數(shù)據(jù)庫中72 h前的數(shù)據(jù),數(shù)據(jù)庫只保存系統(tǒng)72 h內(nèi)的數(shù)據(jù)。
本實驗使用4臺PC機搭建了一個小型集群,PC機配置為雙核CPU:Pentium(R)Dual-Core,主頻3.20GHz;2GB內(nèi)存,節(jié)點間使用千兆以太網(wǎng)交換機相連,裝有CentOS6.5操作系統(tǒng),管理節(jié)點和登錄節(jié)點共用一臺主機,使用開源TORQUE軟件作為作業(yè)調(diào)度軟件。
本集群系統(tǒng)性能監(jiān)控管理程序在windows 7平臺上進行開發(fā)(硬件配置為:CPU Intel 酷睿i7 4790 3.6 GHz,內(nèi)存8 GB,硬盤1 TB,CentOS6.5操作系統(tǒng)),用Eclipse編寫程序,數(shù)據(jù)庫采用MySQL,集成了top、iotop和Maven等工具。
(1) 服務(wù)器開啟的實現(xiàn)結(jié)果:在服務(wù)器開啟之前需要對數(shù)據(jù)庫進行配置。利用SQL語句成相應(yīng)的數(shù)據(jù)庫以及表,以及將本機的ID號、用戶名和密碼插入至數(shù)據(jù)庫中的users表,通過DBconnector類加載數(shù)據(jù)庫驅(qū)動,以及DriverManager獲取數(shù)據(jù)庫連接完成服務(wù)器與數(shù)據(jù)庫的連接,從而啟動服務(wù)器,等待客戶端的接入。服務(wù)器開啟功能測試如圖4所示。
(2) 客戶端登錄的實驗結(jié)果:打開客戶端會顯示一個登錄界面,需要用戶輸入所要連接服務(wù)器的名稱、密碼以及IP地址,時間參數(shù)為一個可選項,服務(wù)器根據(jù)時間參數(shù)的選擇確定實時數(shù)據(jù)查詢和歷史數(shù)據(jù)查詢。當(dāng)點擊登錄按鈕時,客戶端通過HTTP協(xié)議向服務(wù)器發(fā)送一個GET請求,服務(wù)器接收請求,根據(jù)請求行中URL解析結(jié)果與數(shù)據(jù)庫users表信息進行匹配,完成請求處理后向客戶端返回一個HTTP響應(yīng)消息。客戶端登錄驗證如圖5所示。
圖4 服務(wù)器開啟
圖5 客戶端登錄驗證
(3) 可視化界面展示的實驗結(jié)果:在客戶端完成登錄驗證后,客戶端可繼續(xù)向服務(wù)器發(fā)送請求完成對服務(wù)器端系統(tǒng)性能查詢。當(dāng)服務(wù)器根據(jù)客戶端請求查詢數(shù)據(jù)時,若客戶端8 s內(nèi)沒有收到來自服務(wù)器的響應(yīng),則向客戶端報告錯誤,并退出;否則將查詢到的數(shù)據(jù)立即發(fā)送至客戶端。當(dāng)客戶端接收來自服務(wù)器的數(shù)據(jù),對數(shù)據(jù)進行實時的可視化顯示??梢暬缑骘@示包括兩大部分,系統(tǒng)中當(dāng)前運行的所有進程及其相關(guān)信息和動態(tài)折線圖,通過對顯示的進程中任意進程進行雙擊操作,即可殺死該進程。監(jiān)控實時數(shù)據(jù)查詢?nèi)鐖D6所示。
圖6 實時數(shù)據(jù)查詢
集群系統(tǒng)性能監(jiān)控在集群的日常管理中作用巨大,本文提出端到端通信的監(jiān)控管理器,由客戶端程序和服務(wù)器程序兩部分組成,對系統(tǒng)性能數(shù)據(jù)的實時性和正確性有一定的保證,對歷史數(shù)據(jù)也提供了記錄和獲取方法。由于監(jiān)控平臺數(shù)據(jù)采集功能采用了多線程技術(shù),以及數(shù)據(jù)查詢功能采用了內(nèi)存緩存技術(shù),節(jié)省了大量時間,保證數(shù)據(jù)的正確性。在今后的工作中,將對歷史數(shù)據(jù)的分析部分進一步擴充,從而研究集群故障的準(zhǔn)確定位和預(yù)測。
參考文獻(xiàn)(References):
[1] 李 陽,張亞非,徐玉龍,等.基于深度特征與非線性降維的圖像數(shù)據(jù)集可視化方法[J].計算機應(yīng)用研究,2017,34(2):2451-2453.
[2] 王弘堃,曹 軼,肖 麗.基于圖像的大規(guī)模數(shù)據(jù)集交互可視化[J].計算機研究與發(fā)展,2017,54(4):855-860.
[3] 霍 亮,朝樂門.可視化方法及其在信息分析中的應(yīng)用[J].信息系統(tǒng),2014,40(4):111-116.
[4] 董 波,沈 青,肖德寶.云計算集群服務(wù)器系統(tǒng)監(jiān)控方法的研究[J].計算機工程與科學(xué),2012,34(10):68-72.
[5] 肖海琴.Zabbix性能監(jiān)控軟件在高性能集群上的應(yīng)用[J].中國管理信息化,2017,20(3):139.
[6] Horstmann C S.Volume II-Advanced Features[M].北京:機械工業(yè)出版社,2014.
[7] 王中丹.Linux系統(tǒng)性能的遠(yuǎn)程監(jiān)控[J].網(wǎng)絡(luò)與信息技術(shù),2014(20):53-55.
[8] 何 昕.基于客戶端/服務(wù)器模式的遠(yuǎn)程測控系統(tǒng)[J].測控技術(shù),2008,27(4):60-64.
[9] 姜 毅,王兆青.基于HTTP實時信息傳輸方法[J].計算機工程與設(shè)計,2008,29(10):2451-2453.
[10] 邵 芬,于國防,張 寧.基于多線程的HTTP服務(wù)器的設(shè)計與實現(xiàn)[J].中國管理信息化,2017,20(3):139.
[11] 蔣 溢,黃 進,王化晶.基于多線程技術(shù)的聊天系統(tǒng)研究[J].計算機工程與設(shè)計,2008,29(15):4064-4096.
[12] 祝 瑞,車 敏.基于HTTP協(xié)議的服務(wù)器程序分析[J].現(xiàn)代電子技術(shù),2012,35(4):117-122.
[13] 曹彩鳳.基于HTTP的C/S系統(tǒng)開發(fā)研究[J].計算機工程與設(shè)計,2007,28(5):239-241.
[14] 王麗平.緩存技術(shù)在管理信息系統(tǒng)中的應(yīng)用研究[D].天津:天津大學(xué),2004.
[15] 焦 鋒,劉 群,邢文建.客戶機/服務(wù)器下的數(shù)據(jù)緩存技術(shù)[J].遼寧工程技術(shù)大學(xué)學(xué)報,2005,24(2):226-228.