集群监控系统Ganglia应用案例
——我们把集群系统投入生产环境后,这时就需要一套可视化的工具来监视集群系统,这将有助于我们迅速地了解机群的整体配置情况,准确地把握机群各个监控节点的信息,全面地察看监控节点的性能指标,使机群系统具有较高的管理性。监视系统的主要目标是从各个监控节点采集监控信息,如CPU温度、CPU利用率、用户数、进程数、内存利用率等,然后将获取的监控信息汇集起来,便于综合分析和处理,最后根据分析和处理的结果做出相应的决策。本文以占用系统资源最少的、开放源代码的Ganglia为平台,详细讲解了如何搭建一个具有更高可靠性的集群监控系统。
——Ganglia监控系统是由加州大学伯克利分校开发的,用于大规模的机群和分布式网格等高性能计算系统。基于XML技术的数据传递可以使系统的状态数据跨越不同的系统平台进行交互,采用简洁紧凑的XDR方式,实现监控数据压缩和传输”。
0.Ganglia组成及原理
——Ganglia主要由gmetad和gmond两部分组成:gmetad主要负责监控数据的汇集,每隔15秒会轮询gmond,并向下层节点发送和接收用户所需的监控信息,并对数据出错做出相应处理,最后使用RRDtool将这些信息存储在数据库,并通过Apache Web服务器显示它收集的信息。gmond则工作在每个集群节点上,主要负责监控节点信息的获取,相当于Ganglia的监视守护进程。
——gmond主要负责监控节点信息的获取。首先,初始化gmond.conf文件配置项信息,同时分配监控信息存储空间。其次,调用ganglia_metric_cb_define("mem_total",mem_total_func),定义监控信息的采集项,"mem_total"表示信息采集项,mem_total_fun为信息采集函数,该采集函数从/proc中读取所需采集项信息,所有获取的监控信息以hash链表的形式存储。然后,在每个gmond节点上创建UDP通信的Socket端口,并调用connect建立各gmond节点间的通信通道,并启动监听进程process_udp_recv_channel,通过recvfrom接收其他各监控节点发来的监控信息。
——Ganglia_udp_send_message通过调用write向各个监控节点发送监控信息,监控信息的传输采用XDR数据流格式,每个监控节点包含了区域内所有其他节点的监控信息,如图所示。当更新周期到来时,各监控节点gmond将其获取的监控信息发给gmetad端。
图1 Ganglia监控体系结构
——上文我们简单讲解了Ganglia是如何工作的,下面将讨论Ganglia Web的安装配置。首先,在集群节点上安装gmond,然后在集群节点管理器上安装gmetad和Ganglia Web软件包。准备工作如下:
安装Apache、PHP。Ganglia Web软件包需要Apache、PHP支持,具体安装方法我们在第一章已详细讨论过。安装RRDtool。RRDtool可以绘出有用的图表,用来显示处理的数据。具体安装方法我们在讨论Ntop时,已详细讲述。
2 集群节点管理器部署Ganglia
——在准备工作完成以后,我们首先需要在http://sourceforge.net/projects/ganglia/files/下载最新软件(目前为3.6)进行安装,为方便安装可以选择RPM包方式进行安装,必须安装的软件包名称为:ganglia-gmetad、ganglia-gmond、ganglia-web以及ganglia-devel。
注意:在安装上述RPM包时,如果有的系统需要强制安装,就要用到—nodeps参数。
1).配置Ganglia
——安装了这些软件,下面是配置Ganglia的时候了,这里从集群节点管理器上的gmetad和gmond开始。在/etc/ganglia目录下分别有它们的配置文件:gmetad.conf和gmond.conf。
——在集群节点上的/etc/ganglia/gmetad.conf文件,只须包含指定集群名称和集群内部节点名称,例如:
Data_source "my cluster" localhos node1 node2 node3
“my cluster”代表集群名称,并设置了localhost(集群节点管理器)和3个名为node1、node2和node3的节点。由于Ganglia通信使用多播(在配置文件gmond.conf中定义多播地址为:239.2.11.71),所以列表中的一个节点失败(有时候很可能是用户修改了节点名称)不会影响它连接的下一个节点,因此我们不必在集群中为每个data_source项指定每台主机的信息。
上述配置完成后,记得要重启gmetad服务:
#service gmetad restart
2).在集群节点上安装最新的ganglia-gmond包并配置gmond
#vi /etc/gmond.conf
找到以下部分并按照所给出的例子进行配置:
tcp_accept_channel {
port = 8651/*注释:此为端口号,通过它来传送系统信息。注意要和服务器端监听的端口一致。*/
acl {
default = "deny"
access {
ip = 192.168.X.X /*注释:这里是服务器的IP地址 */
mask = 32
action = "allow"
}
重启gmond服务
#service gmond restart 完成
注意:在对gmond.conf和gmetad.conf文件做了修改或是修改了节点计算机名都需要重启这两个进程。
3).测试gmond进程
——我们可以通过telnet来测试gmond是否工作正常,输入如下命令,如图2所示。
#telnet 127.0.0.1 8651
图2测试gmond
——此时按下回车,将通过端口8651发送XML代码到集群节点管理器上的gmond守护进程,而gmetad守护进程使用RRDtool将这些信息存储在/var/lib/ganglia/rrds目录下。需要注意的是,rrds目录下及子目录比较多,如果监控的集群节点数大于50个节点,建议将此目录放在内存文件系统上,以减小磁盘I/O。如果告知gmond压缩的XML数据(在/etc/ganglia/gmond.conf文件中定义),将需要使用netcat来解压缩该XML数据,使其可以识别。命令为:nc localhost 8651 |gunzip。
4).节点机软件安装
——在部署节点时,不需要安装软件,仅仅执行以下命令将文件复制过去即可。
pscp /usr/sbin/gmond node1:/usr/sbin/gmond
psh node1 mkdir -p /etc/ganglia/
pscp /etc/ganglia/gmond.conf node1:/etc/ganglia/
pscp /etc/init.d/gmond node1:/etc/init.d/
pscp /usr/lib64/libganglia-3.1.7.so.0 node1:/usr/lib64/
pscp /lib64/libexpat.so.0 node1:/lib64/
pscp /usr/lib64/libconfuse.so.0 node1:/usr/lib64/
pscp /usr/lib64/libapr-1.so.0 node1:/usr/lib64/
pscp -r /usr/lib64/ganglia node1:/usr/lib64/
psh node1 service gmond start
5).添加Ganglia页面到Apache
——ganglia-webfront这个包默认将Web相关的代码安装在“/usr/share/ganglia-webfrontend/”路径下,这样Apache访问不到。可以直接将目录移到“/var/www/”目录下,或修改Apache的DocumentRoot路径,一旦完成修改需要重启Apache。
测试是否成功,可以在浏览器地址栏里输入http://localhost/ganglia,如图3和图4所示。
图3Ganglia页面测试结果1
图4Ganglia页面测试结果2
6).Ganglia Web软件包
——Ganglia Web允许你查看存储在RRDtool循环数据库中的性能度量的快照。Ganglia Web 软件包分成两部分:标题和节点快照,如图5和图6所示。下面结合一个集群的实例进行讲解。
图5 标题
图6节点快照
——默认情况下,软件包使用Full View显示集群信息,单击 PhysicalView链接以便查看不同格式的相同数据。如果需要刷新数据,单击Get Fresh Data按钮,默认的刷新时间是300s,可以编辑config.php文件自行修改。在Last下拉列表中可以选择长达一年的有价值数据。Metric下拉列表中可以选取手机的性能度量,默认的是load_one,它代表集群节点上的一分钟平均负载(Load Average)。除此之外有bootime、byte、cpu、disk、lastsync、mem、network、nfs、swap等度量信息。
3.DEMO:
下面为大家演示如何安装配置Ganglia
实战效果视频请大家浏览这篇文章 http://chenguang.blog.51cto.com/350944/816547
4.总结
——以上内容详细介绍了Ganglia软件包的架构、安装方法以及Ganglia Web的配置,在长期使用中,笔者发现Ganglia也存在一些问题,例如:没有实现对被监控数据依权限查看;只有监视而没有必需的控制功能;没有实现更有弹性的、依据用户策略监控数据的选择性提取和汇集等问题。
本文转自 李晨光 51CTO博客,原文链接:http://blog.51cto.com/chenguang/1330114,如需转载请自行联系原作者