Syntax Error.

[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.confsmallfiles=trueの行を追加します。これでjournal fileのサイズが小さくなるので先ほどのエラーが起きなくなるはずです。

# Disables write-ahead journaling
# nojournal=true
smallfiles=true

4. MongoDBを起動

$ sudo /etc/init.d/mongod start

無事起動に成功しました。