自托管副本集配置
您可以通过以下方式访问副本集的配置:副本集 使用 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
的值相同。
version
类型: 整数
一个递增数字,用于区分副本集配置文档与之前配置的迭代。
副本集成员使用
term
和version
来在“最新”副本集配置上达成共识。当成员比较副本集配置文档时,具有更大term
的配置文档被认为是“最新”的。如果term
相同或不存在,则具有更大version
的配置文档被认为是“最新”的。
术语
类型: 整数
仅在带有 功能兼容版本(fCV)"4.4" 或更高版本的系统中可用。
一个递增的数字,用于区分副本集配置文档的不同版本。配置文档的
术语
与执行重新配置的副本集 主节点 的术语相匹配。每当主节点在选举中获胜后升级时,主节点都会增加其术语。如果主节点在术语
字段中明确设置,则主节点忽略该字段。发出一个 强制 重新配置将删除
术语
字段。当主节点下次发出replSetReconfig
而不 强制时,它会将术语
设置为其自己的术语。副本集成员使用
term
和version
来在“最新”副本集配置上达成共识。当成员比较副本集配置文档时,具有更大term
的配置文档被认为是“最新”的。如果term
相同或不存在,则具有更大version
的配置文档被认为是“最新”的。
writeConcernMajorityJournalDefault
类型: 布尔型
默认值: true
确定在没有明确指定日志选项
{ w: "majority" }
的情况下,j.
写关注行为。以下表格列出了
writeConcernMajorityJournalDefault
的值和相关的{ w: "majority" }
行为。值{ w: "majority" }
行为trueMongoDB 在大多数投票成员已写入磁盘日志后确认写入操作。
重要: 当
writeConcernMajorityJournalDefault
为true
时,副本集的所有投票成员都必须运行日志记录。如果副本集的任何投票成员使用
内存存储引擎
,则必须将writeConcernMajorityJournalDefault
设置为false
。如果副本集的任何投票成员使用内存存储引擎并且
writeConcernMajorityJournalDefault
设置为true
,则“majority”写入操作可能会失败。这包括使用“majority”写入关注的操作,例如"majority"
写入关注的操作,如replSetStepDown
命令,或者默认使用"majority"
写入关注的mongosh
方法,例如用户管理方法和角色管理方法。从版本4.2(以及4.0.13和3.6.14)开始,如果副本集成员使用内存存储引擎(投票或非投票),但副本集将
writeConcernMajorityJournalDefault
设置为true,则副本集成员会在启动时记录一条警告信息。falseMongoDB在多数投票成员已将操作应用到内存后确认写入操作。
警告
如果副本集的任何投票成员使用
内存存储引擎
,则必须将writeConcernMajorityJournalDefault
设置为false
。从版本4.2(以及4.0.13和3.6.14)开始,如果副本集成员使用内存存储引擎(投票或非投票),但副本集将
writeConcernMajorityJournalDefault
设置为true,则副本集成员会在启动时记录一条警告信息。您不能在将
writeConcernMajorityJournalDefault
设置为false
(例如,使用内存存储引擎的投票成员)的碎片集群上运行事务。
members
members
类型: 数组
成员配置文档的数组,每个副本集成员一个。数组
members
是一个零索引数组。每个成员特定的配置文档可以包含以下字段
members[n]._id
类型: 整数
副本集中成员的整数标识符,在所有成员中是唯一的。
从 MongoDB 5.0 开始,值可以是大于或等于
0
的任何整数。之前,此值限制在0
到255
的整数之间。每个副本集成员必须有一个唯一的
_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>",... } 对于读操作,您可以在读取偏好中指定一个标签集,以将操作定向到具有指定标签的副本集成员。
对于写操作,您可以使用
settings.getLastErrorModes
和settings.getLastErrorDefaults
创建一个自定义的写关注。
有关更多信息,请参阅配置副本集标签集。
members[n].secondaryDelaySecs
可选.
类型: 整数
默认值: 0
该副本集成员应该“落后”主成员的秒数。
使用此选项创建延迟成员。延迟成员维护数据的副本,该副本反映了过去某个时间点的数据状态。
延迟成员可以参与到确认使用写入关注发布的写入操作。但是,它们返回写入确认的时间不早于配置的延迟值。对于使用
"majority"
写入关注发布的写入操作,成员还必须是投票成员(即votes
大于0
)。
members[n].votes
可选.
类型: 整数
默认值: 1
服务器在副本集选举中将投的票数。每个成员的投票数要么是
1
,要么是0
,而仲裁者始终恰好有1
票。优先级大于0的成员不能有0票。
副本集最多可以有50个成员,但只有7个投票成员。如果您需要一个副本集有超过7个成员,请将额外非投票成员的
members[n].votes
设置为0
。非投票成员(即
votes
为0
)必须具有priority
为0。从MongoDB 5.0开始,新添加的从节点不会作为投票成员计算,并且不能被选举,直到它达到
SECONDARY
状态。非投票成员不能确认使用
"majority"
写关注发出的写操作。
settings
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.electionTimeoutMillis
可选.
类型: 整数
默认值: 10000(10秒)
检测副本集主节点不可达的时间限制(以毫秒为单位)。此设置控制在使用
protocolVersion: 1
时的故障转移敏感性。您预期故障转移超时不会超过electionTimeoutMillis
的值。选择值时请考虑以下因素
更高的值会导致故障转移速度变慢,但降低了主节点或网络缓慢或间歇性的敏感性。
较低的值会导致故障转移速度加快,但增加了对主节点或网络缓慢或间歇性的敏感性。
此设置仅在
protocolVersion: 1
时适用。注意
当您使用
rs.stepDown()
或replSetStepDown
将主节点降级时,如果没有将force
字段设置为true
,则降级的主节点将提名一个符合条件的次级节点立即进行选举。
settings.catchUpTimeoutMillis
可选.
类型: 整数
默认值: -1,无限期追赶时间。
新选出的主副本集成员与可能包含较新写入的其他副本集成员同步(赶上)的时间限制(毫秒)。无限或高时间限制可能会减少其他成员在选举后需要回滚的数据量,但可能会增加故障转移时间。
一旦新选出的主副本集成员完全赶上副本集的其他成员,它就会提前结束赶上期。在赶上期间,新选出的主副本集成员无法处理来自客户端的写入。使用
replSetAbortPrimaryCatchUp
来终止赶上并完成向主副本集的过渡。此设置仅在
protocolVersion: 1
时适用。
settings.catchUpTakeoverDelayMillis
可选.
类型: 整数
默认值: 30000(30秒)
节点在确定自己领先当前 主节点 后等待多少毫秒以启动 赶上接管。在赶上接管过程中,当前主节点领先的那个节点将启动一个 选举,成为 副本集 的新主节点。
在启动接管节点的节点确定自己领先当前 主节点 后,它会等待指定的毫秒数,然后验证以下内容
它仍然领先当前主节点
它是所有可用节点中最新的节点
当前主节点正在赶上它
一旦确定所有这些条件都已满足,启动接管的节点将立即竞选选举。
有关副本集选举的更多信息,请参阅 副本集选举。
注意
将
catchUpTakeoverDelayMillis
设置为-1
将禁用赶上接管。将catchUpTimeoutMillis
设置为0
将禁用 主节点赶上,从而也禁用赶上接管。
settings.replicaSetId
类型: ObjectId
与副本集关联的ObjectId,在执行
rs.initiate()
或replSetInitiate
时自动创建。您不能更改replicaSetId
.