最近工作需要,碰到一个大量rrd写入的IO问题,决定使用rrdcached。
rrdcached官方文档:
中文翻译(感谢翻译者):
本次使用rrdtool的最新版,rrdtool-1.4.7
下载地址:
另外业务使用php来读写rrd文件,因此需要调用php的rrdtool extension,注意,一定要1.4.x版本以上,以前用的php_rrdtool.tar.gz和rrdtool.so是不支持rrdcached的。
最新版rrd.so源码下载:
rrd.so(原来叫rrdtool.so)的编译安装:
tar -zxvf rrd-1.1.0.tgz
cd rrd-1.1.0
/usr/local/php/bin/phpize
ln -s /usr/local/rrdtool/lib/librrd.so.4 /lib64/librrd.so.4
#不知是否我的人品问题,如果不做软连接,则会提示:
#error: rrd lib version seems older than 1.3.0, update to 1.3.0+
#configure会直接退出,检查config.log才发现conftest找不到librrd.so.4,故做软链接
./configure --with-php-config=/usr/local/php/bin/php-config
make
cp modules/rrd.so /usr/lib
然后在php.ini里填上extension=rrd.so
之后
[root@localhost rrd-1.1.0]# /usr/local/php/bin/php -i | grep rrd
rrd
rrd tool module => enabled
rrd tool module version => 1.1.0
rrdtool library version => 1.4.7 #看到这行则成功
RRDCACHED_ADDRESS => unix:/dev/shm/rrdcached.sock
PWD => /root/rrd-1.1.0
_SERVER["RRDCACHED_ADDRESS"] => unix:/dev/shm/rrdcached.sock
_SERVER["PWD"] => /root/rrd-1.1.0
然后启动rrdcached,启动参数自己根据需要,参考官方文档进行调整
#注意对sock文件的权限进行修改,否则php将无法读取,web是我启动php的用户,你们改成自己的。
/usr/local/rrdtool/bin/rrdcached -l unix:/dev/shm/rrdcached.sock -s web -F -w 3600 -z 3600 -f 86400
chown web.web /dev/shm/rrdcached.sock
随后添加环境变量
echo 'export RRDCACHED_ADDRESS="unix:/dev/shm/rrdcached.sock"' >> /etc/profile
这样的话,在命令行中使用/usr/local/rrdtool/bin/rrdtool update命令时,数据就会先存储到rrdcached中。