web-dev-qa-db-ja.com

Mongoレプリカセット-接続文字列のアービター

MongoでReplicaSetを使用しています。接続文字列を作成すると、すべてのサーバーのホストとポートがコンマで区切られます。

私の質問は、そこにアービターアドレスを追加するのか、それともマスターとセカンダリだけにするのですか?

ありがとうございました!

5
Shlomi Sasson

レプリカセットへの接続

私の知る限り、ほとんどのドライバーは次の動作を示します

  1. 単一のノードのみが指定されている場合、ドライバーはこのノードに接続するだけです。
  2. replicaSetオプションが接続文字列で指定されている場合、ドライバーは上記のレプリカセットの探索を開始します接続文字列で指定されたノードの数に関係なく、非表示でないすべてのメンバーを識別するため。
  3. 接続文字列で複数のノードが指定されている場合、同じ動作がトリガーされます。これは上記よりも少しドライバに依存するため(たとえば、複数のmongosを指定できます同様に)、私は個人的にそれにあまり頼りません。

接続文字列にアービターを含める必要がありますか?

接続文字列でレプリカセットの少なくとも2つのメンバーを常に指定する必要がある理由は、これにより、1つのノードがダウンしている場合でも、ドライバーがレプリカセットに接続できるようになるためです。各ノードはレプリカセットを完全に認識しているため、これは任意のノードにすることができます(非表示のものを除くと思いますが、これを試したことはありません)。

2つのデータベアリングメンバーを持つ3ノードレプリカセットでは、アービターを接続文字列に含めることはあまり意味がありません。 2つのデータベアリングノードを指定し、両方に到達できない場合、レプリカセットに到達できなくなります。

ただし、5つのノードのレプリカセットでは、接続文字列にアービターを含めることができます。またはレプリカセットが利用できないことを安全に想定できます。

TL:DR

接続文字列にアービターを含めることは害にはなりませんが、2つのデータベアリングノードとアービターで構成される最小のレプリカセットでは少し意味がありません。

安全のために、ほとんどの場合、投票文字列の大部分を接続文字列に含めます。個々のメンバーがどのタイプのメンバーであるかは、レプリカセット検出の目的では重要な役割を果たしません。

常にreplicaSetオプションを接続文字列に追加することをお勧めします。これは、意図された目的を明確にするためのものです。

11

レプリカセットの有効なライブメンバーは、レプリカセットにあるが接続で指定されていないアービターを自動的に検出します。

ドライバーは、アービターが要求を処理しないことを知っているプラ​​イマリとセカンダリのみに要求をリダイレクトします。フェイルオーバーの場合の投票に役立ちます。

ただし、関連するすべてのメンバーを追加することは常に良い考えです。

2
Atish