1 Ganglia簡介
Ganglia 是 UC Berkeley 發起的一個開源監視項目,設計用於測量數以千計的節點。每台計算機都運行一個收集和發送度量數據(如處理器速度、內存使用量等)的名為 gmond 的守護進程。它將從操作系統和指定主機中收集。接收所有度量數據的主機可以顯示這些數據並且可以將這些數據的精簡表單傳遞到層次結構中。正因為有這種層次結構模式,才使得 Ganglia 可以實現良好的擴展。gmond 帶來的系統負載非常少,這使得它成為在集群中各台計算機上運行的一段代碼,而不會影響用戶性能。
1.1 Ganglia組件
Ganglia 監控套件包括三個主要部分:gmond,gmetad,和網頁接口,通常被稱為ganglia-web。
Gmond :是一個守護進程,他運行在每一個需要監測的節點上,收集監測統計,發送和接受在同一個組播或單播通道上的統計信息 如果他是一個發送者(mute=no)他會收集基本指標,比如系統負載(load_one),CPU利用率。他同時也會發送用戶通過添加C/Python模塊來自定義的指標。 如果他是一個接收者(deaf=no)他會聚合所有從別的主機上發來的指標,並把它們都保存在內存緩沖區中。
Gmetad:也是一個守護進程,他定期檢查gmonds,從那里拉取數據,並將他們的指標存儲在RRD存儲引擎中。他可以查詢多個集群並聚合指標。他也被用於生成用戶界面的web前端。
Ganglia-web :顧名思義,他應該安裝在有gmetad運行的機器上,以便讀取RRD文件。 集群是主機和度量數據的邏輯分組,比如數據庫服務器,網頁服務器,生產,測試,QA等,他們都是完全分開的,你需要為每個集群運行單獨的gmond實例。
一般來說每個集群需要一個接收的gmond,每個網站需要一個gmetad。
圖1 ganglia工作流
Ganglia工作流如圖1所示:
左邊是運行在各個節點上的gmond進程,這個進程的配置只由節點上/etc/gmond.conf的文件決定。所以,在各個監視節點上都需要安裝和配置該文件。
右上角是更加負責的中心機(通常是這個集群中的一台,也可以不是)。在這個台機器上運行這着gmetad進程,收集來自各個節點上的信息並存儲在RRDtool上,該進程的配置只由/etc/gmetad.conf決定。
右下角顯示了關於網頁方面的一些信息。我們的瀏覽網站時調用php腳本,從RRDTool數據庫中抓取信息,動態的生成各類圖表。
1.2 Ganglia運行模式(單播與多播)
Ganglia的收集數據工作可以工作在單播(unicast)或多播(multicast)模式下,默認為多播模式。
單播:發送自己收集到的監控數據到特定的一台或幾台機器上,可以跨網段。
多播:發送自己收集到的監控數據到同一網段內所有的機器上,同時收集同一網段內的所有機器發送過來的監控數據。因為是以廣播包的形式發送,因此需要同一網段內。但同一網段內,又可以定義不同的發送通道。
2 環境
平台:ubuntu12.04
Hadoop: hadoop-1.0.4
Hbase: hbase-0.94.5
拓撲:
圖2 hadoop及hbase拓撲
軟件安裝:apt-get
3 安裝部署(單播)
3.1 部署方式
監測節點(gmond):10.82.58.209、10.82.58.211、10.82.58.213(212主機離開了)。
主節點(gmetad、ganglia-web):10.82.58.211
3.2 安裝
這里必須說明一個問題,我是在ubuntu下直接安裝的。因為涉及到版本問題,hadoop-1.0.4和hbase-0.94.5均支持ganglia3.0和ganglia3.1版本,但是在配置時加載的模塊是不一樣的。所以,我們需要知道安裝的ganglia是什么版本。
#sudo apt-cache show ganglia-webfrontend ganglia-monitor
圖3 安裝版本信息
我們可以發現,安裝的版本是ganglia3.1.7,所以是支持的。所以在211這台主機上安裝ganglia-webfrontend和ganglia-monitor。在其他監視節點上,只需要安裝ganglia-monitor即可。
#sudo apt-get install ganglia-webfrontend ganglia-monitor
將ganglia的文件鏈接到apache的默認目錄下
#sudo ln -s /usr/share/ganglia-webfront /var/www/ganglia
Ganglia-webfrontend等同與上面所說的gmetad及ganglia-web,同時還會自動幫你安裝apache2和rrdtool,非常方便。
3.3 Ganglia配置
在各個節點上,都需要配置/etc/gmond.conf,配置相同如下所示:
globals { daemonize = yes #以后台的方式運行 setuid = yes user = ganglia #運行gmond的用戶 debug_level = 0 #調試級別 max_udp_msg_len = 1472 mute = no #啞巴,本節點將不會再廣播任何自己收集到的數據在網絡上 deaf = no #聾子,本節點不會再接收任何其他節點廣播的數據包 host_dmax = 0 /*secs */ cleanup_threshold = 300 /*secs */ gexec = no #是否使用gexec send_metadata_interval = 10 #節點發送間隔/*secs*/ } /* If a cluster attribute is specified, then all gmond hosts are wrapped inside * of a <CLUSTER> tag. If you do not specify a cluster tag, then all <HOSTS> will * NOT be wrapped inside of a <CLUSTER> tag. */ cluster { name = "hadoop" #本節點屬於哪個cluster owner = "unspecified" #誰是該節點的所有者 latlong = "unspecified" #在地球上的坐標 url = "unspecified" } /* The host section describes attributes of the host, like the location */ host { location = "unspecified" } /* Feel free to specify as many udp_send_channels as you like. Gmond used to only support having a single channel */ udp_send_channel { #udp包的發送通道 host = 10.82.58.211 #多播,工作在239.2.11.71通道下。單播,則指向主節點,單播模式下也可以配置多個udp_send_channel port = 8649 #監聽端口 ttl = 1 } /* You can specify as many udp_recv_channels as you like as well. */ udp_recv_channel { #接受UDP包配置 # mcast_join = 239.2.11.71 port = 8649 # bind = 239.2.11.71 }
請注意send_metadata_interval被設置為10秒。Ganglia的度量指標從他的元數據間隔發送得到的。元數據包含諸如度量分組,類型等等。假如你重啟了接收的gmond主機,那么元數據就會丟失,gmond就不知道如何處理度量數據,因此會把他們拋棄。這會導致生成空白的圖表。在組播模式下,gmonds可以和其他任意一台主機通信,在元數據丟失情況請求重新獲取。但這在單播模式下是不可能的,因此你需要命令gmond定期的發送元數據。
在主節點上(10.82.58.211)上還需要配置/etc/gmetad.conf,這里面的名字“hadoop”和上面gmond.conf中應該是一致的。
data_source "hadoop" 10.82.58.211:8649
3.4 Hadoop配置
所有hadoop所在的節點,均需要配置hadoop-metrics2.properties,配置如下:
# syntax: [prefix].[source|sink|jmx].[instance].[options] # See package.html for org.apache.hadoop.metrics2 for details *.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink #namenode.sink.file.filename=namenode-metrics.out #datanode.sink.file.filename=datanode-metrics.out #jobtracker.sink.file.filename=jobtracker-metrics.out #tasktracker.sink.file.filename=tasktracker-metrics.out #maptask.sink.file.filename=maptask-metrics.out #reducetask.sink.file.filename=reducetask-metrics.out # # Below are for sending metrics to Ganglia # # for Ganglia 3.0 support # *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink30 # # for Ganglia 3.1 support *.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31 *.sink.ganglia.period=10 # default for supportsparse is false *.sink.ganglia.supportsparse=true *.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both *.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40 namenode.sink.ganglia.servers=10.82.58.211:8649 datanode.sink.ganglia.servers=10.82.58.211:8649 jobtracker.sink.ganglia.servers=10.82.58.211:8649 tasktracker.sink.ganglia.servers=10.82.58.211:8649 maptask.sink.ganglia.servers=10.82.58.211:8649 reducetask.sink.ganglia.servers=10.82.58.211:8649
3.5 Hbase配置
# HBase-specific configuration to reset long-running stats (e.g. compactions) # If this variable is left out, then the default is no expiration. hbase.extendedperiod = 3600 # Configuration of the "hbase" context for ganglia # Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter) # hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 hbase.period=10 hbase.servers=10.82.58.211:8649 # Configuration of the "jvm" context for null jvm.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread jvm.period=10 # Configuration of the "jvm" context for file # jvm.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext # jvm.fileName=/tmp/metrics_jvm.log # Configuration of the "jvm" context for ganglia # Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter) # jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 jvm.period=10 jvm.servers=10.82.58.211:8649 # Configuration of the "rpc" context for null rpc.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread rpc.period=10 # Configuration of the "rpc" context for file # rpc.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext # rpc.fileName=/tmp/metrics_rpc.log # Configuration of the "rpc" context for ganglia # Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter) # rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 rpc.period=10 rpc.servers=10.82.58.211:8649 # Configuration of the "rest" context for ganglia # Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter) # rest.class=org.apache.hadoop.metrics.ganglia.GangliaContext rest.class=org.apache.hadoop.metrics.ganglia.GangliaContext31 rest.period=10 rest.servers=10.82.58.211:8649
4 啟動與檢驗
先需要重啟hadoop和hbase 。在各個節點上啟動gmond服務,主節點還需要啟動gmetad服務。
#sudo service ganglia-monitor start #sudo service gmetad start
可以通過10.82.58.211/ganglia來查看。
圖4 web查看集群信息
5 參考資料
1、http://ganglia.sourceforge.net/ 2、http://linuxjcq.blog.51cto.com/3042600/759008 3、http://cryinstall.com/?p=180 4、https://wiki.freebsdchina.org/howto/g/gangliainit5、http://abloz.com/2012/09/19/ganglia-monitoring-hadoop.html
6、http://www.ibm.com/developerworks/wikis/display/wikiptype/ganglia