rs.reconfigForPSASet()
rs.reconfigForPSASet( memberIndex, config, { options } )
バージョン 5.0 で追加
プライマリ セカンダリ アービタ(PSA)レプリカセット、または PSA アーキテクチャに変更されているレプリカセットに対して、いくつかの再構成の変更を安全に実行します。 このメソッドは、次のいずれかの場合にのみ使用してください。
PSA アーキテクチャを使用して、既存の 3 ノードのレプリカセット内のセカンダリを再構成し、ゼロ以外の
priority
を持つ投票権のあるデータを保持するノードにする場合があります。1 つの投票権を持つデータを保持するノードと 1 件のアービタを含む既存の 2 ノードのレプリカセットに、優先順位が 0 以外の新しい投票権のあるデータを保持するノードを追加する場合。
警告
追加しているセカンダリが遅延しており、結果のレプリカセットが PSA 構成の場合、最初の構成変更によって 、
"majority"
で変更をコミットする必要があるノードの数が変更されます。 この場合、コミット ポイントはセカンダリが追いつくまで遅延します。このメソッドの動作の詳細については、「 の動作 」を参照してください。
構文
rs.reconfigForPSASet()
メソッドの構文は次のとおりです。
rs.reconfigForPSASet( memberIndex: <num>, config: <configuration>, { "force" : <boolean>, "maxTimeMS" : <int> } )
Parameter | タイプ | 説明 |
---|---|---|
memberIndex | integer | 追加または変更されるセカンダリのインデックス。 |
config | ドキュメント | レプリカセットの新しい構成を指定するドキュメント。 |
force | ブール値 | 任意 警告: 使用可能なレプリカセット ノードに新しい構成を強制的に受け入れさせるには、 強制的に再構成すると、 |
maxTimeMS | integer | 任意
|
動作
rs.reconfigForPSASet()
メソッドは、次の 2 つの手順でレプリカセットを再構成します。
このメソッドは、レプリカセットを再構成して、
{ votes: 1, priority: 0 }
でセカンダリを追加または変更します。追加または変更されたセカンダリがコミットされたすべての書込み
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);
最初のステートメントは、
rs.conf()
メソッドを使用してレプリカセットの現在の構成を含むドキュメントを取得し、そのドキュメントをローカル変数cfg
に保存します。2 番目のステートメントは、新しいセカンダリを
members
配列に追加します。 この構成では、新しいセカンダリがmemberIndex
1
に追加されます。memberIndex
は配列インデックスと同じです。 追加設定については、「レプリカセットの構成設定 」を参照してください。最後のステートメントでは、
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") } }