使用 rrdcached 解决 Ganglia 高 IOPS

用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,内容如下

  • rrdcached.sock给gmetad用的、rrdcached_limited.sock限制了可用的操作给WEB前台用
  • -b指定工作目录,-B限制在工作目录下
  • -w指定缓存时间,如果更新时发现超过本文件已经缓存了超过此缓存时间,就放到写入队列中等待写入,默认300s
  • -z指定随机延迟,每一个rrd写入时都插入一个随机延迟,此值不能比-w,默认为0
  • -f指定超时,如果rrd超过此时间还没有更新则写入硬盘

启动服务

修改 /usr/lib/systemd/system/gmetad.service ,在[Unit]和[Service]段修改和添加,并重启gmetad服务

修改前台网页的配置 /etc/ganglia/conf.php 添加一行,并重启httpd服务