replSetStepDown
说明
replSetStepDown
指示副本集的主节点 (primary node in the replica set)节点成为从从节点(secondary node from replica set)。 主节点 (primary node in the replica set)节点降级后,符合条件的从节点将进行主节点 (primary node in the replica set)节点选举。
该命令不会立即使主节点降级。 如果没有
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 | 数字 | 从主节点降级的时间(秒),在此期间,降级节点没有资格成为主节点。如果指定非数字值,该命令将使用 降级周期从 |
secondaryCatchUpPeriodSecs | 数字 | 可选。 指定后, |
force | 布尔 | 可选。 一个布尔值,用于确定在等待期内不存在可选举且是最新的从节点的情况下,主节点是否降级。 如果为 如果为 默认值为 |
行为
并行操作
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 } )