ganglia-原理介紹(一)

1 Ganglia的概述

 

  

  Ganglia是UC Berkeley發起的一個開源集羣監視項目,設計用於測量數以千計的節點。Ganglia的核心包含gmond、gmetad以及一個Web前端。主要是用來監控系統性能,如:cpu 、mem、硬盤利用率,I/O負載、網絡流量狀況等,經過曲線很容易見到每一個節點的工做狀態,對合理調整、分配系統資源,提升系統總體性能起到重要做用。php

看下ganglia監控的一個圖:前端

 

 

能夠很只直觀的觀察系統的各個指標,特別是對於分佈式系統來講,無疑很是重要,並且Hadoop,Hbase提供了集成了ganglia的配置文件。web

 

 

 

2 工做原理以及配置簡介

 

2.1 組成

  在了ganglia的組成以前,先來看下一張圖數據庫

 

 

從上圖能夠很直觀的看到,一個監控系統大概包括:apache

Gmond,gmetad,rrdtool,Apache,PHP以及一個展現的web服務器

 

監控的集羣節點的步驟以下:網絡

第一步:在要收集的數據的每一個節點安裝gmond,主要用來收集節點的信息以及存儲信息(這裏的存儲信息在後面會講解)app

第二步:只要部署在一臺機器就能夠了(部署在咱們須要經過web訪問的機器上),主要用來輪詢收集gmond的信息,並以某種形式存儲到磁盤上。tcp

第三步:安裝apache web服務器,以及php(因爲gweb是php開發的),構建gweb的執行環境分佈式

第四步:安裝gweb,以web的形式更清晰的展現剛剛收集的歷史數據。

固然其中會用一些插件,後面會講解怎麼用以及怎麼安裝。

 

 

 2.2 工做的簡介

   

1)gmond用於節點信息的收集和存儲

收集:通常用於收集本節點,用gmond.conf的udp_rev_channel來配置

存儲:並非全部的gmond的都用來存儲,能夠找出其中的一臺或者幾臺來存儲便可,用gmond.conf的udp_send_channel來配置。

各個gmond節點之間的信息發送接收主要用udp協議

2)gmetad 用於輪詢gmond節點存儲的信息

Gmetad能夠配置輪詢的gmond節點,經過source 參數配置。

這裏的個gmond節點就是上面udp_send_channel所配置的節點,能夠是hostname或者ip

3)rrdtool 用於存儲數據,和畫圖

rrdtool把gmetad輪詢收集到的數據持久化磁盤文件中,而且還能夠利用這些數據畫圖,更好的展現這些數據

 

 

2.3 各個組件的配置說明

  1)gmond

  位置  /etc/ganglia/gmond.conf

  配置

  Globals

 

[plain] view plain copy

 

  1. globals {  
  2. aemonize = yes  
  3.     setuid = yes  
  4.     user = nobody  
  5.     debug_level = 0  
  6.     max_udp_msg_len = 1472  
  7.     mute = no  
  8.     deaf = no  
  9.     allow_extra_data = yes  
  10.     host_dmax = 86400 /*secs. Expires (removes from web interface) hosts in 1 day */  
  11.     host_tmax = 20 /*secs */  
  12.     cleanup_threshold = 300 /*secs */  
  13.     gexec = no  
  14.     send_metadata_interval = 0 /*secs */  
  15. }  

 

 

 daemonize(布爾類型)

 當值爲true時,gmond將在後臺分散運行。當在守護進程管理器(如daemontool)下運行gmond時,將此值設置爲false。

 setuid(布爾類型)

 當值爲true時,gmond將user屬性指定的特定用戶的UID做爲有效UID;當值爲false時,gmond將不會改變其有效用戶。

 debug_level(整數值)

 當值爲0時,gmond將正常運行。當debug_level大於0時,gmond將在前臺運行並輸出調試信息。debug_level值越大,輸出越詳細。

 max_udp_msg_len(整數值)

 該值是gmond發送包所能包含的最大長度。通常狀況下該值默認不變。

 mute(布爾類型):

 當值爲true時,無論其餘配置指令如何,gmond將不能發送數據。「單收」(mute)gmond節點只不向其餘gmond守護進程發送數  據,但仍然會響應諸如gmetad的外部輪詢器。

 deaf(布爾類型):

 當值爲true時,無論其餘配置指令如何,gmond將不能接收數據。在每一個集羣內擁有成千上萬節點的大型網格中,或者在細緻優化  的HPC網格中(例如充分利用CPU的空閒週期),爲減小匯彙集羣狀態的相關開銷,常常將普通的計算節點設置爲單發。在這些  情形下,某些特色的節點被預置爲單收,此時這些節點的性能指標將不會被測量,由於這些節點將不會用做網格的運算。由於這  些節點的任務是匯聚,因此它們的性能數據會「污染」集羣內其餘的功能部分。

 allow_extra_data(布爾類型)

 當值爲false時,gmond將不會發送XML的EXTRA_ELEMENT和EXTRA_DATA部分。該值主要應用於用戶使用本身的前端並但願  節省帶寬時。

 host_dmax(以秒爲單位的整數值)

 dmax是delete max的縮寫。當值爲0時,即便遠程主機中止報告,gmond也不會從列表裏刪除該主機。若是host_dmax設置爲正值,  當gmond在「host_dmax」秒內接收不到某臺主機的數據,gmond將刪除該主機。

 host_tmax(以秒爲單位的整數值)

 tmax是timeout max的縮寫,表明gmond等待一臺主機更新的最長時間。由於消息可能在網絡中丟失,因此若是在4倍的host_tmax時  間內接收不到某臺主機的任何消息,gmond就認爲該主機已經崩潰。

 cleanup_threshold(以秒爲單位的整數值)

 gmond清除過時數據的最小時間間隔。

 gexec(布爾類型)

 當值爲true時,gmond將容許主機運行gexec任務。這種方式須要運行gexecd並安裝合適的驗證碼。

 send_metadata_interval(以秒爲單位的整數值)

 該值設置gmond兩次發送元數據包的時間間隔。元數據包是用來描述全部激活指標的數據包。該指令默認設置爲0,表示gmond只  有在初始啓動和收到其餘遠程運行的gmond節點請求時纔會發送元數據包。若是向集羣內添加一臺運行gmond的主機,則該主機節  點須要向其餘節點公佈自身信息,並告知目前支持的指標標準。在多播模式下,因爲任何一個節點均可以向集羣內的其餘節點請  求發送元數據,所以該問題並不存在。然而,在單播模式下必須設置重發間隔。間隔值是兩次重發之間的最少秒數

 

 cluster

 

[plain] view plain copy

 

  1. cluster {  
  2.     name = "unspecified"  
  3.     owner = "unspecified"  
  4.      latlong = "unspecified"  
  5.      url = "unspecified"  
  6. }  


 每一個gmond守護進程會使用在cluster section中定義的屬性來報告它所屬集羣的信息,使用默認值系統便可正常工做。

 

 name(文本格式)

 指定集羣名稱。當輪詢節點的集羣狀態的XML集合時,把該名稱插入CLUSTER元素內。輪詢該節點的gmetad會使用該值來命名存  儲集羣數據的RRD文件。該指令將取代gmetad.conf配置文件中指定的集羣名稱。

 owner(文本格式)

 指定集羣管理員。

 latlong(文本格式)

 指定該集羣在地區上的GPS座標的經緯度。

 url(文本格式)

 指定攜帶集羣特定信息(如集羣用途和使用細節)的URL。

 

 host

 host section提供運行gmond主機的相關信息。目前只支持地址字符串屬性。默認host  section爲:

[plain] view plain copy

 

  1. host {  
  2.   location = "unspecified"  
  3. }  


location(文本格式)

 

 

 udp_send_channel

 UDP通道是經過udp_(send|receive)_channel section建立的。下面給出默認的UDP發送通道:

[plain] view plain copy

 

  1. udp_send_channel {  
  2.     #bind_hostname = yes  
  3.     mcast_join = 239.2.11.71  
  4.     port = 8649  
  5.     ttl = 1  
  6. }  

 

 

 bind_hostname(布爾類型;可選;多播或單播)

 通知gmond使用源地址解析主機名。

 mcast_join(IP;可選;僅多播)

 當指定該選項時,gmond將建立UDP套接字並加入由IP地址指定的多播組。該選項建立一個多播通道,並與host相互排斥。

 mcast_if(文本格式;可選;僅多播)

 當指定該選項時,gmond將發送來自指定接口(例如eth0)的數據。

 host(文本格式或IP;可選;僅單播)

 當指定該選項時,gmond將向已命名主機發送數據。該選項建立一個單播通道,並與mcast_join相互排斥。

 port(數字;可選;多播或單播)

 該選項指定gmond發送數據的端口號。若是未指定,則默認爲端口8649。

 

 udp_recv_channel

 

[plain] view plain copy

 

  1. udp_recv_channel {  
  2.     mcast_join = 239.2.11.71  
  3.     port = 8649  
  4.     bind = 239.2.11.71  
  5. }  

 

接受渠道. 

 

 TCP Accept Channel

 TCP Accept Channel。TCP接收通道(TCP Accept Channel)是gmond節點建立向gmetad或其餘外部輪詢器彙報集羣狀態的通  道。用戶能夠配置任意多選項。 

 默認TCP接收通道爲:
 

[plain] view plain copy

 

  1. tcp_accept_channel {  
  2.    port = 8649  
  3.  }  

 

 

 bind(IP;可選)

 當指定該選項時,gmond將捆綁到指定的本地地址。

 port(數字)

 gmong接收鏈接的端口號。

  

 2)Gmetad

 Gmetad 這個程序負責週期性的到各個datasource收集各個cluster的數據,並更新到rrd數據庫中。能夠把它理解爲服務  端。Gmond 收集本機的監控數據,發送到其餘機器上,收集其餘機器的監控數據,gmond之間經過udp通訊,傳遞文件格式爲xdl。  收集的數據供Gmetad讀取,默認監聽端口8649 ,監聽到gmetad請求後發送xml格式的文件。能夠把它理解爲客戶端。

 gmetad默認將指標數據直接寫入文件系統上的RRD文件,在有I/O限制的大型裝置中,rrdcached充當gmetad和RRD文件之間的緩  存,以下圖

 

 經常使用配置

 

 gridname(文本格式)

 能惟一標識網格的字符串。

 data_source

 每一個data_source由3個字段組成。第一個字段爲惟一標識data_source的字符串;第二個字段爲指定輪詢間隔(單位:秒)的數字;  第三個字段爲以空格分開的所要輪詢數據的主機列表,這些地址以IP地址或DNS主機名的形式指定,並可能添加「:端口號」形  式的後綴,該端口號指明gmond的tcp_accept_channel所在位置。若是未指明端口號,gmetad將嘗試鏈接tcp/8649

 setuid_username(UID)

 gmetad設置UID的用戶名。默認爲nobody 

 rrd_rootdir(路徑)

 指定RRD文件在本地文件系統存儲的基本目錄。

 

 3)Gweb

 gweb是最容易配置,也是須要配置最少就能工做的守護進程。實際上,無需改變gweb的任何默認配置,gweb就能夠啓動並運行功  能齊全的Web客戶端。

 一個基於web的監控界面,一般和Gmetad安裝在同一個節點上(還需確認是否能夠不在一個節點上,由於php的配置文件中ms可配  置gmetad的地址及端口),它從Gmetad取數據,而且讀取rrd數據庫,生成圖片,顯示出來。

相關文章
相關標籤/搜索