Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34140
  • 博文数量: 2
  • 博客积分: 152
  • 博客等级: 入伍新兵
  • 技术积分: 42
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-17 16:22
文章分类
文章存档

2011年(2)

我的朋友

分类: 系统运维

2011-05-17 16:56:39

Ganglia总结
ganglia是一种分布式监控系统。ganglia的设计便是基于大型集群进行设计的。主要体现在数据的获取方式以及分层设计。
系统环境:CentOS 5.5 (64位)
服务器  :Dell R510
与cacti的比较
起初,对于为什么非要使用ganglia而不使用cacti,让我很迷惑。不过后来在部署过程中,以及后期的体验中。主要由两点
1. 部署的方便性。相对于cacti的逐台服务器的添加方式,ganglia类似与nagios的部署方式会更简单,更方便。有利于后期的大规模扩张。
2. 两者的数据获取方式(重点)
a:ganglia本身就是为集群监控进行设计的,这体现在其数据的获取方式(客户端主动推送)以及分层设计(node cluster grid)
b:cacti则是服务端主动去轮循(逐台服务器)这在一定程度上影响了数据的新鲜,以及所能监控节点的数量。
通信方式以及冗余
a:cacti属于点到点通信,并且不会在本地对信息进行存储。存在单点故障的风险
B:ganglia通过组播进行数据交互,配置得当,可以实现冗余避免单点故障。另外,同样由于组播,数据可以在客户机本地进行存放的(安装rrdtool)。

Ganglia体系结构
Ganglia系统组成:
gmetad:  从监听节点轮询出数据,并对数据进行聚合、存储 (ganglia组件)
gmond:   组播包的发送和接受。发送本地信息,接受其他节点信息 (ganglia组件)
Ganglia网页:提供ganglia的访问页面 (ganglia组件)
rrdtool: 数据存储以及提供画图功能
Apache与php:网站功能,对ganglia提供的网页进行解析。
Ganglia工作原理:(网上找了一张图)

上图是描述在一个cluster环境中,数据的采集,传送,处理,存储,以及展示过程
1. 客户端数据的采集是通过gmond这个进程(端口8649)实现的。然后会将数据以xml的格式发送到一个组播地 址(默认是239.2.11.71 这个是可以更改的)
2. 由于在监控端也会有一个gmond进程,所以该进程会收到所有node发出的数据。(XML)
3. Gmetad进程是server进程。运行时将开启两个端口(8651与8652)
其中8651负责在监听地址上面收集gmond数据(填写本地IP即可配置后面说注)
其中8652负责数据的聚合,以及在rrd中的存储(这里有个问题不懂,最后描述)
4. 当通过浏览器访问的时候,php对ganglia的网页进行解析,rrdtool画图。从而将监控 结果进行展示。
Ganglia安装
Server安装
1. 初始环境安装
yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel python-devel libXrender-devel
2. yum -y install libconfuse
Rrdtool安装:
下载包:wget
tar -zxf rrdtool-1.4.2.tar.gz
cd rrdtool-1.4.2
./configure --prefix=/usr (网上说这样做会减少很多问题,比如ganglia安装时候的文件位置指定)
make
make install
ldconfig  (注意:这里一定要执行这条命令。否则会报错,因为如果不执行rrdtool这条命令本身会报一个错误动态库相关的)

Ganglia安装
下载包wget
tar -zxf ganglia-3.0.6.tar.gz
cd ganglia-3.0.6
./configure --with-gmetad   (默认不安装gmeta,一定要加上这一项)
make
make install
mkdir /var/www/html/ganglia
cp -a web/* /var/www/html/ganglia/
cp gmond/gmond.init /etc/init.d/gmond
cp gmetad/gmetad.init /etc/init.d/gmetad
cp gmetad/gmetad.conf /etc/
gmond -t>/etc/gmond.conf
mkdir -p /var/lib/ganglia/rrds
chown -R nobody.nobody /var/lib/ganglia/rrds
chkconfig --add gmetad
chkconfig --add gmond
至此大部分工作已经完成。(注意:网上很多资料将配置文件放在了/etc/ganglia下面。可能版本更新的问题,已经不在那个地方了,而是在/etc下面。这个可以在README中看到)

配置文件的更改 gmetad配置文件是/etc/gmetad.conf 。修改data_source即可
data_source "NeiMeng Hadoop" 10.101.0.251
Data_source 的值包含两部分 "Cluster名称"(也是一个简单的认证,在一个cluster中的所有node都必须配置为该值)

注:这里是要监听的地址,由于数据是组播,所以每个node都会收集到整个cluster的数据,所以填写本地的一个IP(ganglia使用的IP)就可以了。当然这里也可以将所有node的ip加进来。如果有node的端口不是默认的8649,也可以在这里指定端口IP:port
然后此时启动服务 httpd gmetad gmond 进行访问就会看见监控页面了(当然界面中只有本地)

这里有一项要特别注意:就是当有服务器有多个IP的时候,一定要为其添加一条到组播地址的路由,并指定网卡
 route add -net 239.2.11.71 netmask 255.255.255.255 dev eth0  (不用重启网络)
或者添加路由文件
[root@dc01c01ts01 ~]# cat /etc/sysconfig/network-scripts/route-eth0 
239.2.11.71 dev eth0
然后重启网络
否则会出现服务器“丢失”或者没有数据的问题。

客户端的添加
客户端安装相对简单,只需要拷贝需要的文件即可
由于服务器端,未指定安装路径,故出于方便考虑,拿了一台客户机操作,首先将源码包拷贝至该服务器,命令过程如下:
tar -zxf ganglia-3.0.6.tar.gz
cd ganglia-3.0.6
./configure --prefix=/usr/local/ganglia
make
make install
gmond -t > /etc/gmond.conf
ln -s /usr/local/ganglia/bin/* /usr/bin/
ln -s /usr/local/ganglia/sbin/* /usr/sbin/
然后修改/etc/gmond.conf
cluster {
  name = "NeiMeng Hadoop"
将这里的name修改为在gmetad.conf中定义的名字即可。

然后将安装后的程序包,/etc/gmond.conf 、/etc/init.d/gmond 打包然后批量拷贝至其他所有客户端,解压然后做链接即可。或者通过cf同步亦可。
记住:如果有客户端有多个IP,一定要添加路由

最后就是相关服务的制定:
Chkconfig --add gmond
Chkconf gmond on
Service gmond start
在所有客户机上面执行完这些命令以后,在ganglia的监控页面上面就能看到各个被监控机的状态了。


对于ganglia工作原理中提出的问题,问题如下,如果谁知道请告知我,问题如下:
Gmetad在启动的时候会开启两个端口8651和8652
其中在readme中有这么一句话
By default, gmetad exports its XML on port 8651 and gmond exports its XML on port 8649.
然后后期通过更改配置文件config.php将端口8652指向8651,页面是正常显示了,但是数据有很大的跳跃性,故判定此端口仅负责从gmond上面抓取数据,但是不对数据进行聚合。
然后telnet 8652得到了和8651端口中同样格式的数据,不过如果config.php中使用该端口,数据显示不会出现跳跃性,所以该端口应该是从8651中获取数据以后,对数据进行处理成为稳定的数据结果。
但是在存储上面,有些疑惑:
就是数据是通过gmetad直接存储的,还是通过gmetad调用php存储的,还是apache通过config.php中指定的8652端口去获取到数据以后再存储。
还有就是,到底是先画图后存储(php解析xml数据,然后通过rrdtool进行画图)
还是先存储后画图(gmetad存储后,php调用rrdtool存储)。
以下的内容是/etc/gmetad.conf中的定义(感觉不是很明晰各个端口的功能)
# The port gmetad will answer requests for XML
# default: 8651
# xml_port 8651
#
#-------------------------------------------------------------------------------
# The port gmetad will answer queries for XML. This facility allows
# simple subtree and summation views of the XML tree.
# default: 8652
# interactive_port 8652
README中没有对8652的解释
Config.php中却定义了8652
# If you want to grab data from a different ganglia source specify it here.
# Although, it would be strange to alter the IP since the Round-Robin
# databases need to be local to be read. 
#
$ganglia_ip = "127.0.0.1";
$ganglia_port = 8652;

感觉更混乱了。请把你的见解告诉我,谢谢!
Email: i19gomail#gmail.com
本文档是ganglia初级功能的实现,一些高级功能没有写。比如分层,备份,以及多个cluster的监控。
参考文献:
http://www.ibm.com/developerworks/cn/linux/l-ganglia-nagios-1/
Ganglia 和 Nagios,第 1 部分: 用 Ganglia 监视企业集群
http://www.javabloger.com/article/j2ee-linux-ganglia-rrdtool-java-mysql-1.html
集群下的ganglia多点系统监控 (一)
阅读(5475) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:Nagios被动模式详细实现

给主人留下些什么吧!~~

史上最纯2011-09-24 11:13:39

博主你好,我现在装完ganglia后,图片显示不出来,rrds里面为空,我用调试启动方式启动gmond 和gmetad,看到他们运行正常,telnet localhost 8651时出现
[root@localhost ~]# telnet localhost 8651
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!DOCTYPE GANGLIA_XML [
   <!ELEMENT GANGLIA_XML (GRI