文档菜单
文档首页
/
MongoDB 手册
/ / /

自托管副本集配置

本页内容

  • 副本集配置文档示例
  • 副本集配置字段

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

要修改副本集的配置,请使用 rs.reconfig() 方法,并将配置文档传递给该方法。有关更多信息,请参阅 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 必须replication.replSetName 或通过命令行指定给 mongod--replSet 的值相同。

提示

查看

replSetName--replSet 了解设置副本集名称的详细信息。

version

类型: 整数

一个递增数字,用于区分副本集配置文档与之前配置的迭代。

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

术语

类型: 整数

仅在带有 功能兼容版本(fCV)"4.4" 或更高版本的系统中可用。

一个递增的数字,用于区分副本集配置文档的不同版本。配置文档的 术语 与执行重新配置的副本集 主节点 的术语相匹配。每当主节点在选举中获胜后升级时,主节点都会增加其术语。如果主节点在 术语 字段中明确设置,则主节点忽略该字段。

发出一个 强制 重新配置将删除 术语 字段。当主节点下次发出 replSetReconfig 而不 强制时,它会将 术语 设置为其自己的术语。

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

configsvr

类型: 布尔型

默认值: false

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

协议版本

类型: 数字

默认值: 1

MongoDB 仅支持 协议版本: 1 且不再支持 协议版本: 0

writeConcernMajorityJournalDefault

类型: 布尔型

默认值: true

确定在没有明确指定日志选项 { w: "majority" } 的情况下,j. 写关注行为。

以下表格列出了 writeConcernMajorityJournalDefault 的值和相关的 { w: "majority" } 行为。

{ w: "majority" } 行为
true

MongoDB 在大多数投票成员已写入磁盘日志后确认写入操作。

重要:writeConcernMajorityJournalDefaulttrue 时,副本集的所有投票成员都必须运行日志记录。

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

如果副本集的任何投票成员使用内存存储引擎并且writeConcernMajorityJournalDefault设置为true,则“majority”写入操作可能会失败。这包括使用“majority”写入关注的操作,例如"majority"写入关注的操作,如replSetStepDown命令,或者默认使用"majority"写入关注的mongosh方法,例如用户管理方法角色管理方法

从版本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 的任何整数。之前,此值限制在 0255 的整数之间。

每个副本集成员必须有一个唯一的 _id。即使当前配置中没有 members[n] 条目使用该 _id,也要避免重复使用 _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

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

  • 您仅使用此实例使用 mongodump 进行备份,并且

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

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

即使设置为 false,次要成员 也会_id 字段上构建索引,以便于复制所需的操作。

警告

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

为了确保成员不会收到查询,您应该将所有不构建索引的实例隐藏起来。

其他次要成员不能从 members[n].buildIndexes 为假的成员进行复制。

members[n].hidden

可选.

类型: 布尔型

默认值: false

当此值设置为 true 时,副本集将隐藏此实例,并且不会将该成员包含在 db.hello()hello 的输出中。这通过二级 读首选项 防止读操作(即查询)通过此主机到达。

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

提示

另请参阅

members[n].priority

可选.

类型:主/副节点的数字,范围在 0 到 1000 之间;仲裁员的 0 或 1。

默认值:主/副节点为 1.0;仲裁员为 0。

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

  • 为了提高成员成为主节点的可能性,可以为该成员指定更高的 priority 值。

  • 为了降低成员成为主节点的可能性,为该成员指定一个更低的优先级值。

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

如果较低优先级的成员成为主节点,服务器将继续定期调用选举,直到最高优先级的副本集成员成为主节点。选举发生的频率取决于被选举成员与最高优先级成员之间的优先级差异。

优先级为0的成员不能成为主节点。

非投票成员(即那些将votes设置为0的成员)必须具有优先级为0

members[n].tags

可选.

类型:文档

默认值:无

一个tags文档包含副本集成员的用户定义标签字段和值对。

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

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

members[n].secondaryDelaySecs

可选.

类型: 整数

默认值: 0

该副本集成员应该“落后”主成员的秒数。

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

延迟成员可以参与到确认使用写入关注发布的写入操作。但是,它们返回写入确认的时间不早于配置的延迟值。对于使用"majority"写入关注发布的写入操作,成员还必须是投票成员(即votes大于0)。

提示

另请参阅

members[n].votes

可选.

类型: 整数

默认值: 1

服务器在副本集选举中将投的票数。每个成员的投票数要么是1,要么是0,而仲裁者始终恰好有1票。

优先级大于0的成员不能有0票。

副本集最多可以有50个成员,但只有7个投票成员。如果您需要一个副本集有超过7个成员,请将额外非投票成员的members[n].votes设置为0

非投票成员(即votes0)必须具有priority为0。

从MongoDB 5.0开始,新添加的从节点不会作为投票成员计算,并且不能被选举,直到它达到SECONDARY状态。

非投票成员不能确认使用"majority"写关注发出的写操作。

settings

可选.

类型:文档

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

settings文档包含以下字段

settings.chainingAllowed

可选.

类型: 布尔型

默认值: true

在MongoDB 5.0.1及更早版本中,如果

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

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

从MongoDB 5.0.2开始

  • 即使

  • settings.chainingAllowed设置为

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

提示

另请参阅

settings.chainingAllowed,将服务器参数

可选.

类型:文档

enableOverrideClusterChainingSetting设置为

true

从MongoDB 5.0开始,您不能使用settings.getLastErrorDefaults指定默认写入关注,除了默认的{ w: 1, wtimeout: 0 }。相反,使用setDefaultRWConcern命令来设置副本集或分片集群的默认读或写关注配置。

settings.getLastErrorModes

可选.

类型:文档

一个文档,用于通过使用members[n].tags定义自定义写入关注。自定义写入关注可以提供数据中心感知

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

<number>指的是满足写入关注所需的不同的标记值数量。例如,以下settings.getLastErrorModes定义了一个名为datacenter的写入关注,要求写入传播到两个dc标记值不同的成员。

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

要使用自定义写入关注,将写入关注名称传递给w选项,例如。

{ w: "datacenter" }

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

settings.heartbeatTimeoutSecs

可选.

类型: 整数

默认值: 10

副本集成员等待彼此成功心跳的时间(以秒为单位)。如果成员未能及时响应,其他成员将该逾期成员标记为不可访问。

settings.electionTimeoutMillis

可选.

类型: 整数

默认值: 10000(10秒)

检测副本集主节点不可达的时间限制(以毫秒为单位)。此设置控制在使用 protocolVersion: 1 时的故障转移敏感性。您预期故障转移超时不会超过 electionTimeoutMillis 的值。

选择值时请考虑以下因素

  • 更高的值会导致故障转移速度变慢,但降低了主节点或网络缓慢或间歇性的敏感性。

  • 较低的值会导致故障转移速度加快,但增加了对主节点或网络缓慢或间歇性的敏感性。

此设置仅在 protocolVersion: 1 时适用。

注意

当您使用 rs.stepDown()replSetStepDown 将主节点降级时,如果没有将 force 字段设置为 true,则降级的主节点将提名一个符合条件的次级节点立即进行选举。

settings.catchUpTimeoutMillis

可选.

类型: 整数

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

新选出的主副本集成员与可能包含较新写入的其他副本集成员同步(赶上)的时间限制(毫秒)。无限或高时间限制可能会减少其他成员在选举后需要回滚的数据量,但可能会增加故障转移时间。

一旦新选出的主副本集成员完全赶上副本集的其他成员,它就会提前结束赶上期。在赶上期间,新选出的主副本集成员无法处理来自客户端的写入。使用 replSetAbortPrimaryCatchUp 来终止赶上并完成向主副本集的过渡。

此设置仅在 protocolVersion: 1 时适用。

settings.catchUpTakeoverDelayMillis

可选.

类型: 整数

默认值: 30000(30秒)

节点在确定自己领先当前 主节点 后等待多少毫秒以启动 赶上接管。在赶上接管过程中,当前主节点领先的那个节点将启动一个 选举,成为 副本集 的新主节点。

在启动接管节点的节点确定自己领先当前 主节点 后,它会等待指定的毫秒数,然后验证以下内容

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

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

  3. 当前主节点正在赶上它

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

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

注意

catchUpTakeoverDelayMillis 设置为 -1 将禁用赶上接管。将 catchUpTimeoutMillis 设置为 0 将禁用 主节点赶上,从而也禁用赶上接管。

settings.heartbeatIntervalMillis

仅限内部使用.

心跳频率(毫秒)。

settings.replicaSetId

类型: ObjectId

与副本集关联的ObjectId,在执行rs.initiate()replSetInitiate 时自动创建。您不能更改 replicaSetId.

返回

参考