0

3 つのノード (2 つのデータ ノードと 1 つのアービター (PSA)) を持つレプリカ セットがあるとします。プライマリ ノードとの同期中に何らかの理由でデータ ノードの 1 つがダウンし、元に戻すと、状態は になりますSTARTUP2。私change streamのレプリカセットには2つのデータノードがありますが、読み取るノードの大部分がありません。

この問題をどのように処理できますか?

この MongoDB docも読みました。プライマリ ノードの値をセカンダリ ノードよりも高く設定することは可能ですpriorityか (つまり、プライマリ ノードと同期しています)? セカンダリ ノードがSTARTUP2状態の場合でも、これを行うことで過半数を取得できますか?

4

1 に答える 1

2

技術的には、過半数には 2 つのタイプがあります。私が呼んだように、それらは「選挙の多数派」と「データの多数派」です。

アービターは、S がダウンした場合に PSA アーキテクチャでプライマリ アベイラビリティを維持するのに役立つ「選挙の過半数」を支援することになっています。ただし、それらは「データ マジョリティ」の一部ではありません。

対照的に、「データ マジョリティ」は、多数決および多数決読み取り多数書き込みの承認の両方を目的としています。

変更ストリームは設計上、投票ノードの「データ マジョリティ」にコミットされたドキュメントを返します。これは、それらに伝達された書き込みがロールバックされないためです。変更ストリームがドキュメントが書き込まれたことを宣言した後、ロールバックし、「待ってはいけません、それをスクラッチしてください。書き込みは行われませんでした」というメッセージを発行する必要がある場合、混乱を招きます。

したがって、その性質上、アービターは変更ストリームやトランザクションなどの多数決読み取りおよび多数決書き込みのシナリオと互換性がありません。ただし、アービターに何を期待するかを知っていれば、アービターは依然としてレプリカ セット内でその役割を果たします。

どのバージョンでのデフォルトのmongod書き込み懸念は何ですか? を参照してください。書き込みの懸念とアービターを持つことの効果のより完全な説明については。

のセカンダリSTARTUP2はまだセカンダリではありません。選挙で投票することはできますが、まだ開始しているため、過半数の書き込みは認めません。

変更ストリームに関して言えば、PSA アーキテクチャでは「データ マジョリティ」は実質的に PSA の PS 部分にすぎないため、多数の読み取りと書き込みを維持するために、データ ベアリング ノードをオフラインにすることはできません。

最善の解決策は、アービターを実際のデータベアリング ノードに置き換えることです。このようにして、マジョリティ書き込み、マジョリティ読み取りを行うことができ、1 つのノードをダウンさせてもマジョリティを維持できます。

于 2020-01-09T00:30:47.857 に答える