一、Ganglia概述
- 规模的问题
Ganglia的运行和绝大多数监控系统是不一样的, Ganglia设计最大的考虑就是为了解决规模的问题。
- 主机即监控系统
- 基于冗余的结构
Ganglia 假设用户主机存在冗余,或至少按照某种意义进行分组。
- Ganglia是否适合基于以下一些前提:
- Ganglia在结构上由三种守护进程组成gmond 、gmetad和gweb。在操作上,每种守护进程都是独立的,运行时只需要自己的配置文件来操作即可,任意守护进程在缺少其他两种守护进程的情况下也可以正常启动和运行。然而, 三者在结构上又是相互协作的,需要同时使用才能发挥功效。
- gmond
- gmetad:整合所有信息
- gweb
Ganglia可视化工具——gweb无需用户进行任何自定义设置即可便捷、及时地访问网络中任意一台主机的任意一种指标数据。
二、Ganglia的安装和配置
- 安装gmond
gmond ( Ganglia Monitoring Daemon )是一种轻量级服务,安装在每台需要收集指标数据的节点主机上。gmond在每台主机上完成实际意义上的指标数据收集工作,并通过侦听/通告协议和集群内其他节点共享数据。使用gmond ,可以很容易收集很多系统指标数据,如CPU 、内存、磁盘、网络和活跃进程的数据等。
Debian Linux:sudo apt-get install ganglia-monitor RPM Linux:yum installganglia-gmond - 安装gmetad
gmetad ( Ganglia Meta Daemon )是一种从其他gmetad或gmond源收集指标数据,并将其以RRD格式存储至磁盘的服务。gmetad为从主机组收集的特定指标信息提供了简单的查询机制,并支持分级授权,使得创建联合监测域成为可能。
Debian Linux:sudo apt-get install gmetad RPM Linux:sudo yum install ganglia-gmetad - 安装gweb
完整的Ganglia不能缺少网络接口: gweb ( Ganglia Web ) 。为了评估集群的运行状态,在收集多种不同指标数据后,我们需要这些指标数的展现形式可视化,更希望能够在Web界面中以图表方式展现。gweb 由此应运而生。gwe b是一种利用浏览器显示gmetad所存储数据的PHP前端。
Debian Linux:apt-get install apache2 php5 php5-json如果执行以上命令后,gweb还不能运行,执行以下命令以启动PHP JSON模块:
grep ^extension=json.so /etc/php5/conf.d/json.ini如果该模块还不能运行,执行以下命令:
echo ‘extension=json.so’ >> /etc/php5/conf.d/json.ini接下来下载最新版本的gweb(https ://ganglia.info/download),解压并编译Makefile来安装gweb:
tar -xvzf ganglia-web-major.minor.release.tar.gz cd ganglia-web-major.minor.release编译Makefile并设置变量DESTDIR和APACHE_USER。在Debian Linux上,默认设置为:
# Location where gweb should be installed to DESTDIR = /var/www/html/ganglia2 APACHE USER =WWW-data ...最后,运行以下命令:
make install - Ganglia的配置
多播并不是所有拓扑所必需的。在多播不适用的情况下,这种单发/单收拓扑可以使用UDP单播来实现。
配置文件:
命令:gmond -tdata 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 - 启动进程
①如果使用UDP单播拓扑,首先启动UDP汇聚节点,以确保它在其他节点首次传输元数据时处于侦听状态
②启动所有其他gmond程序。
③如果使用rrdcached ,启动所有rrdcached程序。
④启动层次结构中最低级别的gmetad程序
⑤按照层次顺序启动其他所有的gmetad程序。
⑥启动Apache网络服务器。Web 服务器应在gmetad之后启动。 - 检查安装
gmond 和gmetad都通过TCP socket侦听入站连接。为了检查gmond是否在指定的主机上工作, telnet到gmond的TCP端口:telnet localhost 8649gmond会输出XML格式的指标数据作为应答。
三、可扩展性
- gmond和ganglia集群的可扩展性
在发送/接收节点数量不多的小型网络中,通常默认的多播拓扑就够用了,但是在大型网络中最好进行可扩展性分析。
内存影响:节点数越多,从每个节点上收集的指标就越多,则用来收集其他节点指标的gmond进程的内存消耗也就越大。
CPU影响:gmond是单线程工作的,因此网络中指标到达速率越快, CPU 内核使用就越多。指标到达速率依赖三方面:节点数量、每个节点的指标数量和节点配置的传输新值的速率。 - RRD文件结构和可扩展性
Ganglia对每个检测指标创建一个RRD文件,而不是将多个数据源的指标数据包含在同一个RRD文件中。 - gmetad启动阶段的大量I/O需求
为了确保主机长时间停机后的顺利启动,规划时要认真考虑存储系统、采样间隔和保留时间等问题。 - 正常运行期间gmetad的I/O需求
实时写入的负荷:
非连续写入和并发存取一起造成了磁盘写访问模式的随机化
网络图表/报告的读取操作
报告的读取操作 - 预测I/O负荷
仔细规划和实时监测gmetad服务器时非常有必要的:
①取决于所需的RRA结构(采样间隔、保留时间以及MIN 、MAX或AVERAGE等函数)。
②为一个RRD文件创建足够大的逻辑卷( 4MB 即可)。格式化井挂载该逻辑卷。在新的文件系统上创建一个RRD文件样本。
③使用iostat观察逻辑卷上的写I/O:
iostat -k 60 -x /dev/dm-X
其中X代表实际的设备节点。
④为了观察iostat I/O级别,可以使用rrdupdate命令( man rrdupdate )手动向RRD文件写入更新
⑤观察iostat命令的输出,查看发生了多少读写IOPS ,注意查看的是IOPS计数值,而非速率。
⑥将IOPS计数值除以$PERIOD得到系统实时运行的真实IOPS速率(仿真运行速率大于实际运行速率,所以iostat报告的速率没有意义)。将IOPS速率乘以主机数和需要收集的指标数量,即可估计实时I/0 负荷
⑦用rrdcached重复仿真。 - 处理gmetad大量I/O需求的通用策略
①将RRD文件存储在高速磁盘(RAID0、SAN、SSD)
事实证明在SAN或SSD (solid-state drive )中存储RD文件时,系统性能更好。
②使用具有较大写人缓存的磁盘控制器
许多RAID控制器现在提供512MB 或IGB 的写入缓存。此外,这些控制器通常提供电池备份和闪存备份选项,以保证大容量写入缓存的可靠性。
③不要使用NFS
NFS通过严格的协议来确保完全执行硬盘写入。虽然这种方法在客户端/服务器模式中非常可靠(必需),但是对于I/O需求很大的应用,尤其是还需要访问多个文件时,NFS就不适用了。
④使用noatime选项挂载文件
开启noatime选项可以减少大量非必需的1/0操作,从而获得大量增益。
⑤在RAM磁盘上存储RRD文件
⑥使用rrdcached
rrdcached 是一种接收RRD文件更新,并计算更新量的守护进程,当接收到足够的更新或超过预定义时间时,该守护进程将向RRD文件中写入更新。
⑦设置反向代理
使用Squid之类的Web代理可以缓存图表,当多用户使用同一图表时就没有必要重复产生。通过这种方式可以动态减少I/O读取负荷。
⑧预先生成报告
设置计划任务( cron job )以预期间隔准备静态HTML报告。使用户方问静HTML报告,而不是直接访问gweb
⑨确保有足够的RAM
当更新RRD时, rrdtool必须读取和写入整个磁盘块,而不是只写入需要更改的字节。因此使用足够多的RAM作为页面存储器来缓存活动的磁盘块(每个RRD文件至少一个4096字节的块),可以避免在写I/O执行前rrdtool需要从磁盘读取块。
四、指标管理和扩展
- gmond:指标收集代理
在单播模式中,叶子节点是通过UDP连接,而非多播通道进行数据发送。在同一集群内可以同时使用多播模式和单播模式。 - 基本指标
使用Ganglia 自带的小型实用程序gmetric ,可以收集附加指标,并将其写入gmond代理所监听的单播通道和多播通道中。虽然gmetric提供了一种将新指标插入系统的方法,但实际上gmond还是不能收集
硬编码指标集合外的任何指标。扩展功能的引人必将增加gmond的主机占用,使指标偏差的风险加大,但如果采用模块接口的方式扩展gmond,用户可以通过配置将gmond的主机占用做到可控。 - 扩展指标
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213354.html原文链接:https://javaforall.net
