MongoでReplicaSetを使用しています。接続文字列を作成すると、すべてのサーバーのホストとポートがコンマで区切られます。
私の質問は、そこにアービターアドレスを追加するのか、それともマスターとセカンダリだけにするのですか?
ありがとうございました!
私の知る限り、ほとんどのドライバーは次の動作を示します
replicaSet
オプションが接続文字列で指定されている場合、ドライバーは上記のレプリカセットの探索を開始します接続文字列で指定されたノードの数に関係なく、非表示でないすべてのメンバーを識別するため。mongos
を指定できます同様に)、私は個人的にそれにあまり頼りません。接続文字列でレプリカセットの少なくとも2つのメンバーを常に指定する必要がある理由は、これにより、1つのノードがダウンしている場合でも、ドライバーがレプリカセットに接続できるようになるためです。各ノードはレプリカセットを完全に認識しているため、これは任意のノードにすることができます(非表示のものを除くと思いますが、これを試したことはありません)。
2つのデータベアリングメンバーを持つ3ノードレプリカセットでは、アービターを接続文字列に含めることはあまり意味がありません。 2つのデータベアリングノードを指定し、両方に到達できない場合、レプリカセットに到達できなくなります。
ただし、5つのノードのレプリカセットでは、接続文字列にアービターを含めることができます。またはレプリカセットが利用できないことを安全に想定できます。
接続文字列にアービターを含めることは害にはなりませんが、2つのデータベアリングノードとアービターで構成される最小のレプリカセットでは少し意味がありません。
安全のために、ほとんどの場合、投票文字列の大部分を接続文字列に含めます。個々のメンバーがどのタイプのメンバーであるかは、レプリカセット検出の目的では重要な役割を果たしません。
常にreplicaSet
オプションを接続文字列に追加することをお勧めします。これは、意図された目的を明確にするためのものです。
レプリカセットの有効なライブメンバーは、レプリカセットにあるが接続で指定されていないアービターを自動的に検出します。
ドライバーは、アービターが要求を処理しないことを知っているプライマリとセカンダリのみに要求をリダイレクトします。フェイルオーバーの場合の投票に役立ちます。
ただし、関連するすべてのメンバーを追加することは常に良い考えです。