上一篇文章中描述了如何安装配置ganglia,有个初步的体验。那么进一步的,我们需要添加多台monitor node到cluster中。网上的资料大多提到的是如何在同一个网段内添加监控节点。在同一个网段内添加监控节点的方法十分简单。按照前一篇文章的方法安装好ganglia之后,只需要把一下这些文件拷贝到你需要监控的机器上就可以了(假设你要监控的机器IP时i):
scp /usr/sbin/gmond $i:/usr/sbin/gmond
ssh $i mkdir -p /etc/ganglia/
scp /etc/ganglia/gmond.conf $i:/etc/ganglia/
scp /etc/init.d/gmond $i:/etc/init.d/
scp /usr/lib/libganglia-3.1.7.so.0 $i:/usr/lib/
scp /lib/libexpat.so.0 $i:/lib/
scp /usr/lib/libconfuse.so.0 $i:/usr/lib/
scp /usr/lib/libapr-1.so.0 $i:/usr/lib/
scp -r /usr/lib/ganglia $i:/usr/lib/
scp /usr/lib/libganglia-3.1.7.so.0 $i:/usr/lib/
scp /lib/libpcre.so.0 $i:/lib/
ssh $i service gmond start
这里是我实际配置中用到的文件,在你的系统中可能多少会有些不同,这个时候只能根据实际情况去debug。如果不能启动gmond,或者启动后用service gmond status 发现gmond出现类似什么subsys 锁死的情况,先把gmond停下来,然后用gmond -d9命令来debug。
实际应用中,需要监控的机器往往在不同的网段内,这个时候,就不能用gmond默认是用得多播方式来传送数据,必须使用单播的方法。
从我自己配制的经验来看,一定要先理解ganglia整个系统的工作原理,否则直接去看gmond配置文件的说明或者去网上直接找一些资料,基本上会一头雾水。。。。我就是从无数失败中挣扎到去看了ganglia工作原理后才豁然明白的:)。 废话少说,下面先来介绍下ganglia的工作原理。
从这幅图上来看,似乎是gmetad会去每个gmond节点取数据。但在实际应用中,gmond可以配置成为一个cluster,这些gmond节点之间相互发送各自的监控数据。所以每个gmond节点上实际上都会有cluster内的所有节点的监控数据。gmetad只需要去某一个节点获取数据就可以了。从下面这幅图我们可以看出gmetad如何从gmond节点组成的cluster上获取数据。
在gmond.conf文件中有以下和gmond发送/接受UDP数据相关的配置:
同时,在10.204.168.124上添加:
udp_recv_channel {
port = 8648
bind = 10.204.168.124
}
接受其他监控节点发送的UDP数据。
这样就可以利用ganglia监控不同网段之间的机器信息。
udp_send_channel { #udp包的发送通道
mcast_join = 239.2.11.71 #多播,工作在239.2.11.71通道下。如果使用单播模式,则要写host = host1,单播模式下也可以配置多个udp_send_channel
port = 8649 #监听端口
ttl = 1
}
这里配置的实际上是gmond之间发送数据的方法。我们可以通过将各个gmond节点的数据送到一个gmond节点上,然后gmetad去这个节点上获取所有的数据即可。
我通过在每个监控节点的gmond.conf文件中添加
udp_send_channel {
#mcast_join = 239.2.11.71
host = 10.204.168.124 #gmond中心节点,收集所有监控节点的数据。
port = 8648
ttl = 1
}
把当前机器的状态发送给10.204.168.124。