replSetStepDown
说明
replSetStepDown
指示副本集的主节点变为从节点。主节点降级后,符合条件的从节点将进行主节点选举。
该命令不会立即使主节点降级。 如果没有
electable
个从节点与主节点保持同步,则主节点需要等待secondaryCatchUpPeriodSecs
(默认为 10 秒)才能从节点同步。 一旦有可选的从节点可用,该命令就会降级主节点。一旦降级,原来的主节点将成为从节点,并且在
replSetStepDown: <seconds>
指定的剩余时间内没有资格再次成为主节点。有关命令执行的详细说明,请参阅行为。
注意
该命令仅对主节点有效,如果在非主节点上运行,则会引发错误。
提示
在
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
命令尝试终止长时间运行的阻止主节点降级的用户操作,例如索引构建、写入操作或 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 } )