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をスタートさせるといいかな。