MongoDBのjournal機能で生成されるファイル

Redisを利用したセッション管理について書こうと思っていましたが、MongoDBのjournal機能で生成されるファイルのサイズが大きすぎてサーバが正常に起動できない問題に遭遇したので、そのことを先に書こうと思います。

MongoDBはNoSQLなDBで最近話題です。node.jsとの相性も良いとのことでnodeとあわせて話題に出ることもしばしば。

そのMongoDBのv.1.8から追加された機能としてjournalがあります。
詳しくはわかってないのですが、MongoはリクエストがあるたびにDBに書きこみをしているわけではなくて、スタックに貯めておいてある間隔でDBに書きこむらしい。なので、スタックにあるデータがDBに書き込まれる前にクラッシュしても、journalを使うとそのスタックにあるデータを保管しておいて、次の起動時にリカバリできるっていうことらしいです。
次のページが詳しいです。
MongoDBの新機能:ジャーナリングについて詳しく - doryokujin's blog

便利なjournal機能なんですが、journal機能で生成されるファイルperlloc.0、perlloc.1、perlloc.2がそれぞれ1GBもある。合計で3GB。
レンタルVPSの980円プランはだいたい容量10GBなのでその3GBっていうのは大きすぎる。
でそのjournal機能で生成されるファイルを残したまま再起動した結果、空き容量が不足して完全に起動できない状況に。
なんとかsshではログインできたので、/data/db/journal/以下のファイルを削除することで無事起動できるようになった。

このjournal機能は1.9.2以上の64bit版だとデフォルトで有効になるらしい。
これをオフにするには起動時に

%     mongod    --nojournal

を付けないといけない。

MySQLみたいにconfファイルでできないのかなと探したところ、ありました。
Configuration File Options — MongoDB Manual

というわけで、/etc/mongodb.confに

 nojournal = true

と書いて保存。
これで起動しても設定が効いていない。どんどんperllocファイルができる。


という訳でconfファイルのパスを渡してあげる。

%    mongod   --config /etc/mongodb.conf

これでjournal機能をオフにすることができる。

これを/etc/rc.localに書いて起動と同時にmongoをスタートさせるといいかな。