Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

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

項目一覧

  • 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"
}
]
}
  1. プライマリに接続されている 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.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. mongoshrs.status()を実行し、レプリカセットが期待どおりに実行されていることを確認します。

  2. mongoshで実行されている インスタンスに接続されているmongod mdb2.example.netセッションで、 をフリーズして、mdb2.example.net 120秒間プライマリにならないようにします。

    rs.freeze(120)
  3. mongoshmongodmdb0.example.netで実行されている に接続されている セッションで、 がプライマリになる資格がないこのインスタンスをmongod 120秒降格します。

    rs.stepDown(120)

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

    注意

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

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

戻る

ノードの維持