分布式監控工具Ganglia 介紹 與 集群部署.


如果你目的很明確就是沖着標題來的,不愛看我嘮叨,請直接進入第二個分割線之后的內容。

 

其實之前就是有做Swift監控平台的打算的,但是因為沒什么硬性需求么,也不要緊的,就一直擱置了。最近實驗室來了個大二升大三的小MM體驗生活,老大就讓我們帶着她一起做這個東西,主要好處就是可以多學些實用的技術,了解雲存儲的基本架構,同時也不需要深入細節,難以理解。

好吧,我就是個愛說廢話和鋪陳的妞,這樣才體現“原創”不是?O(∩_∩)O哈哈~ 進入正題。。。

 

================================被38°杭州烤化掉的分割線================================

 

關於對分布式文件系統的監控,主要分為兩個部分:機器性能相關的監控 和 系統運行狀態 的監控。

機器性能相關的監控:這個比較泛化,也比較成熟,主要是對CPU、內存、網絡、磁盤I/O等信息的監控,我們沒必要重復造輪子,可以選擇比較方便強大的開源工具來搭建,這里我們選擇Ganglia;

系統運行狀態的監控:這個與不同的文件系統相關,雖然不同DFS也有一些共性的內容,比如賬戶、日志、請求量等,但是具體到每一個DFS的實現其實還是有很大不同的,因此需要特別的定制。考慮到swift中ring的概念、ReST接口、賬戶創建等信息,這一個部分我們打算自己來開發,同時可以提供ring創建,賬戶添加等基本的管理員工具;

整合:提供統一入口、統一風格,這就要求我們需要對Ganglia做一定的二次開發,從而與swift-related 監控部分整合,考慮到ganglia web front使用的是PHP語言開發的,運行環境為Apache2。而我們打算用JSP對swift-related部分進行開發,運行在Tomcat中,因此需要整合PHP + JSP環境,這個再之后再介紹。

好了,以上就是整體的思路了,step by step,本篇主要介紹Ganglia。

 

=====================================Ganglia=====================================

Ganglia是一個集群監控工具,由UC Berkeley創建並開源。Ganglia的中文意思是神經中樞,現在支持多部分操作系統(包括linux、unix、windows),可支持2000個節點的網絡監控(當然這不是上限,只是一個大集群使用的范例)。

基本結構

Ganglia底層使用RRDTool獲得數據,Ganglia主要分為兩個進程組件:

  • gmond(ganglia monitor deamon)
  • gmetad(ganglia metadata deamon)

其中,gmond運行在集群每個節點上,收集RRDTool產生的數據;gmetad運行在監控服務器上,收集每個gmond的數據。Ganglia還提供了一個PHP實現的web front end,一般使用Apache2作為其運行環境,通過Web Front可以看到直觀的各種集群數據圖表。

Ganglia的層次化結構做的非常好,由小到大可以分為node -> cluster -> grid,這三個層次。

  • 一個node就是一個需要監控的節點,一般是個主機,用IP表示。每個node上運行一個gmond進程用來采集數據,並提交給gmetad。
  • 一個cluster由多個node組成,就是一個集群,我們可以給集群定義名字。一個集群可以選一個node運行gmetad進程,匯總/拉取gmond提交的數據,並部署web front,將gmetad采集的數據用圖表展示出來。
  • 一個grid由多個cluster組成,是一個更高層面的概念,我們可以給grid定義名字。grid中可以定義一個頂級的gmetad進程,匯總/拉取多個gmond、子gmetad提交的數據,部署web front,將頂級gmetad采集的數據用圖表展示出來。

顯然,這種方式非常靈活,可以實現多種結構的數據監控。由下圖,我們可以清晰的看出這種層次化的結構,和不同的部署方式。

 

集群部署

在這里,僅介紹ubuntu上的部署方式,因為很簡單!只需要安裝兩個包:ganglia-monitor和ganglia-webfrontend。其中ganglia-webfrontend只需要安裝在提供頁面展示的服務器上,並且如果你的ubuntu沒有PHP和Apache2環境的話,它也會自動幫你安裝。

在這里我直接介紹多播(ganglia默認的方式,此外還支持單播)方式的集群部署,至於單機的方式,其實只要把ganglia-monitor和ganglia-webfrontend裝在一台機器上就可以了。

1)集群環境
  gmond:4台(192.168.1.101、192.168.1.102、192.168.1.103、192.168.1.104)
  gmetad + ganglia web:1台(192.168.1.104)
  操作系統:Ubuntu 11.04

2)部署過程
  在192.168.1.101、192.168.1.102、192.168.1.103這三台僅運行gmond的節點上安裝ganglia-monitor:

sudo apt-get install ganglia-monitor

  在192.168.1.104這台包含所有ganglia服務的節點上安裝ganglia-monitor和ganglia-webfrontend,這個過程會默認為沒有Apache和PHP的環境的系統安裝Apache2和PHP:

sudo apt-get install ganglia-webfrontend ganglia-monitor

  在ganglia-webfrontend安裝完畢后,ganglia-webfrontend這個包默認會將Web相關的代碼安裝在”/usr/share/ganglia-webfrontend/”路徑下,這樣apache訪問不到。因此,可以使用軟鏈接,或者直接將目錄移到”/var/www/”目錄下。

sudo ln -s /usr/share/ganglia-webfrontend/ /var/www/ganglia

  或者: 

sudo mv /usr/share/ganglia-webfrontend/ /var/www/ganglia

3)配置 

  在我們的監控系統中,將cluster命名為swift,grid命名為MyGrid,並采用組播的方式。

  配置gmond:打開/etc/ganglia/gmond.conf 修改 cluster name :

cluster { 
    name = "swift"
    owner = "unspecified"
    latlong = "unspecified"
    url = "unspecified" 
}

  配置gmetad:打開/etc/ganglia/gmetad.conf 添加數據源 和 網格名稱:

data_source "swift" localhost 
gridname "MyGrid"

4)啟動
  重啟192.168.1.104的gmated:

service gmated restart

  重啟每個節點的gmond(注意服務名是ganglia-monitor,不是gmond!):

service ganglia-monitor restart

5)頁面

  完成以上工作后,ganglia的部署就完成了,現在你可以在192.168.1.104上直接打開瀏覽器訪問 http://localhost/ganglia,就能看到圖形界面啦!或者你可以通過IP直接訪問,如果修改了端口記得加上新端口訪問。

  這里給出一張單機部署的web front end截圖,示意示意 ^_^~ 這個單機的服務,我將其cluster命名為“yuki-cluster”,哈哈

 

至此,部署的工作就完成啦!=D

 

注意點

  • 本打算使用單播的方式來部署,即每個gmond配置文件中指定gmetad的IP地址,但是失敗了。
  • 在采用多播的方式時,如果gmetad所在的節點不運行ganglia-monitor,也無法采集到其他純ganglia-monitor的數據,不知道為什么。
  • 如果在啟動的過程中出現數據不一致,比如CPU明明是4核,但只看到1個,則有可能是ganglia-monitor的啟動時間與gmetad有沖突,重啟一下即可。

 

參考文章

Ganglia 體系結構及功能介紹  

Ubuntu10.04 Ganglia安裝配置

Ganglia監控Hadoop及Hbase集群性能(安裝配置)

 

  如果以后成功實現了單播部署,以及只運行gmetad的方式,再回來補充哈。更多詳細的內容,可以看我給出的參考文章 :)

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM