On this page
replSetStepDown
在本页面
Description
该命令不会立即降级主要数据库。如果没有electable
个辅助节点与主节点保持最新,则主节点最多 awaitsecondaryCatchUpPeriodSecs
个(默认情况下为 10 秒)以使辅助节点赶上。一旦可以选择的辅助服务器可用,该命令将降级主服务器。
降级后,原始的主要节点将成为辅助节点,并且在replSetStepDown: <seconds>
指定的剩余时间内没有资格再次成为主要节点。
有关命令执行的详细说明,请参见Behavior。
Note
该命令仅对主要对象有效,如果在非主要成员上运行,则会引发错误。
replSetStepDown只能在admin
数据库上运行,并且具有以下原型形式:
db.adminCommand( {
replSetStepDown: <seconds>,
secondaryCatchUpPeriodSecs: <seconds>,
force: <true|false>
} )
replSetStepDown将以下字段作为参数:
Field | Type | Description |
---|---|---|
replSetStepDown |
number | 降级主节点的秒数,在此期间,降级成员不符合成为主节点的资格。如果指定非数字值,该命令将使用60 秒。 |
降级周期从mongod接收命令开始。降压周期必须大于secondaryCatchUpPeriodSecs
。
| secondaryCatchUpPeriodSecs
|数字|可选。 mongodawait 可选举的辅助节点赶上主要节点的秒数。
如果指定,则secondaryCatchUpPeriodSecs
会覆盖默认的 await 时间10
秒或force: true
,0
秒。
| force
|布尔值|可选。一个布尔值,用于确定在 await 期内是否不存在可选举且最新的辅助节点,主要节点是否降级。
如果true
,则即使不存在合适的辅助成员,主要成员也将下台;否则,如果具有复制滞后的辅助节点变为新的主要节点,则可能会导致rollbacks。
如果false
,则在不存在合适的辅助成员的情况下,主节点不会降级,并且该命令返回错误。
默认为false
。
Behavior
Concurrent Operations
replSetStepDown命令尝试终止长时间运行的用户操作,这些操作会阻止主数据库降级,例如索引构建,写操作或 Map 减少作业。
合格中学的可用性
然后,该命令启动一个追赶期,在此期间它最多 awaitsecondaryCatchUpPeriodSeconds
,默认情况下 await10 秒,以使辅助节点与主节点保持最新状态。仅当辅助服务器在追赶期间与主服务器保持最新时,主服务器才会降级,以防止rollbacks。
如果在 await 期结束之前没有可选举的辅助节点满足此条件,则主要节点不会降级并且命令错误。您可以覆盖此行为,并使用force: true
选项发出命令以立即降级主数据库。
一旦主要节点成功降级,该节点就无法在replSetStepDown: <seconds>
期间的剩余时间内成为主要节点,该时间段是在该节点收到命令后开始的。
Client Connections
replSetStepDown命令强制当前连接到数据库的所有 Client 端断开连接。这有助于确保 Client 端维护副本集的准确视图。
因为断开连接包括用于运行命令的连接,所以如果命令成功完成,则无法检索命令的返回状态。如果错误,则只能检索命令的返回状态。在脚本中运行命令时,脚本应解决此问题。
降压期间的写入
Note
在收到replSetStepDown命令开始的时间段内,所有对主数据库的写入操作都会失败,直到选择了新的主数据库,或者如果没有可选举的辅助数据库,则原始主数据库将恢复正常操作。写入失败的时间最多为:
secondaryCatchUpPeriodSecs
(默认为 10 秒)electionTimeoutMillis(默认为 10 秒)。
Election Handoff
在版本 3.6.7 中进行了更改:如果参数enableElectionHandoff为 true(默认值),则当主节点从rs.stepDown()降级(或没有force: true
的replSetStepDown命令)时,降级的主节点将提名合格的辅助节点立即选举。否则,次要人员最多可以 awaitsettings.electionTimeoutMillis才能进行选举。降级的主服务器不 await 切换的效果。有关更多信息,请参见enableElectionHandoff。
Examples
使用默认选项下移
以下示例在当前主数据库上运行,尝试将成员降级120
秒。
该操作最多 await 默认的10
秒,以使辅助服务器赶上来。如果不存在合适的辅助节点,则主节点不会降级并且命令错误。
Note
在收到replSetStepDown命令开始的时间段内,所有对主数据库的写入操作都会失败,直到选择了新的主数据库,或者如果没有可选举的辅助数据库,则原始主数据库将恢复正常操作。写入失败的时间最多为:
secondaryCatchUpPeriodSecs
(默认为 10 秒)electionTimeoutMillis(默认为 10 秒)。
db.adminCommand( { replSetStepDown: 120 } )
指定辅助追赶的 await 时间
下面的示例在当前主节点上运行,尝试将成员降级120
秒,最多 await15
秒以 await 可选举的辅助节点赶上。如果不存在合适的辅助节点,则主节点不会降级并且命令错误。
Note
在收到replSetStepDown命令开始的时间段内,所有对主数据库的写入操作都会失败,直到选择了新的主数据库,或者如果没有可选举的辅助数据库,则原始主数据库将恢复正常操作。写入失败的时间最多为:
secondaryCatchUpPeriodSecs
(默认为 10 秒)electionTimeoutMillis(默认为 10 秒)。
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15 } )
指定强制降级的辅助追赶
下面的示例在当前主节点上运行,尝试将成员降级120
秒,最多 await15
秒以 await 可选举的辅助节点赶上。由于使用force: true
选项,即使不存在合适的辅助节点,主节点也会降级。
Note
在收到replSetStepDown命令开始的时间段内,所有对主数据库的写入操作都会失败,直到选择了新的主数据库,或者如果没有可选举的辅助数据库,则原始主数据库将恢复正常操作。写入失败的时间最多为:
secondaryCatchUpPeriodSecs
(默认为 10 秒)electionTimeoutMillis(默认为 10 秒)。
db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15, force: true } )
See also