AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

自己管理型レプリカセット ノードを強制的にプライマリにする

レプリカセット ノードに、セット内の他のノードよりも高い 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"
}
]
}
  1. In a mongosh session that is connected to the primary, use the following sequence of operations to make m3.example.net the primary:

    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.netm1.example.net と同期します(通常は 10 秒以内)。

    • m1.example.net 最優先事項ではなくなり、ほとんどの場合は降格します。m3.example.net の同期が大幅に遅れている場合、m1.example.net は降格しません。その場合、m1.example.net は、m3.example.net がoptimeの 10 秒以内になるまで待機してから降格します。これにより、フェイルオーバー後のプライマリがない時間が最小限に抑えられます。

    • このステップダウンにより、priority の設定に基づいて m3.example.net がプライマリになる選挙が強制的に実施されます。

  2. オプションで、m3.example.netm1.example.net の optime より 10 秒以上遅れていて、プライマリを 10 秒以内に指定する必要がない場合は、次を実行することで、m1.example.net が強制的に降格となります。

    db.adminCommand({replSetStepDown: 86400, force: 1})

    これを行うと、プライマリになれる他のノードが存在しない場合でも 86,400 秒(24 時間)、m1.example.net はプライマリになることができなくなります。m3.example.netm1.example.net に追いつくと、それがプライマリになります。

    m3.example.net が追いつくまで m1.example.net を再びプライマリにするには、次のコマンドを実行して m1.example.net が再び選挙で選出されるようにしてください。

    rs.freeze()

    rs.freeze() は、replSetFreeze データベースコマンドのラッパーを提供します。

次のノードを持つレプリカセットについて考えます。

ノードを強制的にプライマリーにするには、以下の手順に従います。

  1. In mongosh, run rs.status() to ensure your replica set is running as expected.

  2. In a mongosh session that is connected to the mongod instance running on mdb2.example.net, freeze mdb2.example.net so that it does not attempt to become primary for 120 seconds.

    rs.freeze(120)
  3. In a mongosh session that is connected to the mongod running on mdb0.example.net, step down this instance that the mongod is not eligible to become primary for 120 seconds:

    rs.stepDown(120)

    mdb1.example.net プライマリになります。

    注意

    移行中、セットにプライマリがない短いウィンドウがあります。

より詳しく知るには、replSetFreeze コマンドおよび replSetStepDown コマンドをラッピングする、rs.freeze() メソッドと rs.stepDown() メソッドを検討してください。