web-dev-qa-db-ja.com

他のノードが停止している場合、MongoDBセカンダリノードがプライマリにならない

レプリカセットを使用してMongoDBをクラスター化したい。 3つのノードのレプリカセット(rs0、rs1、rs2)を作成し、問題なくDBを並列実行しました。しかし、任意の2つのインスタンス(1つのプライマリとセカンダリ)をシャットダウンすると、残りのセカンダリメンバーはプライマリにならず、セカンダリのままになります。

ステップ1:

  • rs0:プライマリ
  • rs1:セカンダリ
  • rs2:セカンダリ

全て大丈夫。いつ

ステップ2:

  • rs0:停止
  • rs1:停止
  • rs2:セカンダリ(これはプライマリに昇格されません)

どうして?

2
s_kumar

これは仕様によるものです。 1つのノードのみで実行する場合は、レプリカセットスイッチなしでそのノードを再起動します。

レプリカセットの大部分が現在のプライマリにアクセスできない、または利用できない場合、プライマリは降格してセカンダリになります。この後、レプリカセットは書き込みを受け入れることができませんが、セカンダリで実行するようにクエリが構成されている場合、残りのメンバーは引き続き読み取りクエリを処理できます。

詳細については、次のリソースをご覧ください。

  1. レプリカセットの選択
  2. 単一サーバーに設定されたmongoレプリカ
  3. MongoDBでの投票
3
SqlWorldWide