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

rs.reconfigForPSASet()

項目一覧

  • 定義
  • 互換性
  • 構文
  • 動作
rs.reconfigForPSASet( memberIndex, config, { options } )

バージョン 5.0 で追加

プライマリ セカンダリ アービタ(PSA)レプリカセット、または PSA アーキテクチャに変更されているレプリカセットに対して、いくつかの再構成の変更を安全に実行します。 このメソッドは、次のいずれかの場合にのみ使用してください。

  • PSA アーキテクチャを使用して、既存の 3 ノードのレプリカセット内のセカンダリを再構成し、ゼロ以外の priorityを持つ投票権のあるデータを保持するノードにする場合があります。

  • 1 つの投票権を持つデータを保持するノードと 1 件のアービタを含む既存の 2 ノードのレプリカセットに、優先順位が 0 以外の新しい投票権のあるデータを保持するノードを追加する場合。

警告

追加しているセカンダリが遅延しており、結果のレプリカセットが PSA 構成の場合、最初の構成変更によって 、 "majority"で変更をコミットする必要があるノードの数が変更されます。 この場合、コミット ポイントはセカンダリが追いつくまで遅延します。

このメソッドの動作の詳細については、「 動作 」を参照してください。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

rs.reconfigForPSASet()メソッドの構文は次のとおりです。

rs.reconfigForPSASet(
memberIndex: <num>,
config: <configuration>,
{
"force" : <boolean>,
"maxTimeMS" : <int>
}
)
Parameter
タイプ
説明

memberIndex

integer

追加または変更されるセカンダリのインデックス。

config

ドキュメント

レプリカセットの新しい構成を指定するドキュメント

force

ブール値

任意

警告: rs.reconfigForPSASet()force: trueで メソッドを実行することは推奨されず、コミットされた書込みがロールバックされる可能性があります。

使用可能なレプリカセット ノードに新しい構成を強制的に受け入れさせるには、true を指定します。デフォルトは false です。

強制的に再構成すると、"majority" がコミットした書き込みのロールバックなど、予期しない動作や望ましくない動作が発生する可能性があります。

maxTimeMS

integer

任意

rs.reconfigForPSASet()操作中に各再構成を処理する累積時間制限をミリ秒単位で指定します。デフォルトでは 、rs.reconfigForPSASet() はレプリカ構成がレプリカセットメンバーの過半数に伝播するまで無期限に待機します。

rs.reconfigForPSASet()メソッドは、次の 2 つの手順でレプリカセットを再構成します。

  1. このメソッドは、レプリカセットを再構成して、 { votes: 1, priority: 0 }でセカンダリを追加または変更します。

  2. 追加または変更されたセカンダリがコミットされたすべての書込みpriority rs.reconfigForPSASet(){ votes: 1, priority: <num> }(write) に追いつくと、このメソッドはセカンダリを再構成して、 コマンドで指定された を有効にします( )。

2 段階のアプローチにより、新しいセカンダリが以前の構成からすべてのコミット済み書込みを完了する前に新しいセカンダリに フェイルオーバー が発生した場合に、コミットされた書込みをロールバックする可能性を回避できます。

rs0 という名前のレプリカセットは以下のような構成になっています。

{
"_id" : "rs0",
"version" : 1,
"term": 1,
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
}
],
"protocolVersion" : Long("1"),
"writeConcernMajorityJournalDefault": true,
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 2000,
"getLastErrorModes" : {},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("60e6f83923193faa336889d2")
}
}

次の一連の操作により、レプリカセットに新しいセカンダリが追加されます。 操作はプライマリに接続している間にmongosh shell で発行されます。

cfg = rs.conf();
cfg["members"] = [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {},
"secondaryDelaySecs" : Long("0"),
"votes" : 1
}
]
rs.reconfigForPSASet(1, cfg);
  1. 最初のステートメントは、 rs.conf()メソッドを使用してレプリカセットの現在の構成を含むドキュメントを取得し、そのドキュメントをローカル変数cfgに保存します。

  2. 2 番目のステートメントは、新しいセカンダリをmembers配列に追加します。 この構成では、新しいセカンダリがmemberIndex 1に追加されます。 memberIndexは配列インデックスと同じです。 追加設定については、「レプリカセットの構成設定 」を参照してください。

  3. 最後のステートメントでは、 memberIndex 1と変更されたcfgを使用してrs.reconfigForPSASet()メソッドを呼び出します。 memberIndexは、 members配列内の新しいノードの配列位置です。 正常に再構成されると、レプリカセットの構成は次のようになります。

    {
    "_id" : "rs0",
    "version" : 1,
    "term": 1,
    "members" : [
    {
    "_id" : 0,
    "host" : "mongodb0.example.net:27017",
    "arbiterOnly" : false,
    "buildIndexes" : true,
    "hidden" : false,
    "priority" : 1,
    "tags" : {},
    "secondaryDelaySecs" : Long("0"),
    "votes" : 1
    },
    {
    "_id" : 1,
    "host" : "mongodb1.example.net:27017",
    "arbiterOnly" : false,
    "buildIndexes" : true,
    "hidden" : false,
    "priority" : 2,
    "tags" : {},
    "secondaryDelaySecs" : Long("0"),
    "votes" : 1
    },
    {
    "_id" : 2,
    "host" : "mongodb2.example.net:27017",
    "arbiterOnly" : true,
    "buildIndexes" : true,
    "hidden" : false,
    "priority" : 0,
    "tags" : {},
    "secondaryDelaySecs" : Long("0"),
    "votes" : 1
    }
    ],
    "protocolVersion" : Long("1"),
    "writeConcernMajorityJournalDefault": true,
    "settings" : {
    "chainingAllowed" : true,
    "heartbeatIntervalMillis" : 2000,
    "heartbeatTimeoutSecs" : 10,
    "electionTimeoutMillis" : 10000,
    "catchUpTimeoutMillis" : 2000,
    "getLastErrorModes" : {},
    "getLastErrorDefaults" : {
    "w" : 1,
    "wtimeout" : 0
    },
    "replicaSetId" : ObjectId("60e6f83923193faa336889d2")
    }
    }

Tip

以下も参照してください。

戻る

rs.reconfig