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

自管理副本集配置

您可以使用 rs.conf() 方法或 replSetGetConfig 命令访问副本集的配置。

要修改副本集的配置,请使用 rs.reconfig() 方法,并向该方法传递配置文档。

警告

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

以下文档提供了副本集配置文档的表示。副本集的配置可能仅包含以下设置的子集:

{
_id: <string>,
version: <int>,
term: <int>,
protocolVersion: <number>,
writeConcernMajorityJournalDefault: <boolean>,
configsvr: <boolean>,
members: [
{
_id: <int>,
host: <string>,
arbiterOnly: <boolean>,
buildIndexes: <boolean>,
hidden: <boolean>,
priority: <number>,
tags: <document>,
secondaryDelaySecs: <int>,
votes: <number>
},
...
],
settings: {
chainingAllowed : <boolean>,
heartbeatIntervalMillis : <int>,
heartbeatTimeoutSecs: <int>,
electionTimeoutMillis : <int>,
catchUpTimeoutMillis : <int>,
getLastErrorModes : <document>,
getLastErrorDefaults : <document>,
replicaSetId: <ObjectId>
}
}
_id

类型:字符串

副本集的名称。

_id 必须与命令行上指定给 mongod 的 replication.replSetName 或 --replSet 的值相同。

提示

replSetName 或 --replSet,了解如何设置副本集名称。

version

类型:int

一个递增的数字,区分副本集配置文档的修订版本和配置的先前迭代。

副本集成员使用 term 和 version 就“最新”副本配置达成共识。当成员比较副本配置文档时,具有较大 term 的配置文档被视为“最新”。如果 term 相同或不存在,则具有较大 version 的配置文档被视为“最新”。

term

类型:int

仅适用于 featureCompatibilityVersion (FCV) "4.4" 或更高版本。

一个递增的数字,用于副本集配置文档的修订与配置的先前迭代。配置文档的 与执行重新配置的副本集主节点 (primaryterm node in the replica set)的术语匹配。主节点 (primary node in the replica set)在赢得选举后每次升级时都会增加其术语。如果在 操作中显式设立,主节点 (primaryreplSetReconfigterm node in the replica set)将忽略 字段。

发出强制重新配置命令会删除 term字段。当主节点 (primary node in the replica set)节点下次在不强制的情况下发出 replSetReconfig 时,会将 term 设置为其自己的术语。

副本集成员使用 term 和 version 就“最新”副本配置达成共识。当成员比较副本配置文档时,具有较大 term 的配置文档被视为“最新”。如果 term 相同或不存在,则具有较大 version 的配置文档被视为“最新”。

configsvr

类型:布尔值

默认:false

指示副本集是否用于分片集群的配置服务器。如果副本集用于分片集群的配置服务器,则设置为 true。

protocolVersion

类型:数字

默认值:1

MongoDB 仅支持 protocolVersion: 1,不再支持 protocolVersion: 0。

writeConcernMajorityJournalDefault

类型:布尔值

默认值:true

如果 { w: "majority" } 写关注未显式指定日志选项 j,则确定该写关注的行为。

下表列出了 writeConcernMajorityJournalDefault 值和关联的 { w: "majority" } 行为:

值
{ w: "majority" } 行为

true

当大多数投票节点写入磁盘日志后,MongoDB 会确认该写入操作。

重要提示:当 writeConcernMajorityJournalDefault 为 true 时,副本集的所有投票节点都必须使用日志记录功能运行。

如果副本集的任何投票成员使用内存中存储引擎,则必须将 writeConcernMajorityJournalDefault设立为false 。

如果副本集的任何投票节点使用内存存储引擎并且 writeConcernMajorityJournalDefault 为 true,则 "majority" 写入操作可能会失败。其中包括本身使用 "majority" 写关注的操作,例如 replSetStepDown 命令,或各种 mongosh 方法,这些方法默认使用 "majority" 写关注,例如用户管理方法和角色管理方法。

从版本4.2 (以及4.0.13 和3.6.14 )开始,如果副本集成员使用内存中存储引擎(投票或非投票),但副本集已将 设立为writeConcernMajorityJournalDefault true,则副本集成员会记录初创企业警告。

false

当大多数投票节点在内存中应用该操作后,MongoDB 会确认该写入操作。

警告:

如果副本集的任何投票成员使用内存中存储引擎,则必须将 writeConcernMajorityJournalDefault设立为false 。

从版本4.2 (以及4.0.13 和3.6.14 )开始,如果副本集成员使用内存中存储引擎(投票或非投票),但副本集已将 设立为writeConcernMajorityJournalDefault true,则副本集成员会记录初创企业警告。

writeConcernMajorityJournalDefault您无法在具有将 设立为false 的分片(例如具有使用内存中存储引擎的投票成员的分片)的分片集群上运行事务。

members

类型:数组

节点配置文档大量,副本集的每个节点对应一个文档。members 大量是一个从零开始索引的大量。

每份节点专用配置文档可包含以下字段:

members[n]._id

类型:整型

副本集中节点的整数标识符,在所有节点中具有唯一性。

从 MongoDB 5.0 开始,该值可以是大于或等于 0 的任何整数值。以前,该值仅限于 0 和 255(含)之间的整数。

_id_idmembers[n]每个副本集节点都必须具有唯一的_id 。即使当前配置中没有 条目使用该 ,也请避免重复使用 值。

一旦设立,就不能更改成员的_id 。

注意

更新副本配置对象时,使用members 数组索引访问数组中的副本集成员。数组索引从 0 开始。请勿将此索引值与 members[n]._id 数组中每个文档的 members 字段的值混淆。

members[n].host

类型:字符串

主主机名以及副本集节点的端口号(如果端口号经过设置)。

副本集中每个托管的托管名称必须可解析。

警告

members[n].host不能包含解析为 或本地接口的值,除非设立的所有成员都位于解析为localhost localhost的主机上。

members[n].arbiterOnly

可选。

类型:布尔值

默认:false

标识仲裁节点的布尔值。值为 true 表示该节点是仲裁节点。

使用rs.addArb() 方法添加仲裁节点时,该方法会自动将添加的节点的members[n].arbiterOnly 设置为true 。

members[n].buildIndexes

可选。

类型:布尔值

默认值:true

布尔值,表示mongod 是否在此成员上构建索引。只有在向副本集添加成员时,才能设立此值。将成员添加到设立后,您无法更改members[n].buildIndexes 字段。要添加成员,请参阅rs.add() 和rs.reconfig() 。

对于接收来自客户端的查询的 mongod 实例,请勿将其设置为 false。

如果以下所有条件为 true,则将buildIndexes设置为 false可能会很有用:

  • 您仅使用此实例通过 执行备份,并且mongodump

  • 此成员将不会收到任何查询,且

  • 索引创建和维护使主机系统负担过重。

即使设置为 false,从节点(secondary node from replica set)也会对 _id 字段构建索引,以便执行复制所需的操作。

警告

如果将 members[n].buildIndexes 设置为 false,则还必须将 members[n].priority 设置为 0。如果 members[n].priority 不是 0,MongoDB 将在尝试添加 members[n].buildIndexes 等于 false 的成员时返回错误。

为确保成员不接收任何查询,应隐藏所有未构建索引的实例。

其他从节点无法从 为 falsemembers[n].buildIndexes 的节点复制。

members[n].hidden

可选。

类型:布尔值

默认:false

当该值为 true 时,副本集会隐藏该实例,不会将该节点包含在 db.hello() 或 hello 的输出中。这可防止读取操作(即查询)通过从节点读取偏好到达此主机。

隐藏成员可以确认使用写关注发出的写入操作。对于使用"majority" 写关注(write concern)发出的写入操作,该成员还必须是投票成员(即,votes 大于0 )。

members[n].priority

可选。

类型:主节点/从节点的数字在 0 到 1000 之间,或仲裁节点的数字为 0 或 1。

默认:主节点/从节点为 1.0,仲裁节点为 0。

一个数字,表示副本集节点成为主节点的相对可能性。

  • 要提高某个成员成为从节点的可能性,请为该成员指定较高的 priority 值。

  • 要降低某个节点成为主节点的可能性,请为该节点指定一个较低的 priority 值。

更改节点的优先级会触发一次或多次选举。选举算法尽最大努力将优先级最高的节点选为主节点。然而,即使有较高优先级的从节点可用,较低优先级的节点也可能成为主节点。

如果优先级较低的节点成为节点,服务器将继续定期进行选举,直到优先级最高的副本集节点成为主节点。选举频率取决于当选节点和最高优先级节点之间的优先级差异。

优先级为 0 的成员无法成为主节点。

无投票权的节点(指将votes 设立为0 的节点)的优先级必须为0 。

members[n].tags

可选。

类型:文档

默认:无

一份 tags 文档包含用户定义的副本集节点标签字段和值对。

{ "<tag1>": "<string1>", "<tag2>": "<string2>",... }

有关更多信息,请参阅配置副本集标签集。

members[n].secondaryDelaySecs

可选。

类型:整型

默认值:0

该副本集节点应“滞后”于主节点的秒数。

使用此选项创建延迟节点。延迟节点维护反映过去某个时间点数据状态的数据副本。

延迟成员可以帮助确认使用写关注发出的写入操作。但是,它们返回的写入确认不早于配置的延迟值。对于使用"majority" 写关注(write concern)发出的写入操作,该成员还必须是投票成员(即,votes 大于0 )。

members[n].votes

可选。

类型:整型

默认值:1

服务器在副本集选举中将投的票数。每个节点拥有的票数为 1 或 0,仲裁节点始终恰好拥有 1 票。

大于priority 的成员不能具有0 0votes。

副本集最多可以有50 7个节点,但只能有 个有投票权的节点。如果一个副本集需要超过7 members[n].votes0个成员,请将额外的无投票权成员的 设立为 。

非投票(即 votes 为 0)成员的 priority 必须为 0。

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

无投票权的成员无法确认带有"majority"写关注的写入操作。

settings

可选。

类型:文档

一份包含应用于整个副本集的配置选项的文档。

settings文档包含以下字段:

settings.chainingAllowed

可选。

类型:布尔值

默认值:true

在MongoDB5.0.1 及更早版本中,如果settings.chainingAllowed 是:

  • true副本集的从节点可以从其他从节点复制数据。

  • false,从节点只能从主节点复制数据。

从 MongoDB 5.0.2 开始:

  • 启用覆盖设置后,即使 settings.chainingAllowed 为 false,副本集的从节点成员也可以从其他从节点成员复制数据。

  • 要覆盖 settings.chainingAllowed 并允许从从从节点(secondary node from replica set)成员复制,请将 enableOverrideClusterChainingSetting服务器参数设立为 true。

  • enableOverrideClusterChainingSetting 的默认值为 false。

settings.getLastErrorDefaults

可选。

类型:文档

(从 MongoDB 5.0 开始提供)

重要

从MongoDB5.0 开始,除了默认 之外,您不能使用 默认写关注(writesettings.getLastErrorDefaults { w: 1, wtimeout: 0 }concern)。相反,请使用 命令为副本集或分片集群设立默认的读关注或写关注(writesetDefaultRWConcern concern)配置。

settings.getLastErrorModes

可选。

类型:文档

用于通过使用 定义自定义写关注(write members[n].tagsconcern)的文档。自定义写关注(write concern)可以提供数据中心感知。

{ getLastErrorModes: {
<name of write concern> : { <tag1>: <number>, .... },
...
} }

<number>是指满足写关注(write concern)所需的不同标签值的数量。示例,以下settings.getLastErrorModes 定义了一个名为 的写关注(writedatacenter concern),它要求将写入传播到两个dc 标签值不同的成员。

{ getLastErrorModes: { datacenter: { "dc": 2 } } }

要使用自定义写关注(write concern),请将写关注名称传递给 w 选项,示例:

{ w: "datacenter" }

有关更多信息和示例,请参阅配置副本集标记集。

settings.heartbeatTimeoutSecs

可选。

类型:int

默认值:10

副本集节点等待彼此成功心跳的秒数。如果某个节点没有及时回复,其他节点会将节点标记为不可访问。

settings.electionTimeoutMillis

可选。

类型:int

默认值:10000(10 秒)

检测副本集主节点 (primary node in the replica set)无法访问的时间限制(以毫秒为单位)。此设置控制使用protocolVersion: 1 时的故障转移灵敏度。预计故障转移转移超时不会超过electionTimeoutMillis 的值。

选择值时,请考虑以下事项:

  • 较高的值会导致故障转移速度较慢,但会减少对主节点或网络缓慢或不稳定的敏感度。

  • 较低的值会加快故障转移,但会增加对主节点或网络缓慢或不稳定的敏感度。

该设置仅在使用 protocolVersion: 1 时适用。

注意

当您使用rs.stepDown()或replSetStepDown退出主节点而未将force字段设置为true时,退出的主节点会指定一个符合条件的从节点来立即进行选举。

settings.catchUpTimeoutMillis

可选。

类型:int

默认:-1,无限追赶时间。

新选出的主节点与可能有更多近期写入操作的其他副本集成员进行同步(赶上)的时间限制(以毫秒为单位)。无限或较高的时间限制可能会减少其他成员在选举后需要回滚的数据量,但可能会延长故障转移时间。

新当选的主节点一旦被其他节点完全赶上,则会提前结束追赶期。在追赶期间,新当选的主节点不可用于客户端的写入操作。使用 replSetAbortPrimaryCatchUp 中止追赶,然后完成向主节点的过渡。

该设置仅在使用 protocolVersion: 1 时适用。

settings.catchUpTakeoverDelayMillis

可选。

类型:int

默认:30000(30 秒)

某节点在确定其领先于当前主节点后,等待启动追赶接管的时间(以毫秒为单位)。在追赶接管期间,当前主节点之前的节点发起选举以成为副本集的新主节点。

启动接管的节点确定其领先于当前主节点后,会等待指定的毫秒数,然后验证:

  1. 它仍然领先于当前主节点,

  2. 它是所有可用节点中最新的节点,

  3. 当前主节点正在追赶它。

一旦确定所有这些条件都得到满足,启动接管的节点将立即竞选。

有关副本集选举的更多信息,请参阅副本集选举。

注意

将 设置为catchUpTakeoverDelayMillis-1 会禁用追赶接管。将catchUpTimeoutMillis 设置为0 会禁用主节点 (primary node in the replica set)追赶,因此也会禁用追赶接管。

settings.heartbeatIntervalMillis

仅供内部使用。

心跳频率(以毫秒为单位)。

settings.replicaSetId

类型:对象标识符

与副本集关联并在 rs.initiate() 或 replSetInitiate 期间自动创建的 ObjectId。您无法更改 replicaSetId。