replSetstepDown
説明
replSetStepDown
レプリカセットのプライマリをセカンダリになるように指示します。 プライマリがステップダウンすると、資格のあるセカンダリで プライマリ選挙 が行われます。
コマンドでは、プライマリをすぐにステップダウンするわけではありません。 プライマリと最新の
electable
セカンダリがない場合、プライマリはセカンダリが追いつくまで最大secondaryCatchUpPeriodSecs
(デフォルトでは 10 秒)待機します。 選択可能なセカンダリが利用可能になると、 コマンドはプライマリを降格します。ステップダウン後は、元のプライマリがセカンダリになり、
replSetStepDown: <seconds>
で指定された残りの期間が再びプライマリになることはできません。コマンドの実行の詳細については、 の動作を参照してください。
注意
このコマンドはプライマリに対してのみ有効であり、プライマリ以外のメンバーで実行するとエラーがスローされます。
Tip
mongosh
では、このコマンドはrs.stepDown()
ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongosh
ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。replSetStepDown
はadmin
データベースでのみ実行できます。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
このコマンドは、M 0 、M 2 、M 5 、M 10 + クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
このコマンドの構文は、次のとおりです。
db.adminCommand( { replSetStepDown: <seconds>, secondaryCatchUpPeriodSecs: <seconds>, force: <true|false> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
---|---|---|
| 数値 | プライマリをステップダウンするまでの秒数。この時間中、ステップダウンするノードはプライマリになる資格がありません。数値以外を指定した場合、コマンドは ステップダウン期間は、 |
| 数値 | 任意。 選択可能なセカンダリがプライマリに追いつくまで 指定すると、 |
| ブール値 | 任意。 待機期間内に選択可能で最新のセカンダリが存在しない場合に、プライマリが降格するかどうかを決定するブール値。
デフォルトは |
動作
同時操作
replSetStepDown
コマンドは、インデックスの構築、書込み (write) 操作、map-reduce ジョブなど、プライマリの停止を妨げる実行中のユーザー操作を終了しようとします。
資格のあるセカンダリの可用性
次に、このコマンドはキャッチアップ期間を開始し、セカンダリがプライマリと最新の状態になるまで最大secondaryCatchUpPeriodSeconds
(デフォルトでは 10 秒)待機します。 ロールバック を防止するために、キャッチアップ期間中にセカンダリがプライマリと最新の状態である場合にのみ、プライマリはステップダウンします。
待機期間の終了までにこの基準を満たす選出可能なセカンダリー候補がいない場合は、プライマリー候補は退任せず、コマンドはエラーとなります。 この動作をオーバーライドして、 force: true
オプションを指定したコマンドを実行すると、プライマリを直ちに降格できます。
プライマリが正常にステップダウンすると、そのノードは、コマンドを受信した時点から始まるreplSetStepDown: <seconds>
期間の残りの間、プライマリになることはできません。
クライアント接続
replSetStepDown
コマンドによって、すべてのクライアント接続が閉じられるわけではありません。
ステップダウン中の書込み
注意
replSetStepDown
コマンドが受信されてから、新しいプライマリが選出されるまで、または選択可能なセカンダリが存在しない場合は、元のプライマリが通常の操作を再開するまで、プライマリへのすべての書き込みは失敗します。
replSetStepDown
の実行時に進行中であった書込みは強制終了されます。 進行中のトランザクションもTransientTransactionError
で失敗し、全体が再試行できます。
書込みが失敗する最大期間:
secondaryCatchUpPeriodSecs
(デフォルトでは 10 秒間) + electionTimeoutMillis
(デフォルトでは 10 秒間)。
選挙ハンドオフ
force
フィールドをtrue
に設定せずにrs.stepDown()
またはreplSetStepDown
を使用してプライマリを降格すると、降格したプライマリは、選挙を直ちに呼び出す資格のあるセカンダリを指名します。
例
デフォルト オプションで降格
次の例では、現在のプライマリで実行すると、メンバーを120
秒降格しようとします。
この操作はセカンダリが追いつくまでデフォルトの10
秒まで待機します。 適切なセカンダリが存在しない場合は、プライマリは降格せず、コマンドはエラーになります。
注意
replSetStepDown
コマンドが受信されてから、新しいプライマリが選出されるまで、または選択可能なセカンダリが存在しない場合は、元のプライマリが通常の操作を再開するまで、プライマリへのすべての書き込みは失敗します。
replSetStepDown
の実行時に進行中であった書込みは強制終了されます。 進行中のトランザクションもTransientTransactionError
で失敗し、全体が再試行できます。
書込みが失敗する最大期間:
secondaryCatchUpPeriodSecs
(デフォルトでは 10 秒間) + electionTimeoutMillis
(デフォルトでは 10 秒間)。
db.adminCommand( { replSetStepDown: 120 } )
セカンダリ キャッチアップの待機時間を指定する
以下の例では、現在のプライマリで実行すると、メンバーを120
秒間降格させ、選択可能なセカンダリが追いつくまで最大15
秒待機します。 適切なセカンダリが存在しない場合は、プライマリは降格せず、コマンドはエラーになります。
注意
replSetStepDown
コマンドが受信されてから、新しいプライマリが選出されるまで、または選択可能なセカンダリが存在しない場合は、元のプライマリが通常の操作を再開するまで、プライマリへのすべての書き込みは失敗します。
replSetStepDown
の実行時に進行中であった書込みは強制終了されます。 進行中のトランザクションもTransientTransactionError
で失敗し、全体が再試行できます。
書込みが失敗する最大期間:
secondaryCatchUpPeriodSecs
(デフォルトでは 10 秒間) + electionTimeoutMillis
(デフォルトでは 10 秒間)。
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15 } )
強制ステップダウンによるセカンダリのキャッチアップを指定する
以下の例では、現在のプライマリで実行すると、メンバーを120
秒間降格させ、選択可能なセカンダリが追いつくまで最大15
秒待機します。 force: true
オプションのため、適切なセカンダリが存在しない場合でもプライマリは降格します。
注意
replSetStepDown
コマンドが受信されてから、新しいプライマリが選出されるまで、または選択可能なセカンダリが存在しない場合は、元のプライマリが通常の操作を再開するまで、プライマリへのすべての書き込みは失敗します。
replSetStepDown
の実行時に進行中であった書込みは強制終了されます。 進行中のトランザクションもTransientTransactionError
で失敗し、全体が再試行できます。
書込みが失敗する最大期間:
secondaryCatchUpPeriodSecs
(デフォルトでは 10 秒間) + electionTimeoutMillis
(デフォルトでは 10 秒間)。
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15, force: true } )