对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

replSetReconfig(数据库命令)

replSetReconfig

replSetReconfig管理命令可修改现有副本集的配置。您可以使用此命令添加和删除成员,以及更改现有成员上设立的选项。您必须在主节点admin (primary node in the replica set)副本集成员的 数据库上运行此命令。

提示

mongosh 中,该命令也可以通过rs.reconfig() 辅助方法运行。

助手方法对于mongosh 用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。

此命令可用于以下环境中托管的部署:

重要

MongoDB Atlas 集群不支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

该命令具有以下语法:

db.adminCommand(
{
replSetReconfig: <new_config_document>,
force: <boolean>,
maxTimeMS: <int>
}
)

该命令采用以下可选字段:

字段
说明

默认为false 。 指定true以强制可用副本集成员接受新配置。

强制重新配置可能导致意外或不希望发生的行为,包括回滚 "majority" 已提交的写入。

replSetReconfigreplSetReconfig可选。指定处理 的累积时间限制(以毫秒为单位)。默认下, 无限期等待副本配置传播到大多数副本集成员。设置maxTimeMS 可能会导致操作在应用新配置之前失败。有关更多信息,请参阅重新配置等到大多数成员安装副本集配置。

您也可以使用replSetReconfig Shellrs.reconfig() 的 方法运行 。

在尝试使用会更改隐式默认写关注的配置重新副本集之前,必须显式设立全局默认写关注(write concern)写关注(write concern)。要设立全局默认写关注(write concern),请使用setDefaultRWConcern 命令。

term字段由副本集主节点 (primary node in theterm replicareplSetReconfig set)副本集成员设立。如果在 操作中显式设立,主节点 (primary node in the replica set)将忽略 字段。

replSetReconfig默认下, 允许一次添加或删除不超过1voting 个 成员。示例,新配置最多可以对集群 membership进行以下更改之一:

  • 添加新的投票副本集节点。

  • 删除现有的投票副本集成员。

  • 修改现有副本集节点的 votes

要添加或删除多个投票成员,请发出一系列replSetReconfig 操作以一次添加或删除一个成员。

发出 force 重新配置将立即安装新配置,即使它添加或删除多个投票节点。force 重新配置可能会导致意外行为,例如,回滚 "majority" 提交的写入操作。

replSetReconfig等待大多数投票副本集成员安装新的副本配置,然后再返回成功。投票节点是 members[n].votes1 的任何副本集节点,包括仲裁节点。

副本集节点通过心跳传播其副本配置。每当节点发现具有更高 versionterm 的配置时,它就会安装新配置。重新配置过程具有两个不同的“等待”阶段:

1)等待提交当前配置,再安装新配置。

“当前”配置是指在发出 时主节点 (primary node in the replicareplSetReconfig set)使用的副本配置。

在以下情况下,将提交配置:

  • 大多数投票副本集节点都安装了当前配置,并且

  • 所有在先前配置中以 "majority" 提交的写入也已复制到当前配置中的多数。

通常,当前配置已安装在大多数投票副本集节点上。不过,以前配置中的大多数提交的写入可能不会在当前配置中全部提交。Delayed节点 lagging behind主节点的节点可能会增加在该阶段所花的时间。

如果发出的操作具有 maxTimeMS 限制,并且 该操作在等待时超过该限制,该操作将返回错误并丢弃新配置。该限制是累积性的,在进入下一阶段后不会进行重置。

2)等待新配置中的大多数投票成员安装新配置。

“新的”配置是指指定给replSetReconfig 的副本配置。

主节点安装并开始使用新的副本配置,再将配置传播给其余副本集节点。该操作只需等待大多数投票成员安装新配置,而无需等待提交新配置。

如果发出的操作具有 maxTimeMS 限制,并且操作在等待时超过该限制,则操作将返回错误,会继续使用和传播新配置。

无论以前配置的提交状态如何,发出 force 重新配置将立即安装新配置。force 重新配置可能会导致意外行为,例如,回滚 "majority" 提交的写入操作。

要检查当前副本配置的提交状态,请在副本集主节点使用 commitmentStatus 参数发出 replSetGetConfig

从 MongoDB 5.0 开始,新添加的从节点在未达到 SECONDARY 状态之前将不被计为投票节点,并且无法被选为主节点。

将新的投票节点添加到副本集时,replSetReconfig 将在内部将newlyAdded 字段添加到该节点的配置中。具有newlyAdded 字段的节点不计入当前投票节点数。当初始同步完成且节点达到SECONDARY 状态时,newlyAdded 字段将自动删除。

注意

  • 即使使用 { force: true } 运行,尝试添加名为 newlyAdded 的字段的配置也会出错。

  • 如果现有节点有一个 newlyAdded 字段,使用 rs.reconfig() 更改配置将不会删除 newlyAdded 字段。newlyAdded 字段将被附加到用户提供的配置中。

  • replSetGetConfig 将删除输出中的所有 newlyAdded 字段。如果您想查看任何 newlyAdded 字段,可以直接查询 local.system.replset 集合。

要在强制执行访问控制的部署上运行该命令,用户必须对集群资源具有replSetConfigure权限操作特权。admin数据库中提供的clusterManager内置角色提供此命令所需的权限。

replSetReconfig获得特殊的互斥独占锁,以防止多个replSetReconfig 操作同时发生。

警告

避免重新配置包含不同 MongoDB 版本节点的副本集,因为验证规则可能因 MongoDB 版本而异。

该集的大多数成员必须可操作才能使更改正确传播。

replSetReconfig在某些情况下, 可以触发当前主节点 (primary node in the replica set)降级。主节点降级会触发选举以选择新的主节点 (primary node in the replica set):

  • 当新的主节点启动时,它会增加 term 字段,以区分在新的主节点上所做的配置更改与在上一个主节点上所做的配置更改。

  • 当主节点降级时,它不再关闭所有客户端连接;正在进行的写入操作也会被终止。有关详情,请参阅行为。

假设采用默认 replica configuration settings(副本配置设置),那么集群选举新的主节点之前的平均时间通常不应超过 12 秒。这包括将主节点标记为不可用以及召集和完成选举所需的时间。您可以通过修改 settings.electionTimeoutMillis 复制配置选项来调整该时间段。网络延迟等因素可能会延长副本集选举完成所需的时间,这反过来又会影响集群在没有主节点的情况下运行的时间。这些因素取决于具体集群架构。

在选举进程期间,集群不能接受写操作,直到选举出新的主节点。

您的应用程序连接逻辑应包括对自动故障转移和后续选举的容忍度。MongoDB 驱动程序可检测到主节点丢失,并一次性自动重试某些写入操作,从而为自动故障转移和选举提供额外的内置处理功能:

兼容的驱动程序将默认启用可重试写入

要进一步降低对生产集群的潜在影响,请仅在计划维护期间重新配置。

警告

MongoDB不会在集群中的副本集之间同步强制副本集重新配置。 使用{ force: true } 可能会导致多数提交写入回滚和分片分片集群不一致。使用此选项时请谨慎。

使用replSetReconfig 删除副本集节点不会自动删除从其他副本集节点到已删除节点的打开传出连接。

默认情况下,副本集节点等待 5 分钟,然后再删除到删除的节点的连接。在分片副本集中,您可以使用 ShardingTaskExecutorPoolHostTimeoutMS 服务器参数修改该超时。

要立即删除从副本集到已删除成员的所有传出连接,请对副本集的每个剩余成员运行 dropConnections 管理命令:

db.adminCommand(
{
"dropConnections" : 1,
"hostAndPort" : [
"<hostname>:<port>"
]
}
)

<hostname><port> 替换为已删除成员的值。

警告

从 MongDB5.0 开始,仅配置了IP解决的水平分割DNS 节点无法通过初创企业验证并报告错误。请参阅disableSplitHorizonIPCheck

副本集配置字段自管理副本集配置rs.reconfig()rs.conf()