如果每秒 I/O 操作是您的主要瓶颈,并且您使用的是 Linux,那么有一个简单的技巧,它只会消耗您的内存。使用 tmpfs 挂载来暂存您的 RRD 写入。
所有的 i/o 操作都将在内存中完成,并且不会出现在执行磁盘 i/o 时发现的任何瓶颈(这甚至比使用固态磁盘更快)。然后,您可以使用 cron 作业和 rsync 每隔几分钟将更改的 RRD 复制到磁盘一次。
创建目录
bash-4.2# mkdir /mnt/rrd-reads
bash-4.2# mkdir /mnt/rrd-writes
使用适当的选项创建最大 500MB 的 RAM 文件系统
bash-4.2# mount -t tmpfs -o size=500m,mode=0750,uid=collectd,gid=collectd none /mnt/rrd-writes
bash-4.2# echo "none /mnt/rrd-writes tmpfs size=500m,mode=0750,uid=collectd,gid=collectd 1 2" >> /etc/fstab
将旧的 RRD 文件复制到新的挂载点
bash-4.2# cp -a /var/lib/collectd/rrd/* /mnt/rrd-writes
配置您的 rrd 写入应用程序以写入新的挂载点
bash-4.2# sed -i -e 's/DataDir "\/var\/lib\/collectd\/rrd"/DataDir "\/mnt\/rrd-writes"/' /etc/collectd/collectd.conf
设置 cron 作业以每 2 分钟仅将更改的 RRD 同步到磁盘一次
bash-4.2# echo "*/2 * * * * collectd rsync -a /mnt/rrd-writes/* /mnt/rrd-reads/ ; sync" > /etc/cron.d/rrd-sync
不要忘记将您保存的 RRD 文件复制到安装点在开始您的 rrd 编写应用程序之前!您可能需要编辑该服务的初始化脚本,以确保文件在它启动之前就在那里。如果它在没有文件的情况下启动,则会创建新的裸文件,并且一旦读取的目录被空 RRD 覆盖,您会感到非常困惑。
如果在某些时候您需要调整 tmpfs 挂载的大小,您可以随时进行:
bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes