web-dev-qa-db-ja.com

物理マシンにバインドされている場合、MongoDBをいつどのようにシャーディングする必要がありますか?

MongoDBからのデータを提供する検索サービスを維持しています。 Mongoの本番インスタンスは、4つの物理サーバーにまたがる4ノードのレプリカセットに配置されています。

データベースは、いくつかの小さなコレクションと1つの大きなコレクションで構成されています。大規模なコレクションには、次の特徴があります。

  • 文書数:3500万
  • 平均ドキュメントサイズ:〜4.2 kB
  • コレクションサイズ:151 GB
  • storageSize:157 GB

来年には、このコレクションのドキュメント数は2倍の約7,000万になり、コレクションのサイズは2倍になると予想されます。

Mongo Reference Limits ドキュメントの「ShardingExisting Collection Data Size」セクションでは、「ドキュメントを保持する既存のコレクションの場合、MongoDBは有効化をサポートしている」と指定されていることを認識しています。 256ギガバイト未満のデータを含むコレクションのシャーディング。MongoDBは、ドキュメントサイズの分布によっては、最大400ギガバイトのコレクションをシャーディングできる場合があります "。したがって、256ギガバイトのデータに到達する前に十分にシャーディングしたいと思います。

私たちはリソースにいくつかの制約があり、(まだ)仮想化する立場にありません。しかし、私たちは2台の新しいサーバーを購入できる立場にあり、合計で6台の実稼働マシンになります。

私の質問は、Mongoを2つのシャードに分割することは可能ですか?それぞれが6つの物理サーバーのみで設定された3サーバーのレプリカです。レプリカセットに加えて、3台のconfigサーバーと1台のmongosサーバーが必要であることを認識していますか?

シャーディングする必要がありますか?現在のRAMの使用量と接続数は現在、許容レベル内に十分収まっています。データベースを拡張できるようにするために、シャーディングを伴わない他の戦略を採用できますか?

3
Chris M

1)レプリカセットに4つのノードが必要なのはなぜですか?レプリカセットで偶数のノードを使用すると、非常に問題が発生する可能性があります。フェイルオーバーが発生すると、ノード間でどちらがプライマリになるかを決定するための選択があるためです。これを読んでください-> http://docs.mongodb .org/manual/core/Replica-set-elections /

3つのノードで十分です。2つの実際のdbノードと1つの小さなアービターが選挙に役立ちます

2)シャードクラスター->シャードごとに最小レプリカセットを持つ2つのシャードを持つクラスターの物理サーバーの最小数は9(!)であり、分割は次のとおりです。シャード1(レプリカセット):2データノード+1 arbitar(マイクロインスタンスにすることができます)シャード2(レプリカセット):2つのデータノード+ 1つのarbitar(マイクロインスタンスにすることができます)3つの構成サーバー(必須!!)-これらはかなり小さいマシンにすることができます-Amazonでt1.microインスタンスを使用しますAWS。

クラスターに追加する各シャードには、上記のように3つの物理ノードが追加されます。

mongos->これらは、アプリケーションのmongoドライバーが対話する必要のあるクライアントインスタンスです。 Uはそれらを任意のWebサーバーの一部として展開できるため、別のマシンは必要ありません。

詳細については、こちらをご覧ください http://docs.mongodb.org/manual/core/sharded-cluster-architectures-production/

2
Sharon Abu