在Hadoop产生之前就有Ganglia,他是为集群系统监控而生。Hadoop利用Ganglia的接口,从而实现了对Ganglia的兼容。
分布在各个节点上的监控进程,搜集本节点的监控信息。针对Hadoop监控,可以采用同样的协议向gmond服务发送Hadoop的监控信息。
相当与集群中的中心节点,主动拉取各个节点上收集到的监控信息。可以设置多层的gmetad,这样形成一个联邦系统,从而减少gmeta本身的压力。一个gmeta最多大概能承受500个节点的信息上报,数目过多会造成gmeta节点本身性能下降。
gmetad中存储监控信息的方式是rrd为后缀名的文件,每个监控指标有一个文件相对应。
每个集群(Host Cluster)中的每个节点采用同一个主播地址,这样监控信息可以被任何一台机器看到。好处是节省带宽,和不存在单点故障(因为gmetad只需要从主播地址取数据就行了),但是需要Hub这样的硬件支持,有些switch是不支持主播地址的。在云服中,S3和阿里云等可能也不支持主播。
gmetad从主播地址拉取监控信息之后,将监控信息交给RRDtool这个类,负责向磁盘中写rrd文件。
gweb模块通过网页的方式,读取rrd文件,生成监控图表。
于主播方式唯一不同的地方是所有的节点先将监控信息send到一个中心节点,图中为node1~node3将监控信息主动推到node4.
之后gmetad主动拉取gmond4上汇总的监控信息,从而实现rrd文件的更新。
在centos的repo中已经有比较稳定的Ganglia版本,因此我们可以直接通过yum来安装。
在server侧(这里我们采用单播方式,gmetad和Node4上的gmond同时装在一台机器上了)同时安装gmetad和gmond:
yum install rrdtool ganglia-gmetad ganglia-gmond ganglia-web httpd php
在client侧(上图中Node1~Node3)
yum install ganglia-gmond
由于gweb采用apache服务器,而默认情况下配置为任何IP都不能访问这个服务。修改配置文件如下:
/etc/httpd/conf.d/ganglia.conf
Order deny,allow
#Deny from all
Allow from all
Allow from 127.0.0.1
Allow from ::1
# Allow from .example.com
有两项需要修改,一个是配置gmeta从哪个节点上的gmond上拉取汇总后的监控信息,这里设置为同时跑在本机的Node4节点的IP(这里其实是HostName)。另一个是需要配置hostname大小写敏感,不然在gweb中显示节点信息时可能会因为节点hostName中有大写字母反而读取不到小写字母命名的rdds文件夹。
/etc/ganglia/gmetad.conf
data_source "mycluster" Node4
case_sensitive_hostnames 1
rdds存放目录默认为:
/var/lib/ganglia/rrds
可以通过建立软连接的方式,更改这个目录的实际位置:
mkdir -p /data/ganglia/rrds/;
chown ganglia /data/ganglia/rrds/;
chgrp ganglia /data/ganglia/rrds/;
ln -sf /data/ganglia/rrds/ /var/lib/ganglia/;
gmond主动推送监控信息时采用的是udp协议,默认情况下是多播地址,我们这里改为单播地址(Node4的IP地址),并去掉udp_recv_channel中的多播地址和绑定,只留下端口号信息。
– /etc/ganglia/gmond.conf
cluster {
name = "mycluster"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
mcast_join = Node4
port = 8649
ttl = 1
}
udp_recv_channel {
port = 8649
}
#正常启动
– service httpd start #启动apache
– service gmetad start #启动gmetad
– service gmond start #启动gmond
# 如果要看启动信息可以采用Deug方式启动。
– /usr/sbin/gmetad -d 5
– /usr/sbin/gmond -d 5
点击图中的mycluster就可以查看各个节点中的监控信息了。
这里不详细介绍Hadoop如何兼容了Ganglia,给出以上模块示意图,有兴趣的同学可以去阅读Hadoop中涉及的图中所示类的源码。
整合示意图:
在Hadoop配置目录:hadoop/etc/hadoop 下的hadoop-metrics2.properties配置文件。
以 source为datanode为例:
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
datanode.sink.ganglia.servers=Node4:8649