说明
- replSetStepDown
- 指示副本集的 主节点变为从节点。主节点降级后,符合条件的从节点将进行主节点选举。 - 该命令不会立即使主节点降级。 如果没有 - electable个从节点与主节点保持同步,则主节点需要等待- secondaryCatchUpPeriodSecs(默认为 10 秒)才能从节点同步。 一旦有可选的从节点可用,该命令就会降级主节点。- 一旦降级,原来的主节点将成为从节点,并且在 - replSetStepDown: <seconds>指定的剩余时间内没有资格再次成为主节点。- 有关命令执行的详细说明,请参阅行为。 - 注意- 该命令仅对主节点有效,如果在非主节点上运行,则会引发错误。 - 提示- 在 - mongosh中,该命令也可通过- rs.stepDown()辅助方法运行。- 辅助方法对 - mongosh用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。- replSetStepDown只能在- admin数据库上运行。
兼容性
此命令可用于以下环境中托管的部署:
- MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本 
- MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本 
重要
MongoDB Atlas集群不支持此命令。 有关Atlas支持所有命令的信息,请参阅不支持的命令。
语法
该命令具有以下语法:
db.adminCommand(    {      replSetStepDown: <seconds>,      secondaryCatchUpPeriodSecs: <seconds>,      force: <true|false>    } ) 
命令字段
该命令接受以下字段:
| 字段 | 类型 | 说明 | 
|---|---|---|
| 
 | 数字 | 从主节点降级的时间(秒),在此期间,降级节点没有资格成为主节点。如果指定非数字值,该命令将使用  降级周期从  | 
| 
 | 数字 | 可选。  指定后,  | 
| 
 | 布尔 | 可选。 一个布尔值,用于确定在等待期内不存在可选举且是最新的从节点的情况下,主节点是否降级。 如果为 如果为 默认值为  | 
行为
并行操作
replSetStepDown命令尝试终止长时间运行的阻止主节点降级的用户操作,例如索引构建、写入操作或 map-reduce 作业。
合格从节点的可用性
然后,该命令会启动一个追赶期,等待secondaryCatchUpPeriodSeconds (默认为 10 秒),以便从节点与主节点保持同步。 仅当从节点在追赶期间与主节点保持同步时,主节点才会降级,以防止回滚。
如果在等待期结束时没有可选举的从节点满足此标准,则主节点不会降级,并且命令出错。 您可以覆盖此行为并发出带有force: true选项的命令以立即降级主节点。
主节点成功降级后,该节点在replSetStepDown: <seconds>时间段的剩余时间内无法成为主节点,该时间段从节点收到命令时开始。
客户端连接
replSetStepDown 命令不会关闭所有客户端连接。
降级期间的写入
注意
从收到replSetStepDown命令开始,直到选出新的主节点,或者如果没有可选举的从节点,则原始主节点恢复正常操作,所有对主节点的写入都会失败。
运行 replSetStepDown 时正在进行的写入将被终止。正在进行的事务也会失败并显示 TransientTransactionError,并且可以整体重试。
写入失败的时间段最长为:
secondaryCatchUpPeriodSecs (默认为 10 秒)+ electionTimeoutMillis(默认为 10 秒)。
选举交接
当您使用rs.stepDown()或replSetStepDown降级主节点而未将force字段设置为true时,降级的主节点会指定一个符合条件的从节点来立即进行选举。
示例
使用默认选项降级
以下示例在当前主节点上运行,尝试让该节点降级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 } )