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,但是穩定第一,可以確保不會出現上面的問題了。