MongoDBのベストプラクティス10箇条

MongoDB Best Practicesという面白い記事があったので意訳してみます。
書いた人はEngine Yardという会社のひとです。
(Amazon EC2でMongoDBを運用する場合を主に想定しているようです。)

1.必ずレプリカセット(replica sets)を使いましょう

レプリカセットを使うと、自動フェイルオーバーにより可用性が向上します。
プライマリーノードがダウンしても、セカンダリノードが自動でプライマリーに昇格して、システム全体は落ちなくてすみます。
我々は、レプリカされていないMongoDBをサポートすることはありません。
レプリカのコストが大きいなら、MongoDBをホストしてくれるサービス(MongoHQMongoLabs)を検討しましょう。
Engine Yardはこれらの会社と提携しています。

2.常に最新バージョンを使いましょう

MongoDBは常に最新バージョンを使ってください。
10gen(MongoDBの開発元)はリリースのたびにたくさんの修正を入れていて、それらはあなたのシステムをより円滑に稼働するのに役に立ちます。
バージョン2.0.xではパフォーマンス、同時実行、インデックス、バグ修正、圧縮コマンドなどについての大幅な改善がなされています。
またシステムをアップサイズするのが格段にやりやすくなっています。
もしまだバージョン1.6.3を使っているなら、今すぐアップグレードしてください。

3.32bitマシンで稼働させないで

MongoDBは32bitシステムでは2.5GBのデータ制限があります。
そのストレージエンジンは性能向上のためにmemory-mappded fileを使っているので、利用可能なメモリーアドレスと結びついています。
Engin Yard Cloudでは、ラージンインスタンスの使用を推奨します。
我々は64bitインスタンス上のMongoDBのみサポートします。

4.ジャーナリング(journaling)は有効にしておこう

MongoDBはwrite-ahead journalingという機能があります。
これによりクラッシュリカバリが可能になり、ノードの堅牢性が高まります。
ジャーナリングをデフォルトで有効にすることを強くお勧めします。

5.データファイルの置き場所に気を使いましょう

MongoDBのデータファイル(例:/data/db/)が、永続的なパーティション上にあることを確認しましょう。
データファイルの置き場所はEBSにすることをお勧めします。
(訳注:EC2内蔵の揮発性ディスクに置かない方がよいという意味か?)

6.メモリにおさまるようにしましょう

データ(とインデックス)をメモリに収まるようにすることは、システム全体のパーフォマンスにおいて非常に重要です。
もしあなたのシステムのpage faults数が増加している(訳注:OSのページキャッシュに乗らなくなること?)ようであれば、
データサイズがRAMサイズより大きくなっている可能性が高いです。
その場合2つの選択肢があります。MongoDBのサーバインスタンスを増強するか、シャーディングするかです。
まずはインスタンス増強する方をお勧めします。

7.負荷が上がったらスケールアップしましょう

もしあなたのイインスタンスのloadが65%を超える(訳注:Engin Yard用語と思われる)ようなら、スケールアップを検討しましょう。
loadは平常時ではこの閾値以内に収まるようにするべきです。
これはリカバリやスケールアウトのシナリオにも影響します。
もしインスタンス増強する場合は、AWSは次のような増強行程を推奨しています。Large, Extra Large, High Memory 4XLです。
我々は、EBSボリュームを増強することで遅延が少なくなることを確認済みです。

8.シャーディングには要注意

シャーディングをする場合は、あなたのアプリケーションのデータアクセスパターンをしっかり把握しておくことが必要です。
ちゃんと時間をとって、MongoDBのシャーディングがどのように動くのか、本当にそれがあなたに必要かを理解してください。
そして、シャーディングキーを適切に選ぶことがパフォーマンスに影響することを忘れないでください。

設定サーバ(Config servers)はシステム健全性にとって非常に重要です。
シャード環境では最低3つの設定サーバが必要です。
絶対に設定情報を消してはいけません。常に頻繁にバックアップをとりましょう。
可能なら、/etc/hostsファイルを使って名前ベースでサーバを参照するようにしましょう。

設定サーバは小さなプロセスですが、これも64bitインスタンスで稼働させる必要があります。
3つのサーバを同一インスタンスで稼働させないでください!

9.Mongo MMSでサービスをグラフ化して監視しましょう

まだ使ってないなら、Mongo MMSを使うことを検討しましょう。
10genはこの製品を活発に開発中です。
あなたのシステムの健全性を視覚的にチェックするのにとても役に立つでしょう。

10.MongoDBの各種資料をフォローしましょう

MongoDBはすごい速さで進化しています。
最新の資料をチェックしましょう。

カテゴリ: