0

プライマリがデータセンターD1にあり、セカンダリノードがデータセンターD2にある3つのインスタンスでmongodbレプリカを設定しました。私たちのセットアップではフェールオーバーオプションは必要ありません。https://docs.mongodb.com/manual/tutorial/configure-secondary-only-replica-set-member/で説明されているように設定します。プライマリとの接続がないときにmongodbセカンダリノードから読み取り

同じデータセンターD2内のセカンダリノードの上に実行されているアプリケーション "A"はmongooseを使用しており、セカンダリノードからデータを読み取るように指定しました( "nearest"または "secondary"オプション)。

1)それは、プライマリMongoDBのノードである接続構成で指定せずに、特定のセカンダリノードからの読み取りに「A」を作ることが可能です:

私たちは、これらの問題に直面していますか?

2)データセンターD1とD2の間の接続が失われた場合、 "A"アプリケーションをセカンダリノードから読み込むことができます。これでmongoDBプライマリノードはもはや到達不可能ですか?私が理解する限り、 "A"でもセカンダリから読み込むように設定されているので、実際の読み込み操作を実行する前に、mongoDBはプライマリとセカンダリの間でping/arbitrappingを実行する必要があります。

3)mongodbレプリカセットプライマリインスタンスへの書き込み操作をスタンドアロンインスタンスとして直接実行し、レプリカセットの一部としてではなく、データセンターD2にアプリケーションを置くことは可能ですか?

バージョン: MongoDBの3.2.9、D1とD2とのネットワークパーティションにマングース4.5.9

答えて

1
  1. はい、read preference with tags

  2. 、原発は自動的にそれらのD2のノードの1つに転送されます。それはプライマリに対して最も最新のものです。 "priority settings"でこの選択を調整できます。 3つのうち2つのノードが稼働している限り、そのうちの1つがプライマリとして投票されます。

のは、あなたが持っている3つのノード想像してみましょう:

  • D1.N0
  • D2.N1
  • D2.N2
  • あなたは prioritiseすべき

ノード:

    今= 1

  • D1.N0.priority = 3
  • D2.N1.priority = 2
  • D2.N2.priority限りD1が到達可能であるように、その後D1.N0が主です。 D1とD2の間にネットワークパーティションがある場合、D2.N1はプライマリになり、D2.N2はセカンダリとして残ります。ネットワークパーティションが終了すると、D1.N0はD2.N1 opLogを読み取って欠落したデータを「追いつき」、再びプライマリになり、D2.N1はセカンダリになります。

    1. レプリカセットを使用している場合は、常にレプリカセットに書き込んでください。
  • 関連する問題