mongod每天要產(chǎn)生大量的日志,如果不去管它,我這邊一周大約有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 {} \;
然后每天零點(diǎn)零分跑一下。
我有6臺mongodb,上面的腳本跑了一兩個月一直挺正常。但是最近其中一臺在做日志輪詢的時候可能是產(chǎn)生了死鎖,因?yàn)槲沂紫仁盏搅俗x寫鎖過多的報警,日志輪詢沒有成功,客戶端也連不進(jìn)去。收到報警后就連到服務(wù)器去看,查查日志,確定問題后重啟mongodb就正常了。
這個腳本造成服務(wù)中斷14分鐘,mongodb用的是最新的穩(wěn)定版本1.8.1,mongodb的穩(wěn)定性還有待提高。
發(fā)生這個問題之后,上面的腳本就不敢再用了,對腳本進(jìn)行了更改:
#!/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 {} \;
然后讓他一小時跑一次,目前看還行,就是要多占一點(diǎn)磁盤IO,但是穩(wěn)定第一,可以確保不會出現(xiàn)上面的問題了。