一、Ganglia概述
规模的问题
Ganglia的运行和绝大多数监控系统是不一样的, Ganglia设计最大的考虑就是为了解决规模的问题。
主机即监控系统
基于冗余的结构
Ganglia 假设用户主机存在冗余,或至少按照某种意义进行分组。
Ganglia是否适合基于以下一些前提:
④ 操作系统和网络兼兼容多播或用户数据报协议UDP。Ganglia在结构上由三种守护进程组成gmond 、gmetad和gweb。在操作上,每种守护进程都是独立的,运行时只需要自己的配置文件来操作即可,任意守护进程在缺少其他两种守护进程的情况下也可以正常启动和运行。然而, 三者在结构上又是相互协作的,需要同时使用才能发挥功效。
gmond
gmond并不是消极等待被监控系统服务器唤醒,而总是处于激活态,以便进行测量、传输和共享。轮询器不再需要知道从哪些主机获取哪些服务,而只需要一个包含每个集群内至少一台主机名称的列表即可。gmetad:整合所有信息
作为数据存储的一种流行的解决方案,RRDtool是很好的选择。指标数据存储于轮询数据库(Round Robin Database),这种数据库包含了多个时间块内静态分配的数值。如果每10秒进行一次轮询,每次数据都进行存储,一天将需要8640次存储。考虑到数据保留需求, RRDtool 内部以“循环覆盖”的方式管理数据,将新数据的值叠加到原来的数值上来覆盖原有数据。
Ganglia可视化工具――gweb无需用户进行任何自定义设置即可便捷、及时地访问网络中任意一台主机的任意一种指标数据。
二、Ganglia的安装和配置
gmond ( Ganglia Monitoring Daemon )是一种轻量级服务,安装在每台需要收集指标数据的节点主机上。gmond在每台主机上完成实际意义上的指标数据收集工作,并通过侦听/通告协议和集群内其他节点共享数据。使用gmond ,可以很容易收集很多系统指标数据,如CPU 、内存、磁盘、网络和活跃进程的数据等。Debian Linux:sudo apt-get install ganglia-monitor RPM Linux:yum installganglia-gmond
- 1
- 2
- 3
gmetad ( Ganglia Meta Daemon )是一种从其他gmetad或gmond源收集指标数据,并将其以RRD格式存储至磁盘的服务。gmetad为从主机组收集的特定指标信息提供了简单的查询机制,并支持分级授权,使得创建联合监测域成为可能。Debian Linux:sudo apt-get install gmetad RPM Linux:sudo yum install ganglia-gmetad
- 1
- 2
- 3
完整的Ganglia不能缺少网络接口: gweb ( Ganglia Web ) 。为了评估集群的运行状态,在收集多种不同指标数据后,我们需要这些指标数的展现形式可视化,更希望能够在Web界面中以图表方式展现。gweb 由此应运而生。gwe b是一种利用浏览器显示gmetad所存储数据的PHP前端。Debian Linux:apt-get install apache2 php5 php5-json
- 1
- 2
如果执行以上命令后,gweb还不能运行,执行以下命令以启动PHP JSON模块:
grep ^extension=json.so /etc/php5/conf.d/json.ini
- 1
- 2
如果该模块还不能运行,执行以下命令:
echo ‘extension=json.so’ >> /etc/php5/conf.d/json.ini
- 1
- 2
接下来下载最新版本的gweb(https ://ganglia.info/download),解压并编译Makefile来安装gweb:
tar -xvzf ganglia-web-major.minor.release.tar.gz cd ganglia-web-major.minor.release
- 1
- 2
- 3
编译Makefile并设置变量DESTDIR和APACHE_USER。在Debian Linux上,默认设置为:
# Location where gweb should be installed to DESTDIR = /var/www/html/ganglia2 APACHE USER =WWW-data ...
- 1
- 2
- 3
- 4
- 5
最后,运行以下命令:
make install
- 1
- 2
Ganglia的配置
gmond默认拓扑为多播模式,也就是说集群内所有节点都收发指标数据,每个节点维护一个内存数据库一一以哈希表的形式存储集群内所有节点的指标数据。
“单发”节点的使用消除了大型集群的运行开销。单发和单收参数的出现使得一些gmond节点可以充当其他gmond节点的专用汇聚器和中继器。单收指的是那些不传送数据的节点,它甚至不收集本节点的指标数据,但是却汇聚集群内其他gmond的指标数据。单发指的是那些不接收任何网络中指标数据,也不侦听多播成员状态信息的节点,只要它不同时是单收节点,就可以继续为其他侦听节点发送指标数据。多播并不是所有拓扑所必需的。在多播不适用的情况下,这种单发/单收拓扑可以使用UDP单播来实现。
配置文件:
命令:gmond -t
- 1
- 2
send_metadata_interval:gmond两次发送指标数据的时间间隔。在单播模式下必须设置重发间隔。
owner:集群管理员
gmetad通过tcp端口8651侦听远程gmetad连接,并且向授权主机提供XML格式的网格状态。gmetad也通过tcp端口8652对交互式请求做出应答。
最简单的gmetad拓扑结构为一个gmetad进程轮询一个或多个gmond。冗余性或高可用性是一项基本要求,比如两个(冗余)gmetad轮询同一集群内的多个gmond。同时,gmetad并不局限于轮询gmond,gmetad也可以通过轮询另外的gmetad来创建层次化的gmetad结构。
data_source 属性。data_source属性是gmetad配置的核心。每一行data_source描述一个gmetad收集信息的gmond集群或gmetad 网格。data source ” my cluster" 10 localhost my.machine.edu:8649 1.2.3.5:8655 data_source "my grid" 50 1.3.4,7:8655 grid.org:8651 grid-backup.org:8651 data source ” another source” 20 1.3.4,8:8655 1.3,4,8
- 1
- 2
- 3
- 4
【注意】gmetad 会依次检测指定主机,并从第一台响应主机开始收集状态数据,所以无需在data_source定义里指定集群内的所有主机。假若有节点失效,通常指定两三个主机也就足够保证数据的收集。
http://hostname/ganglia
gweb可使用Graphite (而非RRDtool )作为在UI上生成图表的工具。
⑥启动Apache网络服务器。Web 服务器应在gmetad之后启动。
gmond 和gmetad都通过TCP socket侦听入站连接。为了检查gmond是否在指定的主机上工作, telnet到gmond的TCP端口:telnet localhost 8649
- 1
- 2
gmond会输出XML格式的指标数据作为应答。
三、可扩展性
CPU影响:gmond是单线程工作的,因此网络中指标到达速率越快, CPU 内核使用就越多。指标到达速率依赖三方面:节点数量、每个节点的指标数量和节点配置的传输新值的速率。
Ganglia对每个检测指标创建一个RRD文件,而不是将多个数据源的指标数据包含在同一个RRD文件中。
为了确保主机长时间停机后的顺利启动,规划时要认真考虑存储系统、采样间隔和保留时间等问题。
报告的读取操作
⑦用rrdcached重复仿真。
当更新RRD时, rrdtool必须读取和写入整个磁盘块,而不是只写入需要更改的字节。因此使用足够多的RAM作为页面存储器来缓存活动的磁盘块(每个RRD文件至少一个4096字节的块),可以避免在写I/O执行前rrdtool需要从磁盘读取块。
四、指标管理和扩展
在单播模式中,叶子节点是通过UDP连接,而非多播通道进行数据发送。在同一集群内可以同时使用多播模式和单播模式。
硬编码指标集合外的任何指标。扩展功能的引人必将增加gmond的主机占用,使指标偏差的风险加大,但如果采用模块接口的方式扩展gmond,用户可以通过配置将gmond的主机占用做到可控。扩展指标