随着数据中心的增长和管理人员的缩减,对计算资源使用有效监视工具的需求变得比以往更加迫切。术语监视 在应用到数据中心时可能会让人混淆,因为它的含义会根据具体的说话者和听众而有所不同。例如:
面对如此多的定义,您必须查找大量的代码才能监视您真正想要监视的内容,不仅如此,还存在无数的产品和服务。可是幸运的是,许多监视工具都是开源的 —— 实际上,某些开源工具的表现比尝试完成同样工作的某些商业应用程序还要好。
使用开源监视工具最困难的部分是实现适合环境的安装和配置。使用开源监视工具的两个主要问题是:
顺便说一句,商业监视工具也同样存在这两个问题。
因此,我将介绍 Ganglia 和 Nagios,这是两个用于监视数据中心的工具。这两个工具被大量用于高性能计算(HPC)环境中,但是它们对于其他环境也具有很大的吸引力(例如云、呈现集群和托管中心)。此外,两者对监视的定义也采取了不同的侧重点。Ganglia 更多地与收集度量数据并随时跟踪这些数据有关,而 Nagios 一直致力于成为一种报警机制。
随着独立项目的发展,逐步出现了交叠。例如:
虽然这些工具在某些功能领域里已经发生交叠,但是两者之间还是有许多不同之处,可以让您从运行这两个工具中获益。同时运行两个工具可以相互弥补不足:
还有其他开源项目也可以完成这两个工具完成的工作,并且有些项目在某些领域做得比其他项目好。常用开源监视解决方案包括 Cacti、Zenoss、Zabbix、Performance Copilot(PCP)和 Clumon(而且我相信您已经有了自己喜欢的选择)。这些工具(包括 Ganglia 和一些 Nagios 插件)中的许多工具在底层都使用了 RRDTool 或 Tobi Oetiker 的 MRTG(Multi Router Traffic Grapher),以生成漂亮的图形和存储数据。
尽管用于监视数据中心的开源解决方案如此众多,我却经常惊讶地发现许多向外扩展的计算中心在开发自己的解决方案,而忽略其他人已经完成的工作。
在这个两部分文章中,我将讨论 Ganglia 和 Nagios,因为有一些事实证据表明这些工具是最常用的。尽管将两者集成在一起是非常普遍的实践(尤其是在一些大型的 HPC 实验室和大学里),但是我发现很少有文章对此进行介绍。
学完本系列,您应当能够安装 Ganglia 并与 Nagios 绑定在一起,并且可以回答不同的用户组向您询问的监视问题。这只是一个开始,但是应当可以帮助您了解基础知识并逐步把握集群的整体情况。
在本文中,我将指导您完成:
我们的目标 —— 设置 HPC Linux® 集群的基准监视系统,在其中可以在某个程度上解决上面所述的三个不同监视意图:
Ganglia简介
Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond
的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond
带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。
所有这些数据收集会多次影响节点性能。网络中的 “抖动(Jitter)” 发生在大量小消息同时出现时。我们发现通过将节点时钟保持一致,就可以避免这个问题。
安装Ganglia(服务器)
第一步安装基础包(通过安装光盘的Packages都能找到)
[root@hadoop1 Packages]# rpm -ivh apr-devel-1.3.9-3.el6_1.2.i686.rpm
[root@hadoop1 Packages]# rpm -ivh apr-util-1.3.9-3.el6_0.1.i686.rpm
[root@hadoop1 Packages]# rpm -ivh check-devel-0.9.8-1.1.el6.i686.rpm
[root@hadoop1 Packages]# rpm -ivh cairo-devel-1.8.8-3.1.el6.i686.rpm
[root@hadoop1 Packages]# rpm -ivh pango-devel-1.28.1-3.el6_0.5.i686.rpm
[root@hadoop1 Packages]# rpm -ivh libxml2-devel-2.7.6-4.el6_2.4.i686.rpm
[root@hadoop1 Packages]# rpm -ivh rpm-build-4.8.0-27.el6.i686.rpm
[root@hadoop1 Packages]# rpm -ivh glib2-devel-2.22.5-7.el6.i686.rpm
[root@hadoop1 Packages]# rpm -ivh dbus-devel-1.2.24-5.el6_1.i686.rpm
[root@hadoop1 Packages]# rpm -ivh freetype-devel-2.3.11-6.el6_2.9.i686.rpm
[root@hadoop1 Packages]# rpm -ivh gcc-c++-4.4.6-4.el6.i686.rpm
[root@hadoop1 Packages]# rpm -ivh expat-devel-2.0.1-11.el6_2.i686.rpm
[root@hadoop1 Packages]# rpm -ivh python-devel-2.6.6-29.el6_2.2.i686.rpm
[root@hadoop1 Packages]# rpm -ivh libXrender-devel-0.9.5-1.el6.i686.rpm
[root@hadoop1 Packages]# rpm -ivh dejavu-lgc-sans-mono-fonts-2.30-2.el6.noarch.rpm
[root@hadoop1 Packages]# rpm -ivh rrdtool-1.3.8-6.el6.i686.rpm
[root@hadoop1 Packages]# rpm -ivh php-common-5.3.3-3.el6_2.8.i686.rpm
[root@hadoop1 Packages]# rpm -ivh php-cli-5.3.3-3.el6_2.8.i686.rpm
[root@hadoop1 Packages]# rpm -ivh php-5.3.3-3.el6_2.8.i686.rpm
[root@hadoop1 Packages]# rpm -ivh php-gd-5.3.3-3.el6_2.8.i686.rpm
[root@hadoop1 Downloads]# rpm -ivh libconfuse-2.6-2.el6.rf.i686.rpm
[root@hadoop1 Downloads]# rpm -ivh libconfuse-devel-2.6-2.el6.rf.i686.rpm
[root@hadoop1 Downloads]# rpm -ivh libganglia-3.4.0-1.el6.i686.rpm
[root@hadoop1 Downloads]# rpm -ivh ganglia-devel-3.4.0-1.el6.i686.rpm
[root@hadoop1 Downloads]# rpm -ivh ganglia-gmond-modules-python-3.4.0-1.el6.i686.rpm
第二步安装RRDTOOL
RRDTool 表示:轮循数据库工具(Round Robin Database Tool)。它是由 Tobias Oetiker 创建的,并且为许多高性能监视工具提供了引擎。Ganglia 是其中之一,但是 Cacti 和 Zenoss 是另外两个。
要安装 Ganglia,首先需要让 RRDTool 运行在监视服务器上。RRDTool 将提供其他程序使用的两个非常优秀的功能:
[root@hadoop1 tmp]# tar -zxvf rrdtool.tar.gz
[root@hadoop1 rrdtool-1.4.7]# ./configure --prefix=/usr
[root@hadoop1 rrdtool-1.4.7]# make -j8
[root@hadoop1 rrdtool-1.4.7]# make install
安装Ganglia相关包
[root@hadoop1 Downloads]# rpm -ivh ganglia-gmond-3.4.0-1.el6.i686.rpm
安装完毕以后gmond默认就启动了,稍后可以使用service gmond start|stop|restart等,控制启动在/etc/ganglia/gmond.conf下,先找到setuid = yes,改成setuid=no;然后找到在cluster中的name,改成name='"onlyking";保存,重启gmond服务
[root@hadoop1 Downloads]# rpm -ivh ganglia-gmetad-3.4.0-1.el6.i686.rpm
安装完成后gmetad服务就默认启动了,稍后可以使用service gmond start|stop|restart等,控制启动
在/etc/ganglia/gmetad.conf,下增加一些被监控的机器列表。
data_source "onlyking" hadoop1:8649 hadoop3:8649 hadoop3:8649
其中“onlyking”是集群的名称,呆会要和客户端的gmond中name的配置一样,修改完重启gmetad服务
现在已满足所有先决条件,您可以安装 Ganglia。首先需要获得它。在本文中,我们使用的是 Ganglia 3.4.0。下载 ganglia-3.4.0.tar.gz 文件并将其放在监视服务器的 /tmp 目录中
[root@hadoop1 tmp]# tar -zxvf ganglia-3.4.0.tar.gz
[root@hadoop1 ganglia-3.4.0]# ./configure --with-gmetad
Welcome to..
______ ___
/ ____/___ _____ ____ _/ (_)___ _
/ / __/ __ `/ __ \/ __ `/ / / __ `/
/ /_/ / /_/ / / / / /_/ / / / /_/ /
\____/\__,_/_/ /_/\__, /_/_/\__,_/
/____/
Copyright (c) 2005 University of California, Berkeley
Version: 3.4.0
Library: Release 3.4.0 0:0:0
Type "make" to compile.
[root@hadoop1 ganglia-3.4.0]# make -j8
[root@hadoop1 ganglia-3.4.0]# make install
安装web
[root@hadoop1 Downloads]# rpm -ivh ganglia-web-3.5.1-1.noarch.rpm
[root@hadoop1 Downloads]# service httpd start
启动成功后,通过访问http://hadoop1/ganglia就可以看到ganglia的首页了。
# Configuration of the "dfs" context for ganglia
dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext
dfs.period=10
dfs.servers=239.2.11.71:8649
# Configuration of the "mapred" context for ganglia
mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext
mapred.period=10
mapred.servers=239.2.11.71:8649
# Configuration of the "jvm" context for ganglia
jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext
jvm.period=10
jvm.servers=239.2.11.71:8649
注:239.2.11.71这个是ganglia用的多播的地址,不需要改成gmetad的服务器地址
如果需要监控hbase的话,也一样找到hbase目录下的这个文件,改法一样就不重复了。
改完以后重启hadoop服务