如果你目的很明確就是沖着標題來的,不愛看我嘮叨,請直接進入第二個分割線之后的內容。
其實之前就是有做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監控Hadoop及Hbase集群性能(安裝配置)
如果以后成功實現了單播部署,以及只運行gmetad的方式,再回來補充哈。更多詳細的內容,可以看我給出的參考文章 :)