1. 安装软件包,yum方式,源码方式以后再研究, 注意主节点master与从节点安装的软件包不一致.
主节点: sudo yum install -y ganglia-gmetad ganglia ganglia-web rrdtool-devel rrdtool expat expat-devel pcre pcre-devel apr-util-ldap libconfuse php httpd
从节点: sudo yum install -y ganglia-gmond rrdtool-devel rrdtool expat expat-devel pcre pcre-devel apr-util-ldap libconfuse
2. 配置文件:
a:主节点 安装ganglia-gmetad, 向从节点gmond发送请求,获取监控信息数据
httpd: /etc/httpd/conf.d/*.conf 不用修改,默认即可
gmetad: /etc/ganglia/conf.php 默认即可
/etc/ganglia/gmetad.conf 文件内容改动如下, 修改data_source, fc20_namenode是集群的名字,随意命名,fc20是监控信息所在的机器host名字即gmond所在节点的名字,gmetad要从这里(gmond所在节点)请求收集监控信息,8649是默认端口.
data_source "fc20_namenode" fc20:8649
rrd_rootdir "/var/lib/ganglia/rrds" rrd数据存放目录安装完rrdtool包之后会自动创建,就是默认目录,去掉注释即可,这个目录的用户和组默认都是ganglia,有点说要修改为nobody,我修改后在启动gmetad服务时,提示这个目录的用户必须为ganglia, 改回来就可以了, 打开ganglia监控页面http://fc20/ganglia 时提示无法访问的错误:
b:从节点, 安装ganglia-gmond, 收集本节点监控信息数据,以单播(仅一个中央节点保存监控信息数据)或多播形式向其它节点(每个节点都保存监控信息数据)发送监控信息数据, gmetad既可以从gmond多播节点(任意gmond节点,端口为udp端口 8049),也可以从中央节点(指定一个gmond节点,端口为仍然是8649)请求获取监控数据.
gmond: /etc/ganglia/gmond.conf :
/*
* The cluster attributes specified will be used as part of the <CLUSTER>
* tag that will wrap all hosts collected by this instance.
*/
cluster {
name = "fc20_namenode" 修改name为data_source中的名字
owner = "unspecified"
latlong = "unspecified"
url = "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 {
#bind_hostname = yes # Highly recommended, soon to be default.
# This option tells gmond to use a source address
# that resolves to the machine's hostname. Without
# this, the metrics may appear to come from any
# interface and the DNS names associated with
# those IPs will be used to create the RRDs.
#mcast_join = 239.2.11.71 ganglia默认的多播地址,手动注释掉了.
host = 192.168.0.100 单播使用的地址和端口, 意思是这个节点的gmond会将监控数据发送这台节点上, 以后gmetad就可以直接去这个节点查询监控数据,如果所有节点的gmond都将数据发送到这个节点, 那么这个节点就是中心节点,收集监控数据, gmetad就可以从这个节点获取所有节点的监控数据.
port = 8649
ttl = 1
}
以上单播方式也可以配置多个udp_send_channel, 那就变成多个数据收集中心了,
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
#mcast_join = 239.2.11.71 ganglia默认的多播地址,手动注释掉即可,单播的话只需要在gmond的所有节点中配置一个节点作为数据收集中心即可,不需要所有gmond节点都配置udp_recv_channel,
port = 8649
#bind = 239.2.11.71 注释掉即可, 如果这个节点作为数据收集中心,那么配置bind绑定到本地ip地址即可,其它的gmond节点的udp_send_channel就要配置host = 这个节点的ip地址了,哈哈.
#retry_bind = true 注释掉即可
# Size of the UDP buffer. If you are handling lots of metrics you really
# should bump it up to e.g. 10MB or even higher.
# buffer = 10485760
}
修改配置文件就到这里完成了.
3. 启动服务:
systemctl start httpd
systemctl start gmond
systemctl start gmetad
systemctl status -l gmetad 查看gmetad启动时的状态信息是否有错误.
如果hadoop的相关ganglia配置没问题,那么/var/lib/ganglia/rrds/目录应该会生成以data_source中的集群名字为名字的目录:fc20_namenode, 该目录下又会生成以被监控节点的主机为名字的目录,比如我的rrds目录:
[ljq@fc20 ~]$ ll /var/lib/ganglia/rrds/fc20_namenode/
总用量 20
drwxr-xr-x. 2 ganglia ganglia 4096 7月 9 16:43 fc20
drwxr-xr-x. 2 ganglia ganglia 4096 7月 9 15:50 localhost
drwxr-xr-x. 2 ganglia ganglia 12288 7月 9 16:43 __SummaryInfo__
fc20是从节点, localhost是本地机器,不知道为什么这个localhost也会出现在这里.
4. 总结:
gmetad既可以通过默认udp端口8649从gmond获取数据,也可以通过默认tcp端口8651为其它gmetad提供数据,总之,gmetad和gmond的配置相当灵活,有空了画一张图传上来.
5. hadoop配置文件中的ganglia配置请参考:
http://blog.csdn.net/ljq32/article/details/37662665