2つのデータセンター間のMongoDB自動フェイルオーバー

2つのデータセンター間のMongoDB自動フェイルオーバー

MongoDb レプリカ セットを 2 つのデータ センターにのみ展開した場合、1 つのデータ センター全体に障害が発生した場合、他のデータ センターに自動的にフェイルオーバーできますか?

1 つのデータ センターにプライマリ、セカンダリ、アービターがあり、2 番目のデータ センターにセカンダリ メンバーが 2 つある状況を考えてみましょう。基本的には、5 つのメンバーのレプリカ セットです。

データセンター 2 がダウンした場合でも、データセンター 1 のレプリカ セットには 3 つのメンバーが残ります。これは素晴らしいことです。

逆に、データ センター 2 が稼働したままデータ センター 1 が停止した場合、5 つのメンバー レプリカ セットのうち 2 つのメンバーのみが残ります。これでは、セカンダリがプライマリになるために投票するには不十分です。

それは正しいですか? そうでない場合、何が間違っているのでしょうか。

これが不可能な場合は、他のオプションを検討できるようにお知らせください。

アービターを収容するための 3 番目のデータ センターを追加することは選択肢ではありません。

答え1

あなたの質問に対する答えは、2 つの場所だけで行うことは不可能であるということです。

これが不可能な理由は、次のように説明できます。両方の場所が完全に機能しているが、2 つの場所間のネットワーク接続に障害がある場合、機能し続けるのは 1 つだけになる可能性があります。この場合、両方の場所が同時にプライマリを選択することは許容されません。

ある場所から、他の場所が完全にダウンしているか、他の場所は稼働しているが 2 つの場所間のネットワーク接続がダウンしているかを区別する方法はありません。

したがって、各拠点が、もう一方の拠点がダウンしているときに独立してプライマリを選択できる場合、ネットワークが停止すると、2 つのプライマリが同時に存在する可能性があります。プライマリが 2 つあることは許容されないシナリオであり、これが 2 つの拠点のうちの 1 つだけがプライマリを選択できる理由です。

3つの拠点があれば十分です障害の動作について仮定を立てる場合。障害を想定せずに機能するソリューションでは、1 つの場所の停止を許容するために、少なくとも 4 つの場所が必要になります。この要件は、ビザンチン協定の分野における重要な定理の 1 つから生じます。

答え2

1 つの選択肢としては、最初のデータ センターにプライマリとセカンダリを配置し、2 番目のデータ センターに 2 つのセカンダリを配置し、3 番目のデータ センターにアービターを配置することが考えられます。

関連情報