8
9

More than 5 years have passed since last update.

MongoDBをプロダクションで運用して分かったReplicaSetの落とし穴に落ちないためのチェックリスト

Last updated at Posted at 2015-11-28

新たなサーバーを気軽にReplicaSetのメンバーに追加すると 同期の負荷に耐えられなくなることがある という落とし穴がある。ResplicaSetって便利な機能だけど、正しく利用しないと痛い目にあうので、チェックリストをまとめることにした。

キャパシティプランニングは入念に行っているか?

当たり前だが、これを怠ると同期した瞬間サーバーが負荷に耐えられなくなり大変なことになる場合がある。どの程度のプランニングが必要か?基本、iopsとmemoryとcpuを十分確保することを勧めたい。ギリギリのキャパシティーだと危険。富豪ならスパイク時の2、3倍のキャパは欲しいところ。

使っているバージョンのバグを把握しているか?

例えば、v3.0.5の場合、awsの方から聞いて知ったのですが、負荷に耐えられない問題があるらしく、至急アップデートすることになった。この様にバグを把握していると、未然に防げることがある。当たり前の話しだけど、基本、できるだけ新バージョンを使うようにした方が良いと考えている。ただ、DBのバージョンアップは辛いのでついつい怠ってしまうことがある。

サーバーの設定は正しく行っているか?

プロダクション利用の場合、しっかりProduction Notes読んで、設定を怠らないことが重要。
https://docs.mongodb.org/manual/administration/production-notes/

データの容量が膨れないようにしているか?

データ容量が大きいと同期の時間が長くサーバーへの負荷が増す状態が続く。気持ち的に辛い。backupしたデーターを移動してなどの対応も考えられるが、ReplicaSetの手軽さの恩恵が受けられれない。肥大していくデータをMongoDBで扱うのはお勧めできない。

特にGridFSを使っているDBをReplicaSetにおくと、どんどんデータが肥大していくので気をつけた方が良い。私の結論として、GridFSはProductionでは使わない方が得策。使う場合、ReplicaSetのメンバーに入れない使い方を考えた方が良い。

DBをうまく使い分けているか?

DBの用途によって、ReplicaSetを使わない、もしくは、メンバーに入れないという選択肢もある。

例えば、アプリケーションでReadとWriteを使い分けてDBに接続してサーバーのパフォーマンスを引き出すなどするためのDBは、ReplicaSet向きだと言えるが、バッチやバックグラウンドで何か処理するために使うデータ、例えばログ的なものは、ReplicaSetを使う必要はないので別にDBを作るか、別のものを使った方が良い。データー容量の肥大化も防げる。

まとめ

ReplicaSetはとても便利で簡単に使えるが、間違った使い方をすると落とし穴に落ちてしまう可能性がある。是非、チェックリストを参考にMongoDBと戯れてみてください。

以下、MongoDB+WiredTiger+ReplicaSet+NewRelicでサーバー構築について書いてます。
http://qiita.com/kiyotaman/items/354875fbd421594698d0

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9