Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

replSetReconfig

在此页面上

  • 定义
  • 语法
  • 命令字段
  • 行为
  • 更多信息
replSetReconfig

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

提示

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

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

该命令具有以下语法:

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

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

字段
说明

force

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

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

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

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

从 MongoDB 5.0 开始,在尝试使用更改隐式默认写关注配置重新配置副本集之前,您必须显式设置全局默认写关注。要设置全局默认写关注,请使用 setDefaultRWConcern 命令。

term字段由副本集 节点成员设置。如果在 操作中显式设置,主节点将忽略term replSetReconfig字段。

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

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

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

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

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

发出强制重新配置会立即安装新配置,即使它添加或删除多个投票成员也是如此。强制重新配置可能会导致意外行为,例如回滚"majority"已提交的写入操作。

replSetReconfig等到大多数投票副本集成员安装新的副本配置后,才会返回成功。投票节点是 为 的 members[n].votes任何1 副本集节点,包括仲裁节点。

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

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

“当前”配置是指在发出replSetReconfig时主节点使用的副本配置。

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

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

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

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

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

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

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

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

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

无论先前配置的提交状态如何,发出强制重新配置都会立即安装新配置。强制重新配置可能会导致意外行为,例如回滚"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可以触发当前主节点降级。主节点降级会触发选举以选择新的主节点:

  • 当新的主节点升级时,它会递增term字段,以区分对新主节点所做的配置更改与对前一个主节点所做的更改。

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

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

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

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

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

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

警告

强制执行replSetReconfig命令可能会导致回滚情况。请谨慎使用。

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

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

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

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

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

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

← replSetMaintenance