web-dev-qa-db-ja.com

レプリカセットのMongoDBロードバランサー

MongoDBのレプリカセットクラスターで、プライマリが別のリクエストの処理で忙しいときに、同意するユーザーに迅速な応答を保証するにはどうすればよいですか?

ロードバランサーを使用する必要がありますか、それともmongodb自体がクエリを利用可能なセカンダリにルーティングしますか?

ありがとう

6
Geek

ロードバランサーを使用したり、クエリをセカンダリノードにルーティングしたりする必要はありません。プライマリノードは、それ自体で同時クエリを処理できます。

  1. MongoDBは、きめ細かいロックシステムを使用して、読み取りと書き込みの両方の同時クエリをサポートします
  2. 追加の読み取り容量を提供するためにセカンダリを使用することはお勧めしません レプリケーション設計により、ほとんどのユースケースでこれが非効率的で信頼性が低くなるためです。
  3. プライマリが単一のリクエストの処理に長い時間を要し、他のリクエストをロックアウトする場合は、非効率的なクエリを再設計するか、適切な indexes を追加することで対処する必要があります。
  4. クエリが最適化されているにもかかわらず、サーバーが複数のユーザーにサービスを提供するのに苦労している場合は、 ハードウェア がジョブに不十分かどうかを確認してください
  5. それでも読み取りと書き込みをスケールアウトする必要がある場合は、レプリカセットの他のノードを使用するのではなく、 シャーディング を使用することをお勧めします。
14
Vince Bowdren

通常、書き込みはマスターによって処理され、読み取りは読み取りプリファレンスを設定してセカンダリに送信する必要があります。セカンダリはデータ複製にoplogコピーを使用するため、データがセカンダリに伝播されるまでにはごくわずかな時間がかかる場合があります。

ロードバランサーは必要ありません。Mongoはこれらのことを実行できます。詳細はこちら-

https://docs.mongodb.com/manual/replication/

1
Aky_0788