您可以使用 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" 或更高版本。
一个递增的数字,用于副本集配置文档的修订与配置的先前迭代。配置文档的 与执行重新配置的副本集主节点 (primary
termnode in the replica set)的术语匹配。主节点 (primary node in the replica set)在赢得选举后每次升级时都会增加其术语。如果在 操作中显式设立,主节点 (primaryreplSetReconfigtermnode in the replica set)将忽略 字段。发出强制重新配置命令会删除
term字段。当主节点 (primary node in the replica set)节点下次在不强制的情况下发出replSetReconfig时,会将term设置为其自己的术语。副本集成员使用
term和version就“最新”副本配置达成共识。当成员比较副本配置文档时,具有较大term的配置文档被视为“最新”。如果term相同或不存在,则具有较大version的配置文档被视为“最新”。
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 )开始,如果副本集成员使用内存中存储引擎(投票或非投票),但副本集已将 设立为
writeConcernMajorityJournalDefaulttrue,则副本集成员会记录初创企业警告。false
当大多数投票节点在内存中应用该操作后,MongoDB 会确认该写入操作。
警告:如果副本集的任何投票成员使用内存中存储引擎,则必须将
writeConcernMajorityJournalDefault设立为false。从版本4.2 (以及4.0.13 和3.6.14 )开始,如果副本集成员使用内存中存储引擎(投票或非投票),但副本集已将 设立为
writeConcernMajorityJournalDefaulttrue,则副本集成员会记录初创企业警告。writeConcernMajorityJournalDefault您无法在具有将 设立为false的分片(例如具有使用内存中存储引擎的投票成员的分片)的分片集群上运行事务。提示
members
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不能包含解析为 或本地接口的值,除非设立的所有成员都位于解析为localhostlocalhost的主机上。
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的成员时返回错误。为确保成员不接收任何查询,应隐藏所有未构建索引的实例。
其他从节点无法从 为 false
members[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票。副本集最多可以有50 7个节点,但只能有 个有投票权的节点。如果一个副本集需要超过7
members[n].votes0个成员,请将额外的无投票权成员的 设立为 。非投票(即
votes为0)成员的priority必须为 0。从 MongoDB 5.0 开始,新添加的从节点不计为投票节点,并且在达到
SECONDARY状态之前无法当选。无投票权的成员无法确认带有
"majority"写关注的写入操作。
settings
settings可选。
类型:文档
一份包含应用于整个副本集的配置选项的文档。
settings文档包含以下字段:settings.chainingAllowed可选。
类型:布尔值
默认值:true
在MongoDB5.0.1 及更早版本中,如果
settings.chainingAllowed是:从 MongoDB 5.0.2 开始:
启用覆盖设置后,即使
settings.chainingAllowed为false,副本集的从节点成员也可以从其他从节点成员复制数据。enableOverrideClusterChainingSetting的默认值为false。
提示
settings.getLastErrorDefaults可选。
类型:文档
(从 MongoDB 5.0 开始提供)
重要
从MongoDB5.0 开始,除了默认 之外,您不能使用 默认写关注(write
settings.getLastErrorDefaults{ w: 1, wtimeout: 0 }concern)。相反,请使用 命令为副本集或分片集群设立默认的读关注或写关注(writesetDefaultRWConcernconcern)配置。
settings.getLastErrorModes可选。
类型:文档
用于通过使用 定义自定义写关注(write
members[n].tagsconcern)的文档。自定义写关注(write concern)可以提供数据中心感知。{ getLastErrorModes: { <name of write concern> : { <tag1>: <number>, .... }, ... } } <number>是指满足写关注(write concern)所需的不同标签值的数量。示例,以下settings.getLastErrorModes定义了一个名为 的写关注(writedatacenterconcern),它要求将写入传播到两个dc标签值不同的成员。{ getLastErrorModes: { datacenter: { "dc": 2 } } } 要使用自定义写关注(write concern),请将写关注名称传递给
w选项,示例:{ w: "datacenter" } 有关更多信息和示例,请参阅配置副本集标记集。
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 秒)
某节点在确定其领先于当前主节点后,等待启动追赶接管的时间(以毫秒为单位)。在追赶接管期间,当前主节点之前的节点发起选举以成为副本集的新主节点。
启动接管的节点确定其领先于当前主节点后,会等待指定的毫秒数,然后验证:
它仍然领先于当前主节点,
它是所有可用节点中最新的节点,
当前主节点正在追赶它。
一旦确定所有这些条件都得到满足,启动接管的节点将立即竞选。
有关副本集选举的更多信息,请参阅副本集选举。
注意
将 设置为
catchUpTakeoverDelayMillis-1会禁用追赶接管。将catchUpTimeoutMillis设置为0会禁用主节点 (primary node in the replica set)追赶,因此也会禁用追赶接管。