[Sy] MongoDB起動時に「Insufficient free space for journal files」とエラーになってしまう場合の対処
2015/10/01
fluentd(td-agent)とMongoDBを連携させてるサーバを再起動した際に、mongodbの起動に失敗していたのでその対処について。
MongoDBのログにはこんなエラーが出てました。
2015-10-01T08:22:45.965+0900 ***** SERVER RESTARTED *****
2015-10-01T08:22:45.969+0900 [initandlisten] MongoDB starting : pid=3662 port=27017 dbpath=/var/lib/mongo 64-bit host=vagrant-centos65.vagrantup.com
・
・
・
2015-10-01T08:22:46.024+0900 [initandlisten] journal dir=/var/lib/mongo/journal
2015-10-01T08:22:46.024+0900 [initandlisten] recover : no journal files present, no recovery needed
2015-10-01T08:22:46.024+0900 [initandlisten]
2015-10-01T08:22:46.024+0900 [initandlisten] ERROR: Insufficient free space for journal files
2015-10-01T08:22:46.024+0900 [initandlisten] Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles
2015-10-01T08:22:46.024+0900 [initandlisten]
2015-10-01T08:22:46.024+0900 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating
2015-10-01T08:22:46.024+0900 [initandlisten] dbexit:
2015-10-01T08:22:46.024+0900 [initandlisten] shutdown: going to close listening sockets...
2015-10-01T08:22:46.024+0900 [initandlisten] shutdown: going to flush diaglog...
2015-10-01T08:22:46.024+0900 [initandlisten] shutdown: going to close sockets...
2015-10-01T08:22:46.024+0900 [initandlisten] shutdown: waiting for fs preallocator...
2015-10-01T08:22:46.024+0900 [initandlisten] shutdown: lock for final commit...
2015-10-01T08:22:46.024+0900 [initandlisten] shutdown: final commit...
2015-10-01T08:22:46.024+0900 [initandlisten] shutdown: closing all files...
2015-10-01T08:22:46.024+0900 [initandlisten] closeAllFiles() finished
2015-10-01T08:22:46.024+0900 [initandlisten] journalCleanup...
2015-10-01T08:22:46.024+0900 [initandlisten] removeJournalFiles
2015-10-01T08:22:46.025+0900 [initandlisten] shutdown: removing fs lock...
2015-10-01T08:22:46.025+0900 [initandlisten] dbexit: really exiting now
journal file
のスペースがないよと言われてるっぽい。
そもそもjournal fileとはなんだろう??
journal fileについて調べる
以下記事が参考になりました。
⇒ MongoDBの新機能:ジャーナリングについて詳しく - doryokujin's blogジャーナルファイルへの先行書き込みによって、インデックス作成などのデータの変更処理の実行途中、あるいはいくつかのデータがディスクにフラッシュされていない状況でサーバーがダウンしてしまったとしても、再起動時にそのオペレーションを再実行することでデータのリカバリができるようになります。
なるほど。データの堅牢性を高める仕組みみたいですね。
解決方法
解決方法についてはここに書いてあるのを参考にしました。
⇒ MongoDBのjournalのファイルサイズが大きすぎる - 作業ノート参考記事は結構前のものだったからか若干パス等がぼくの環境(v2.6.11)とは違っていましたが、基本同じような感じでできました。
1. MongoDBを停止
$ sudo /etc/init.d/mongod stop
2. journalディレクトリのファイルを削除
$ sudo /rm /var/lib/mongo/journal/*
3. /etc/mongod.confを修正
/etc/mongod.conf
にsmallfiles=true
の行を追加します。これでjournal fileのサイズが小さくなるので先ほどのエラーが起きなくなるはずです。
# Disables write-ahead journaling
# nojournal=true
smallfiles=true
4. MongoDBを起動
$ sudo /etc/init.d/mongod start
無事起動に成功しました。