自己管理型セカンダリがプライマリにならないようにする
Overview
レプリカセットでは、デフォルトでは、すべてのセカンダリメンバーが選挙プロセスを通じてプライマリになる資格があります。 priority
を使用すると、一部のノードがプライマリになる可能性を高くして、他のノードをプライマリになる可能性を低くしたり、プライマリにならないようにしたりして、これらの選挙の結果に影響を与えることができます。
プライマリにならないセカンダリでは、選挙をtriggerすることもできません。 その他のすべての点では、これらのセカンダリは他のセカンダリと同じです。
セカンダリ メンバーが フェイルオーバー で プライマリ にならないようにするには、こちらで説明されているように、セカンダリに優先順位0
を割り当てます。セカンダリ専用ノードとその目的の詳細については、「優先度 0 のレプリカセット ノード 」を参照してください。
Considerations
レプリカ構成オブジェクトを更新するときは、 配列インデックスmembers
を使用して、 配列内のレプリカセット メンバーにアクセスします。配列インデックスは0
で始まります。 このインデックス値を、 members
配列内の各ドキュメントのmembers[n]._id
フィールドの値と混同 しないでください 。
注意
MongoDB では、現在のプライマリの優先順位が0
になることは許可されていません。 現在のプライマリが再度プライマリにならないようにするには、まずrs.stepDown()
を使用して現在のプライマリを降格する必要があります。
手順
このチュートリアルでは、5 つのノードを持つサンプル レプリカセットを使用します。
警告
rs.reconfig()
shell メソッドを使用すると、現在のプライマリを強制的に降格させることができ、選挙が行われます。プライマリが降格すると、mongod
はすべてのクライアント接続を閉じます。通常、この処理時間は 10 ~ 20 秒ですが、スケジュールされたメンテナンス期間中にこれらの変更を行ってください。MongoDB のバージョンによって検証ルールが異なる可能性があるため、異なるバージョンの MongoDB のノードを含むレプリカセットの再設定は避けてください。
現在のレプリカセット構成を取得します。
rs.conf()
メソッドは、レプリカセットの現在の構成を含むレプリカセット構成ドキュメントを返します。
mongosh
では、プライマリに接続すると、 rs.conf()
メソッドを実行し、その結果が変数に割り当てられます。
cfg = rs.conf()
返されるドキュメントには、レプリカセットの各ノードに対して 1 つのドキュメントである、ノード構成ドキュメントの配列を含むmembers
フィールドが含まれます。
0
の優先順位の値を割り当てます。
セカンダリ メンバーがプライマリ メンバーにならないようにするには、セカンダリ メンバーのmembers[n].priority
を0
に更新します。
レプリカセットのノードに優先順位の値を割り当てるには、配列インデックスを使用してノード構成ドキュメントにアクセスします。 このチュートリアルでは、変更するセカンダリ ノードは、 members
配列の位置2
にある構成ドキュメントに対応します。
cfg.members[2].priority = 0
レプリカセットを再構成するまで、構成変更は有効になりません。
レプリカセットを再構成します。
rs.reconfig()
メソッドを使用して、更新されたレプリカセット構成ドキュメントでレプリカセットを再構成します。
cfg
変数をrs.reconfig()
メソッドに渡します。
rs.reconfig(cfg)