Если ваши операции ввода-вывода в секунду являются вашим главным узким местом, и вы используете Linux, существует простой способ, который стоит только вашей памяти. Используйте монтирование tmpfs для создания записей RRD.
Все операции ввода-вывода будут выполняться в памяти и не повлекут за собой каких-либо узких мест, возникающих при выполнении дискового ввода-вывода (это даже быстрее, чем при использовании твердотельных дисков). Затем вы можете использовать задание cron и rsync для копирования только измененных RRD на диск каждые несколько минут.
Создание каталогов
bash-4.2# mkdir /mnt/rrd-reads
bash-4.2# mkdir /mnt/rrd-writes
Создание файловой системы ОЗУ не более 500 МБ с соответствующими параметрами
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 для синхронизации только измененных RRD на диске один раз каждые 2 минуты
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