关于mongodb 的日志轮询
mongod每天要产生大量的日志,如果不去管它,我这边一周大约有10~20G的日志出来,可见日志轮询是必须的。
mongodb本身支持日志轮询的信号,所以我的日志轮询脚本如下:
#!/bin/sh
log_dir="/var/log/mongo/"
killall -SIGUSR1 mongod
/usr/bin/find ${log_dir} -name 'mongod.log.*' -mtime +5 -exec rm -f {} ;
然后每天零点零分跑一下。
我有6台mongodb,上面的脚本跑了一两个月一直挺正常。但是最近其中一台在做日志轮询的时候可能是产生了死锁,因为我首先收到了读写锁过多的报警,日志轮询没有成功,客户端也连不进去。收到报警后就连到服务器去看,查查日志,确定问题后重启mongodb就正常了。
这个脚本造成服务中断14分钟,mongodb用的是最新的稳定版本1.8.1,mongodb的稳定性还有待提高。
发生这个问题之后,上面的脚本就不敢再用了,对脚本进行了更改:
#!/bin/sh
log_dir="/var/log/mongo/"
date=`date +%Y-%m-%d`
cat ${log_dir}/mongod.log >> ${log_dir}/mongod.log.${date}
cat /dev/null > ${log_dir}/mongod.log
/usr/bin/find ${log_dir} -name 'mongod.log.*' -mtime +5 -exec rm -f {} ;
然后让他一小时跑一次,目前看还行,就是要多占一点磁盘IO,但是稳定第一,可以确保不会出现上面的问题了。