mongodb:ロードバランサー付きのレプリカセット


9

mongodbレプリカセットを使用した負荷分散のオプションはありますか?私はHAProxyなどを求めているのではなく、mongodbの組み込み機能を求めています。ドキュメントにこれに関するヒントが見つかりませんでした。

回答:


11

シャーディングを使用している場合、「ロードバランサー」はmongosプロセスです。実際はルーターのようなものです。構成データベースのメモリ内コピーを保持し、シャードキーに基づいて決定を行うことができます。

同一のレプリカセット間またはセットのメンバー間でのロードバランシングを意味する場合、mongosにそのシナリオも処理するよう要求する機能リクエストがあります(https://jira.mongodb.org/browse/SERVER-1594)。ただし、ドライバーがどのように動作するかは、実際には必要ありません(ドライバーをそれほど複雑にすることはありません)。

単一のレプリカセットでは、書き込みを分散できません。それらはすべてプライマリに移動する必要があります。必要に応じて、[ 読み取り設定]を使用して、すでにセカンダリに読み取りを配布できます。ドライバーは、プライマリとセカンダリを追跡し、クエリを適切にルーティングします。


2

「負荷分散」は、シャーディングによって実現されます。シャーディングにより、実際に書き込み/更新を個々のシャードに分散します。mongoを使用すると、必要なキーの組み合わせに基づいてデータを分割できるため、これを行う特定のアルゴリズムはありません。最適なパーティションアルゴリズムは、連続したエントリとランダムなエントリの複合のアルゴリズムです。

たとえば、ユーザーIDは次のように分割できます。

xx-sha1(user email) 
xx = time sequence

シャーディングを実装するには、3つの構成サーバーとデータノードが必要であることに注意してください。データノードは、冗長性のためにレプリカセットにグループ化でき、セカンダリからデータを読み取るために使用できます(可能な場合のみ)。レプリケーションは非同期で行われるため、データを読み取ることができる場合にのみ言うので、新しいデータがクエリ時にセカンダリで利用可能になる保証はありません。

パーティションアルゴリズムは完全にあなた次第であり、アプリケーションのニーズに合うはずです。また、データを書き込みたいだけで、たまに読み取りが必要な場合や、書き込んだ直後に読み取る必要がある場合も検討する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.