奇数セットをお勧めします。私の疑問は、奇数のセットから下がるにつれて、偶数のセットがあることです。メンバーの数は、1つずつ下がると、偶数と奇数の間で変動します。私たちはいつも奇妙なメンバーのシナリオを持っていません。MongoDBの投票がどのように機能するかを誰かが説明できますか?
1 に答える
投票は、投票メンバーの過半数によって行われます。
3人の(投票)メンバーがいるレプリカセットを想像してみてください。ノードAがプライマリで、ノードB+Cがセカンダリであるとしましょう。ノードAがダウンしたため、ノードB+Cが選出されます。彼らはまだ過半数を形成しています(3人に2人)。選挙は最初に優先順位によって決定されます。ノードBとCの両方の優先度が同じである場合、失敗したプライマリ(oplog)に関して最新のノードが優先されます。ノードBだとしましょう。
ノードAが生き返ると、新しい選出はありません。ノードBはマスターのままであり、C+Aはセカンダリになります。
一方、2つのノードがダウンした場合、過半数がないため、2つの障害のあるサーバーの少なくとも1つが稼働する(そして単一のサーバーによって接続される)まで、レプリカセットは更新を受け入れる(書き込みを適用する)ことができなくなります。生き残ったノード)再び。
4人の(投票)メンバーがいるレプリカセットを想像してみてください。ノードAがプライマリで、ノードB + C+Dがセカンダリであるとしましょう。ノードAがダウンするため、ノードB + C+Dが選出されます。もちろんそれらは過半数を形成します(4つのうち3つ)
ただし、2つのノードがダウンした場合、過半数(4つのうち2つ)がないため、レプリカセットは再び読み取り専用モードになります。
そのため、奇数が推奨されます。3メンバーのレプリカセットで1つのメンバーを失う場合は、4メンバーのレプリカセットで1つのメンバーを失うのと同じです。クォーラムの過半数を獲得し、新しいプライマリを選出できます(RSは、次の方法で新しいマスターを選出できます。多数)。一方、3メンバーのレプリカセットまたは4メンバーのレプリカセット(またはnメンバーのレプリカセットのn / 2メンバー)の2つのメンバーを失う場合、影響は同じです。新しいリーダーに投票することはできません。補欠選挙。
したがって、簡単に言うと、レプリカセットに偶数のメンバーを含めることによる冗長性の向上はありません。
詳細については、選挙の内部を参照してください