用Ganglia监控一个近300个节点的集群,采样时间为默认的15s,加了一些自定义的参数,rrds目录容量74GB,12万个rrd文件。这样的一个规模下,平均每秒写入32MB、8k IOPS,平均每次写入只有4K数据,基本都是gmetad将采样的数据写入rrd文件中。这样高的IOPS对存储还是有明显的压力的,RRDtool中的rrdcached可以将对rrd的updates操作缓存到内存中然后在合并写入硬盘,显著降低了对硬盘的压力。
创建一个rrdcached的服务,编辑文件 /usr/lib/systemd/system/rrdcached.service,内容如下
[Unit] Description=Data caching daemon for rrdtool After=network.service Before=gmetad.service httpd.service [Service] Type=forking PIDFile=/run/rrdcached.pid ExecStart=/usr/bin/rrdcached -s ganglia -m 664 -l unix:/var/lib/ganglia/rrdcached.sock -s apache -m 777 -P FLUSH,STATS,HELP -l unix:/var/lib/ganglia/rrdcached_limited.sock -b /var/lib/ganglia/rrds -B -p /run/rrdcached.pid [Install] WantedBy=multi-user.target
- rrdcached.sock给gmetad用的、rrdcached_limited.sock限制了可用的操作给WEB前台用
- -b指定工作目录,-B限制在工作目录下
- -w指定缓存时间,如果更新时发现超过本文件已经缓存了超过此缓存时间,就放到写入队列中等待写入,默认300s
- -z指定随机延迟,每一个rrd写入时都插入一个随机延迟,此值不能比-w,默认为0
- -f指定超时,如果rrd超过此时间还没有更新则写入硬盘
启动服务
systemctl daemon-reload systemctl enable --now rrdcached.service
修改 /usr/lib/systemd/system/gmetad.service ,在[Unit]和[Service]段修改和添加,并重启gmetad服务
[Unit] ………… After=network.target rrdcached.service Requires=rrdcached.service [Service] Environment=RRDCACHED_ADDRESS=/var/lib/ganglia/rrdcached.sock ………… …………
修改前台网页的配置 /etc/ganglia/conf.php 添加一行,并重启httpd服务
$conf['rrdcached_socket'] = "unix:/var/lib/ganglia/rrdcached_limited.sock";