自己管理型レプリカセット ノードを強制的にプライマリにする
Overview
レプリカセット ノードに、セット内の他のノードよりも高い members[n].priority
値を与えることで、強制的にプライマリにすることができます。
オプションで、members[n].priority
値を 0
に設定して、メンバーが決してプライマリーにならないようにすることもできます。これは、当該ノードがプライマリとして選挙で選出されないことを意味します。詳細については、「「優先度 0 のレプリカセットのノード」を参照してください。
優先順位の詳細は、members[n].priority
を参照してください。
検討事項
セットの再構成またはプライマリの選択には、レプリカセットの構成済みノードの過半数がセットに参加できる必要があります。詳細については、「レプリカセットの選挙」を参照してください。
手順
注意
force
フィールドを true
に設定せずに rs.stepDown()
または replSetStepDown
を使用してプライマリを降格すると、降格したプライマリは、選挙を直ちに呼び出す資格のあるセカンダリを指名します。
優先順位を高く設定してノードを強制的にプライマリにする
この手順では、現在のプライマリが m1.example.net
であり、代わりに m3.example.net
をプライマリにすることを前提としています。加えて、3 つのノードからなる次の構成のレプリカセットがあることも前提としています。構成の詳細については、「レプリカセット構成の使用」を参照してください。
この手順では、次の構成を前提としています。
{ "_id" : "rs", "version" : 7, "members" : [ { "_id" : 0, "host" : "m1.example.net:27017" }, { "_id" : 1, "host" : "m2.example.net:27017" }, { "_id" : 2, "host" : "m3.example.net:27017" } ] }
プライマリに接続されている
mongosh
セッションで、次の一連の操作を使用して、m3.example.net
をプライマリにします。cfg = rs.conf() cfg.members[0].priority = 0.5 cfg.members[1].priority = 0.5 cfg.members[2].priority = 1 rs.reconfig(cfg) 最後のステートメントでは、変更済み構成ドキュメントで
rs.reconfig()
を呼び出し、members[n].priority
の値が他のmongod
インスタンスよりも高くなるように、m3.example.net
を構成します。次の順序でイベントが発生します。
m3.example.net
m2.example.net
がm1.example.net
と同期します(通常は 10 秒以内)。m1.example.net
最優先事項ではなくなり、ほとんどの場合は降格します。m3.example.net
の同期が大幅に遅れている場合、m1.example.net
は降格しません。その場合、m1.example.net
は、m3.example.net
がoptimeの 10 秒以内になるまで待機してから降格します。これにより、フェイルオーバー後のプライマリがない時間が最小限に抑えられます。このステップダウンにより、
priority
の設定に基づいてm3.example.net
がプライマリになる選挙が強制的に実施されます。
オプションで、
m3.example.net
がm1.example.net
の optime より 10 秒以上遅れていて、プライマリを 10 秒以内に指定する必要がない場合は、次を実行することで、m1.example.net
が強制的に降格となります。db.adminCommand({replSetStepDown: 86400, force: 1}) これを行うと、プライマリになれる他のノードが存在しない場合でも 86,400 秒(24 時間)、
m1.example.net
はプライマリになることができなくなります。m3.example.net
がm1.example.net
に追いつくと、それがプライマリになります。m3.example.net
が追いつくまでm1.example.net
を再びプライマリにするには、次のコマンドを実行してm1.example.net
が再び選挙で選出されるようにしてください。rs.freeze() rs.freeze()
は、replSetFreeze
データベースコマンドのラッパーを提供します。
データベースコマンドを使用してノードを強制的にプライマリにする
次のノードを持つレプリカセットについて考えます。
ノードを強制的にプライマリーにするには、以下の手順に従います。
mongosh
でrs.status()
を実行し、レプリカセットが期待どおりに実行されていることを確認します。mongosh
で実行されている インスタンスに接続されているmongod
mdb2.example.net
セッションで、 をフリーズして、mdb2.example.net
120秒間プライマリにならないようにします。rs.freeze(120) mongosh
mongod
mdb0.example.net
で実行されている に接続されている セッションで、 がプライマリになる資格がないこのインスタンスをmongod
120秒降格します。rs.stepDown(120) mdb1.example.net
プライマリになります。注意
移行中、セットにプライマリがない短いウィンドウがあります。
より詳しく知るには、replSetFreeze
コマンドおよび replSetStepDown
コマンドをラッピングする、rs.freeze()
メソッドと rs.stepDown()
メソッドを検討してください。