張小銀+陳國勝
摘要:隨著現代數據中心云計算規模日益增長,云計算平臺的智能運維管理面臨較大挑戰,尤其在實時監控領域方面。本文首先對云計算監控技術進行了深入分析和研究,然后在開源云計算平臺Hadoop環境下,將Ganglia和Nagois兩種開源監控軟件進行整合,并利用移動飛信來實現對云計算平臺的實時監控。實驗結果表明,該系統可對云計算平臺內主機和服務以及運行環境的各項性能指標進行全方位監控,實現對故障的實時預警和報警,使得管理人員能準確定位、實時處理云平臺異常情況,從而提高了云平臺的服務質量,有較好的應用價值。
關鍵詞:云計算;Hadoop;性能指標;監控系統
中圖分類號:TP3 文獻標志碼:A文章編號:1672-1098(2015)02-0000-00
Abstract:With the growing scale of cloud computing in modern data centers, the intelligent operation and maintenance management faces a great challenge, especially in real-time monitoring. After a thorough analysis and research of cloud computing monitoring technologies, this paper integrates two open-source monitoring software Ganglia and Nagois in a Hadoop open-source cloud computing platform, and use a mobile message software FeiXin to achieve real-time monitoring of the cloud computing platform. Experimental results shows that the proposed system realizes an all-round monitoring of performance indicators for hosts and service of operating environment in cloud computing platform and a real-time warning of faults, which help management personnel accurately locate and real-timely process abnormal situations. Therefore the system improves the quality of service of cloud computing platform and has a good practical value.
Key words:Cloud computing; Hadoop; Performance indicators; Monitoring system
隨著云計算技術的不斷成熟發展,云計算平臺的規模以及資源也不斷增加。現代數據中心的運維管理面臨著重大挑戰,傳統的管理方法和管理模式已經無法滿足要求。
為提高云計算平臺的可靠性,保證服務質量,有必要在云計算平臺中引入監控機制[1-3] [10],以便能準確定位性能異常或故障的節點,及時做出恢復和調整;掌握整個系統的運行狀況,分析系統瓶頸,為整個系統負載均衡提供數據支持,在系統出現異常時能起到預警的作用。
Ganglia是加州大學伯克利分校發起的一個開源監控項目,主要用來監控大規模分布式系統的性能[1] [2] [4] [10]。Nagios也是功能強大的開源監控系統,能監控所指定(本地和遠程)的主機以及服務,可利用故障狀態實現故障報警[1] [2] [3] [5] [10]。Ganglia側重于數據采集,沒有內置網絡服務的監控和故障狀態級別,Nagios更側重于告警功能,配置文件較多,配置步驟繁瑣[1-2]。因此,本文采用兩款軟件結合,協同工作。
經過幾年的迅速發展,Hadoop已經成為開源云計算平臺的佼佼者,目前具有廣泛的用戶群體[2] [6]。因此,研究利用Ganglia和Nagios整合來監控Hadoop系統具有廣闊的應用前景。
1相關技術原理
11Hadoop技術
云計算是并行計算、分布式計算和網格計算的發展。具有超大規模、虛擬化、按需服務、高可靠性和高擴展性等特點。
Hadoop是一個開源的分布式計算平臺,由Apache軟件基金會支持發布。整個Hadoop的體系結構主要是通過HDFS來實現對分布式存儲的底層支持,通過MapReduce來實現對分布式并行任務處理的程序支持的。
Hadoop分布式文件系統(HDFS)采用了主/從(Master/Slave)結構模型,一個HDFS集群由一個名稱節點(Namenode)和若干個數據節點(Datanode)組成。Namenode作為主控服務器,負責管理文件系統的元數據,Datanode存儲實際的數據。Namenode執行文件系統的命名空間操作,如打開、關閉、重命名文件或目錄,Datanode負責處理客戶的讀寫請求,執行數據塊的創建、刪除和復制工作。Namenode使用事務日志來記錄HDFS元數據的變化,使用映射文件存儲文件系統的命名空間。采用冗余備份、副本存放、心跳檢測、安全模式等策略使HDFS可靠性得到保證[2] [6]。
MapReduce是一種并行編程框架,它將分布式運算任務分解成多份細粒度的子任務,發到由上千臺機器組成的集群上,這些子任務在各處理節點之上并行處理,最終通過某些特定的規則進行合并生成最終的結果。MapReduce任務是由一個JobTracker和多個TaskTracker節點控制完成,JobTracker單獨運行在主節點上,負責調度管理TaskTracker,調度一個作業分解的所有子任務。主節點監控子任務的執行情況,從節點僅負責完成由主節點指派的子任務。MapReduce將分布式運算抽象成Map和Reduce兩個步驟,最終完成Hadoop的并行處理任務[2] [6]。
12云計算監控技術
1) Ganglia監控技術
Ganglia在結構上由gmond 、gmetad和gweb三個守護進程組成,三者相互協調[1] [2] [4] [10]。具體如圖1所示。
gmond是數據采集器,運行在所有被監控主機上的一個守護進程。用于收集被監控主機上的基本指標,或者收集用戶自定義的指標,在同一個組播或單播通道上的傳遞。gmond 所產生的系統負載非常小,這使得在各被監控主機上運行gmond時,不會影響到各主機的性能。Ganglia的收集數據可以分為單播和組播兩種工作模式。
gmetad是數據混合收集器,運行在監控主機上的一個守護進程,gmetad通過輪詢收集各主機上gmond 的數據, 并聚合集群的各類信息,然后保存在本地RRD存儲引擎中。
gweb是Web可視化工具,采用PHP腳本語言實現,運行在Ganglia的監控主機上。可以通過瀏覽器從RRDTool數據庫中抓取信息,將數據可視化,動態的生成各類圖表。
Ganglia集群是主機和度量數據的邏輯分組,一般每個集群運行一個gmetad,可以構成層次結構,正因為有這種層次結構模式,才使得Ganglia可以實現良好的擴展。
2) Nagios監控技術
Nagios監控系統分為核心和插件兩大部分。Nagios的核心部分只提供了很少的監控功能,其它大部分監控功能需要安裝相應的Nagios插件完成 [1-3] [5]。
Nagios可實現如下功能:監視本地或者遠程主機資源;監視網絡服務資源;允許自定義插件來監控特定的服務;出現異常時,可以通過郵件、短信等方式通知管理人員;可以事先定義事件處理程序,當主機或者服務出現故障時自動調用指定的處理程序;可以通過Web界面來監控各個主機或服務的運行狀態。
Nagios必須運行在Linux/Unix服務器上,這臺服務器稱為監控中心,每一臺需要監視的主機或者服務都運行一個與監控中心服務器進行通信的Nagios軟件后臺程序。監控中心服務器根據讀取配置文件中的指令與遠程的守護程序進行通信,并且指示遠程的守護程序進行必要的檢查。
遠程被監控的機器可以是任何能夠與其進行通信的主機。根據遠程主機返回的應答,Nagios將根據配置以合適的行動進行回應,通過一種或者多種方式報警。
NRPE是Nagios的一個功能擴展,它可在遠程Linux/Unix主機上執行插件程序,通過在遠程主機上安裝NRPE構件以及Nagios插件程序,向監控中心提供該主機的一些本地的情況。
2云計算平臺智能監控體系
本文在開源云計算平臺Hadoop環境下,將Ganglia和Nagois兩種開源監控軟件進行整合,配合移動飛信來實現對云計算平臺的實時監控。形成了如圖2所示的一整套云計算平臺的智能監控體系。
該模塊通過整合Ganglia和Hadoop平臺來采集監控主機的基本指標或者用戶自定義的指標。然后進行數據處理,包括信息聚合,分類,可視化,生成報表等。具體過程如下:
Ganglia的監控進程(gmond)發送的指標格式是有明確定義的。用戶可配置Hadoop指標子系統,按照Ganglia的要求,直接向Ganglia發送指標數據。用戶可以根據需要,用Ganglia對Hadoop的一個或全部上下文進行監控,需要監控的Hadoop上下文包括Java虛擬機(JVM)上下文,遠程調用(RPC)上下文,分布式文件系統(DFS)上下文,Mapreduce(mapred)上下文等配置項。每個上下文對應一個Hadoop指標子系統,每個子系統包括多項Hadoop指標。
Hadoop的配置見文件hadoop-metrics2.properties,配置項的前綴是上下文名稱,每個上下文配置項都有如下三個屬性。
在本系統中,由于只有少數主機需要處理,為簡化啟用和配置,Ganglia只使用單個集群。
在組播模式下,當節點規模過大,組播會對系統性能會產生一定的影響。在本系統中,盡管只有三個節點,仍采用單播傳輸模式。
22監控模塊
該模塊通過整合Nagios與Ganglia來完成相關資源的監控,包括主機資源,網絡資源等。
在后臺,Nagios實際上只是單一進行調度和通告的引擎。Nagios本身并不能監控任何內容,只能調度插件程序的執行,并處理輸出結果。
本系統采用Nagios來監控Ganglia指標。Ganglia項目在gweb模塊中包含了一系列官方Nagios插件。這些插件使得Nagios用戶可以創建一些服務,將存儲在Ganglia中的指標和Nagios中定義的告警閾值進行比較。
在實際應用中,使用Ganglia插件來監控系統,如:Ganglia內部使用心跳計數器來確定某臺主機是否在運轉;將給定主機的單個指標與預定義的Nagios的門限值進行比較來檢查特定主機的某種指標;檢查特定主機上多種指標;檢查使用正則表達式所定義范圍內主機的多種指標;驗證一套主機上的一個和多個指標值是否相同。
在圖3中,這些插件和一系列專門為此創建的gweb PHP腳本進行交互。毎個PHP腳本從插件接收參數,解析從gmetad獲取的有關狀態緩存,提取被監控實體當前的指標值,并返回。Nagios插件和PHP腳本成對出現。
實際應用中,在hosts.cfg中定義hostgroup,格式如下:
其中,check-heartbeat.sh是Nagios插件。
此外,可以使用Nagios監控Ganglia主機的運行情況,如使用check-nrpe守護進程,監控Ganglia的所有故障,如監控匯聚主機上的gmetad和rrdcached以及所有主機上的gmond,監控TCP端口(如gmetad和gmond的監聽端口)的連通性等。
23報警模塊
為了減輕工作負擔,使管理人員能實時獲取云計算平臺運行異常或故障信息,本文使用整合了Nagios與移動飛信的報警模塊將報警信息直接送到管理人員手中。
Nagios利用插件使用Ganglia采集的信息,在運行指標超過閾值的情況下通知管理人員,通知方式采用移動飛信。
Nagios下飛信的配置主要包括:
飛信命令定義
配置commands.cfg文件,定義一個服務故障時發送報警短信的指令,如下
3云計算平臺智能監控系統的實現
31系統總體架構及實現環境
本系統使用三臺VMware虛擬機,根據需要組建Hadoop集群,Hadoop集群各主機參數列表如表1所示。
表1Hadoop集群各主機參數列表
主機名IP地址CPU(個)內存(G)硬盤(G) host110100981281010200 host6101009812488100 host7101009812688100
在三臺主機中安裝CentOS 65系統,開發環境安裝JDK17,安裝Hadoop 112[7],配置host1作為NameNode、SecondaryNameNode, 三臺主機均配置為DataNode, 在host1上運行JobTracker,在三臺主機上均運行TaskTracker。
在host1上安裝Ganglia-gmetad 317,Ganglia-gweb 342[8],Web服務器Apache22,腳本語言php-533,在三臺主機均安裝Ganglia-gmond 317。
在host6主機上安裝Nagios Core 344[9], nagios-plugins-15, nrpe-214,Web服務器Apache22,腳本語言php-533,安裝移動飛信fetion。系統總體架構如圖4所示。
Ganglia和Nagios均具有豐富的Web展示功能。實現環境中,Ganglia能監控hadoop集群及各主機性能指標眾多,大約有幾百個,下面只展示其中的幾個,圖5至
圖5host6節點一月內平均負荷圖6host1節點一天內jobtracker.heartbeats指標圖7host1節點一天內namenode.blockReport_num_ops指標
Nagios監控效果只選取一張圖,Nagios所有主機服務狀態詳述(局部)如圖8所示,上面十五項是hadoop集群中host1、host6、host7三臺主機上五個服務項的狀態信息,這五個服務項分別是:GMOND、check-ganglia-heartbeat、check-ganglia-metric disk-free、check-ganglia-metric load-one、check-value-same-everywhere,下面八項是Nagois主機上服務的狀態信息,本系統中Nagois主機即為host6。從這些效果圖可以看出,Ganglia和Nagios協調工作,實現了對Hadoop系統性能的監控。圖8Nagios所有主機服務狀態詳述(局部)本系統一般只需設定Nagios插件返回Critical和Unknown二種狀態發出報警,且一小時間隔循環發送即可。在系統主機和服務出現異常情況時,管理員接收飛信的手機會收到報警短信,格式如下:發信人為“12520139xxxxxxx”,短信內容為“XXX:1010098126host7/GMOND is CRITICAL”,最后是接收短信日期時間,“XXX”為接收飛信手機機主的姓名。此時,管理員可在本地或遠程實時維護host7主機上的GMOND服務。
在實際應用中,可以根據具體需求調整要監控的服務項。利用Hadoop、Ganglia和Nagios良好的可擴展性,動態增加節點,以便加入更多的Hadoop應用。通過改變Hadoop集群的負載,或通過調整VMware虛擬主機的部分參數,使系統負載達到均衡。由于系統中使用的端口眾多,因此應特別注意iptables防火墻的設置。
4結 語
在開源云計算平臺Hadoop環境下,利用Hadoop系統提供的監控接口,將Ganglia和Nagios整合,通過Web可視化工具,強大的圖表展示功能,直觀地了解每個節點以及整個Hadoop系統的工作狀態,并利用移動飛信進行故障報警,對調整Hadoop系統的運行參數、提高系統整體資源效率起到重要作用。
參考文獻:
[1]袁凱.云計算環境下的監控系統設計與實現[D].武漢:華中科技大學,2012.
[2]張仲妹.云計算環境下的資源監控應用研究[D].北京:北方工業大學,2013.
[3]沈青,董波,肖德寶.基于服務器集群的云監控系統設計與實現[J].計算機工程與科學,2012,34(10):73-77.
[4]Matt M.,Bernard L.,Brad N..陳學鑫,張誠誠譯.Ganglia系統監控[M].北京:機械工業出版社,2013:12-15,133-135.
[5]陶利軍.掌控:構建Linux系統Nagios監控服務器[M].北京:清華大學出版社,2013.
[6]劉鵬,黃宜華,陳衛衛.實戰Hadoop:開啟通向云計算的捷徑[M].北京:電子工業出版社,2011:37-38,60,62.
[7]Apache Software Foundation. Hadoop官方網站[EB/OL].
[8]http://ganglia.info/. Ganglia發布網站[EB/OL].
[9]http://www.nagios.org/. Nagios官方網站[EB/OL].
[10]李超,梁阿磊,管海兵.海量存儲系統的性能管理與監測方法研究[J].計算機應用與軟件,2012,29(7):78-80.