rs.reconfig()
On this page本页内容
Definition定义
rs.reconfig( configuration, { options } )
-
Reconfigures an existing replica set, overwriting the existing replica set configuration.重新配置现有副本集,覆盖现有副本集配置。To run the method, you must connect to the primary of the replica set.若要运行该方法,必须连接到复制副本集的primary。Importantmongosh Method
This page documents a
mongosh
method. This is not the documentation for database commands or language-specific drivers, such as Node.js.For the database command, see the
replSetReconfig
command.For MongoDB API drivers, refer to the language-specific MongoDB driver documentation.
For the legacy
mongo
shell documentation, refer to the documentation for the corresponding MongoDB Server release:Thers.reconfig()
method has the following syntax:rs.reconfig()
方法具有以下语法:rs.reconfig(
<configuration>,
{
"force" : <boolean>,
"maxTimeMS" : <int>
}
)Parameter参数Type类型Description描述configuration
document A document that specifies the configuration of a replica set.指定副本集配置的文档。force
boolean Optional.可选的。Specify指定true
to force the available replica set members to accept the new configuration. Defaults tofalse
.true
可强制可用副本集成员接受新配置。默认为false
。
Force reconfiguration can result in unexpected or undesired behavior, including rollback of强制重新配置可能会导致意外或不希望的行为,包括回滚"majority"
committed writes."majority"
提交的写入。maxTimeMS
integer Optional.可选的。Specifies a cumulative time limit in milliseconds for processing the指定处理rs.reconfig()
operation.rs.reconfig()
操作的累积时间限制(以毫秒为单位)。By default,默认情况下,rs.reconfig()
waits indefinitely for the replica configuration to propagate to a majority of replica set members.rs.reconfig()
无限期地等待复制副本配置传播到大多数复制副本集成员。
New in version 4.4.4.4版新增。To reconfigure an existing replica set, first retrieve the current configuration with要重新配置现有的副本集,首先使用rs.conf()
, modify the configuration document as needed, and then pass the modified document tors.reconfig()
.rs.conf()
检索当前配置,根据需要修改配置文档,然后将修改后的文档传递给rs.reconfig()
。Theforce
parameter allows a reconfiguration command to be issued to a non-primary node.force
参数允许向非主节点发出重新配置命令。
Behavior行为
Global Write Concern全局写入关注
Starting in MongoDB 5.0, you must explicitly set the global default write concern before attempting to reconfigure a replica set with a configuration that would change the implicit default write concern. 从MongoDB 5.0开始,您必须显式地设置全局默认写入关注,然后才能尝试使用会更改隐式默认写入关注的配置来重新配置副本集。To set the global default write concern, use the 要设置全局默认写入关注,请使用setDefaultRWConcern
command.setDefaultRWConcern
命令。
term
Replica Configuration Field副本配置字段
MongoDB 4.4 adds the MongoDB 4.4将term
field to the replica set configuration document. term
字段添加到副本集配置文档中。The term
field is set by the primary replica set member. term
字段由primary副本集成员设置。The primary ignores the 如果在term
field if set explicitly in the rs.reconfig()
operation.rs.reconfig()
操作中显式设置,则primary将忽略term
字段。
Reconfiguration Can Add or Remove No More than One Voting Member at a Time重新配置一次最多可以添加或删除一个有投票权的成员
Starting in MongoDB 4.4, 从MongoDB 4.4开始,rs.reconfig()
by default allows adding or removing no more than 1
voting
member at a time. rs.reconfig()
默认情况下允许一次添加或删除不超过1
投票成员。For example, a new configuration can make at most one of the following changes to the cluster 例如,新配置最多可以对集群成员身份进行以下更改之一:membership
:
Adding a new voting replica set member.正在添加新的投票复制集成员。Removing an existing voting replica set member.正在删除现有的投票复制集成员。Modifying the修改现有副本集成员的votes
for an existing replica set member.votes
。
To add or remove multiple voting members, issue a series of 要添加或删除多个有投票权的成员,请执行一系列rs.reconfig()
operations to add or remove one member at a time.rs.reconfig()
操作,一次添加或删除一个成员。
Issuing a force reconfiguration immediately installs the new configuration even if it adds or removes multiple voting members. 发布force
重新配置会立即安装新配置,即使它添加或删除了多个投票成员。Force reconfiguration can cause unexpected behavior, such as the rollback of 强制重新配置可能会导致意外行为,例如回滚"majority"
committed write operations."majority"
提交的写入操作。
Reconfiguration Waits Until a Majority of Members Install the Replica Configuration重新配置等待大多数成员安装副本配置
Starting in MongoDB 4.4, 从MongoDB 4.4开始,rs.reconfig()
waits until a majority of voting replica set members install the new replica configuration before returning success. rs.reconfig()
等待大多数有投票权的副本集成员安装新的副本配置,然后返回成功。A voting member is any replica set member where 投票成员是members[n].votes
is 1
, including arbiters.members[n].votes
为1
的任何复制集成员,包括仲裁器。
Replica set members propagate their replica configuration via heartbeats. 副本集成员通过心跳传播其副本配置。Whenever a member learns of a configuration with a higher 每当成员了解到具有更高version
and term
, it installs the new configuration. The reconfiguration process has two distinct 'waiting' phases:version
和term
的配置时,就会安装新配置。重新配置过程有两个不同的“等待”阶段:
- 1)
Wait for the current configuration to be committed before installing the new configuration.请等待提交当前配置,然后再安装新配置。 -
The "current" configuration refers to the replica configuration in use by the primary at the time“当前”配置是指主配置在发出rs.reconfig()
is issued.rs.reconfig()
时使用的副本配置。A configuration is committed when:在以下情况下提交配置:A majority of voting replica set members have installed the current configuration, and大多数投票复制集成员已安装当前配置,并且All writes which were在以前的配置中"majority"
committed in the previous configuration have also replicated to a majority in the current configuration."majority"
提交的所有写入也已复制到当前配置中的多数。
Typically, the current configuration has already been installed on a majority of voting replica set members.通常,当前配置已安装在大多数有投票权的副本集成员上。However, the majority committed writes in the previous configuration may not all be committed in the current configuration.但是,以前配置中提交的大多数写入可能不会在当前配置中全部提交。延迟的成员或落后于primary的成员可能会增加在此阶段花费的时间。Delayed
members or members that arelagging behind
the primary can increase the time spent in this phase.If the operation was issued with a maxTimeMS limit and the operation exceeds the limit while waiting, the operation returns an error and discard the new configuration.如果发出的操作具有maxTimeMS
限制,并且该操作在等待时超过了限制,则该操作将返回错误并放弃新配置。The limit is cumulative and does not reset after proceeding to the next phase.该限制是累积的,在进入下一阶段后不会重置。 - 2)
Wait for a majority of voting members in the new configuration to install the new configuration.等待新配置中的大多数有投票权的成员安装新配置。 -
The "new" configuration refers to the replica configuration specified to“新”配置是指为rs.reconfig()
.rs.reconfig()
指定的副本配置。The primary installs and begins using the new replica configuration before propagating the configuration to the remaining replica set members.主复制副本安装并开始使用新的复制副本配置,然后将配置传播到其余的复制副本集成员。The operation only waits for a majority of voting members to install the new configuration, and does not require waiting for the new configuration to be committed.该操作只等待大多数有投票权的成员安装新配置,不需要等待提交新配置。If the operation was issued with a maxTimeMS limit and the operation exceeds the limit while waiting, the operation returns an error but continues using and propagating the new configuration.如果发出的操作具有maxTimeMS
限制,并且该操作在等待时超过了限制,则该操作会返回错误,但会继续使用和传播新配置。
Issuing a force reconfiguration immediately installs the new configuration regardless of the commitment status of the previous configuration. 发布force
重新配置会立即安装新配置,而不管以前配置的承诺状态如何。Force reconfiguration can cause unexpected behavior, such as the rollback of 强制重新配置可能会导致意外行为,例如回滚"majority"
committed write operations."majority"
提交的写入操作。
To check the commitment status of the current replica configuration, issue 要检查当前副本配置的承诺状态,请在副本集主服务器上发出带有replSetGetConfig
with the commitmentStatus parameter on the replica set primary.commitmentStatus
参数的replSetGetConfig
。
Access Control访问控制
To run the method on deployments that enforce access control, the user must have 若要在强制访问控制的部署上运行该方法,用户必须对群集资源具有replSetConfigure
privilege action on the cluster resource. replSetConfigure
权限操作。The clusterManager
built-in role, available in the admin
database, provides the required privileges for this command.clusterManager
内置角色在管理数据库中提供,为该命令提供所需的权限。
Locking Behavior锁定行为
rs.reconfig()
obtains a special mutually exclusive lock to prevent more than one 获得一个特殊的互斥锁,以防止同时发生多个rs.reconfig()
operation from occurring at the same time.rs.reconfig()
操作。
Mixed Version Replica Set混合版本副本集
Avoid reconfiguring replica sets that contain members of different MongoDB versions as validation rules may differ across MongoDB versions.避免重新配置包含不同MongoDB版本成员的副本集,因为验证规则可能因MongoDB版本而异。
Availability可用性
The 在某些情况下,rs.reconfig()
shell method can trigger the current primary to step down in some situations. rs.reconfig()
shell方法可以触发当前的primary退出。Primary step-down triggers an election to select a new primary:primary降级触发选择新primary的选举:
Starting in MongoDB 4.2, when the primary steps down, it no longer closes all client connections and writes that were in progress are killed. 从MongoDB 4.2开始,当主数据库关闭时,它不再关闭所有客户端连接,正在进行的写入也会被终止。For details, see Behavior.有关详细信息,请参阅行为。
The median time before a cluster elects a new primary should not typically exceed 12 seconds, assuming default 假设默认的复制副本配置设置,群集选择新主服务器之前的中间时间通常不应超过12秒。replica configuration settings
. This includes time required to mark the primary as unavailable and call and complete an election. 这包括将初选标记为不可用、召集并完成选举所需的时间。You can tune this time period by modifying the 您可以通过修改settings.electionTimeoutMillis
replication configuration option. settings.electionTimeoutMillis
复制配置选项来调整此时间段。Factors such as network latency may extend the time required for replica set elections to complete, which in turn affects the amount of time your cluster may operate without a primary. 网络延迟等因素可能会延长副本集选举完成所需的时间,这反过来又会影响集群在没有主服务器的情况下运行的时间。These factors are dependent on your particular cluster architecture.这些因素取决于您的特定集群体系结构。
During the election process, the cluster cannot accept write operations until it elects the new primary.在选择过程中,群集在选择新的主群集之前无法接受写入操作。
Your application connection logic should include tolerance for automatic failovers and the subsequent elections. 您的应用程序连接逻辑应该包括对自动故障切换和后续选择的容忍度。MongoDB drivers can detect the loss of the primary and automatically retry certain write operations a single time, providing additional built-in handling of automatic failovers and elections:MongoDB驱动程序可以检测到主写入操作的丢失,并一次自动重试某些写入操作,从而提供对自动故障切换和选择的额外内置处理:
Compatible drivers enable retryable writes by default兼容的驱动程序默认情况下启用可重试写入
To further reduce potential impact to a production cluster, reconfigure only during scheduled maintenance periods.为了进一步减少对生产集群的潜在影响,请仅在计划维护期间进行重新配置。
{ force: true }
Using 将rs.reconfig()
with { force: true }
can lead to rollback of majority-committed writes. rs.reconfig()
与{ force: true }
一起使用可能会导致多数提交写入的回滚。Exercise caution when using this option.使用此选项时要小心。
Member Priority and Votes会员优先级和投票
Drop Outgoing Connections After Removing a Member删除成员后删除传出连接
Using 使用rs.reconfig()
to remove a replica set member does not automatically drop open outgoing connections from other replica set members to the removed member.rs.reconfig()
删除副本集成员不会自动删除从其他副本集成员到被删除成员的打开的传出连接。
By default, replica set members wait for 5 minutes before dropping connections to the removed member. 默认情况下,副本集成员要等待5分钟,然后才能断开与已删除成员的连接。In sharded replica sets, you can modify this timeout using the 在分片副本集中,可以使用ShardingTaskExecutorPoolHostTimeoutMS
server parameter.ShardingTaskExecutorPoolHostTimeoutMS
服务器参数修改此超时。
New in version 4.2:4.2版新增:To immediately drop all outgoing connections from the replica set to the removed member, run the 要立即将所有从副本集到已删除成员的传出连接都删除,请对副本集中的每个剩余成员运行dropConnections
administrative command on each remaining member on the replica set:dropConnections
管理命令:
db.adminCommand(
{
"dropConnections" : 1,
"hostAndPort" : [
"<hostname>:<port>"
]
}
)
Replace 将<hostname>
and <port>
with those of the removed member.<hostname>
和<port>
替换为已删除成员的<hostname>
和<port>
。
Automatic Reconfiguration for New Voting Replica Set Members新投票副本集成员的自动重新配置
Starting in MongoDB 5.0, a newly added secondary does not count as a voting member and cannot be elected until it has reached the 从MongoDB 5.0开始,新添加的secondary不算作有投票权的成员,并且在达到SECONDARY
state.SECONDARY
状态之前无法当选。
When a new voting node is added to a replica set, 当一个新的投票节点被添加到副本集中时,replSetReconfig
will internally add a newlyAdded
field to the node's configuration. replSetReconfig
将在内部向节点的配置中添加一个newlyAdded
字段。Nodes with the 带有newlyAdded
field do not count towards the current number of voting nodes. When initial sync completes and the node reaches SECONDARY
state, the newlyAdded
field is automatically removed.newlyAdded
字段的节点不计入当前投票节点数。当初始同步完成并且节点达到SECONDARY
状态时,newlyAdded
字段将自动删除。
Configurations that attempt to add a field named即使使用newlyAdded
will error even if run with{ force: true }
.{ force: true }
运行,尝试添加名为newreAdded
的字段的配置也会出错。If an existing node has a如果现有节点有一个newlyAdded
field, usingrs.reconfig()
to change the configuration will not remove thenewlyAdded
field.newlyAdded
字段,则使用rs.reconfig()
更改配置不会删除newlyAdded
字段。ThenewlyAdded
field will be appended to the user provided configuration.newlyAdded
字段将附加到用户提供的配置中。replSetGetConfig
will remove any将从其输出中删除任何newlyAdded
fields from its output.newlyAdded
字段。If you would like to see any如果您想查看任何newlyAdded
fields, you can query thelocal.system.replset
collection directly.newlyAdded
字段,可以直接查询local.system.replset
集合。
Examples实例
A replica set named 名为rs0
has the following configuration:rs0
的复制副本集具有以下配置:
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 2000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("58858acc1f5609ed986b641b")
}
}
Change Replica Set Member Priority更改副本集成员优先级
The following sequence of operations updates the 以下操作序列更新第二个成员的members[n].priority
of the second member. members[n].priority
。The operations are issued through a 操作是通过连接到主服务器的mongosh
session that is connected to the primary.mongosh
会话发出的。
cfg = rs.conf();
cfg.members[1].priority = 2;
rs.reconfig(cfg);
The first statement uses the第一条语句使用rs.conf()
method to retrieve a document containing the current configuration for the replica set and sets the document to the local variablecfg
.rs.conf()
方法检索包含副本集当前配置的文档,并将该文档设置为本地变量cfg
。The second statement sets a第二条语句为members[n].priority
value to the second document in themembers
array.members
数组中的第二个文档设置members[n].priority
值。For additional settings, see replica set configuration settings.有关其他设置,请参阅复制副本集配置设置。To access the member configuration document in the array, the statement uses the array index and not the replica set member's要访问数组中的成员配置文档,该语句使用数组索引,而不是副本集成员的members[n]._id
field.members[n]._id
字段。The last statement calls the最后一条语句使用修改后的rs.reconfig()
method with the modifiedcfg
to initialize this new configuration. Upon successful reconfiguration, the replica set configuration will resemble the following:cfg
调用rs.reconfig()
方法来初始化这个新配置。成功重新配置后,复制副本集配置将类似于以下内容:
{
"_id" : "rs0",
"version" : 2,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 2000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("58858acc1f5609ed986b641b")
}
}
Change Replica Set Settings更改副本集设置
You can also modify the cluster replica set 您还可以修改群集复制副本集settings
document. settings
文档。The settings
document contains configuration options that apply to the whole replica set.settings
文档包含适用于整个复制副本集的配置选项。
The following sequence of operations updates the 以下操作序列将群集的设置settings.heartbeatTimeoutSecs
of the cluster to 15
. settings.heartbeatTimeoutSecs
更新为15
。The operations are issued through a 操作是通过连接到主服务器的mongosh
session that is connected to the primary.mongosh
会话发出的。
cfg = rs.conf();
cfg.settings.heartbeatTimeoutSecs = 15;
rs.reconfig(cfg);