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.netm2.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で実行されている インスタンスに接続されているmongodmdb2.example.netセッションで、 をフリーズして、mdb2.example.net120秒間プライマリにならないようにします。rs.freeze(120) mongoshmongodmdb0.example.netで実行されている に接続されている セッションで、 がプライマリになる資格がないこのインスタンスをmongod120秒降格します。rs.stepDown(120) mdb1.example.netプライマリになります。注意
移行中、セットにプライマリがない短いウィンドウがあります。
より詳しく知るには、replSetFreeze コマンドおよび replSetStepDown コマンドをラッピングする、rs.freeze() メソッドと rs.stepDown() メソッドを検討してください。