您可以使用 rs.conf() 方法或 replSetGetConfig 命令访问 副本集的配置。
To modify the configuration for a replica set, use the rs.reconfig() method, passing a configuration document to the method.
警告
避免重新配置包含不同 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" 或更高版本。
一个递增的数字,区分副本集配置文档的修订版本和配置的先前迭代。配置文档的
term与执行重新配置的副本集主节点的任期相同。每次赢得选举后,主节点都会递增其任期。如果在replSetReconfig操作中进行显式设置,主节点将忽略term字段。发出强制重配置会删除
term字段。当主节点下一次发出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"写关注(write concern)的操作(例如replSetStepDown命令)或默认下使用 写关注(writemongosh"majority"concern)的各种 方法,例如用户管理方法和角色管理方法。从版本 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数组是零索引数组。每份节点专用配置文档可包含以下字段:
members[n]._id类型:整型
副本集中节点的整数标识符,在所有节点中具有唯一性。
从 MongoDB 5.0 开始,该值可以是大于或等于
0的任何整数值。以前,该值仅限于0和255(含)之间的整数。每个副本集节点必须有一个唯一的
_id。即使 当前配置中没有members[n]条目使用这个_id,也请避免重复使用_id值。一旦设置,就不能更改成员的
_id。注意
更新副本配置对象时,使用数组索引访问
members数组中的副本集成员。数组索引从0开始。请勿将此索引值与members数组中每个文档的members[n]._id字段的值混淆。
members[n].host类型:字符串
主主机名以及副本集节点的端口号(如果端口号经过设置)。
The host name must be resolvable for every host in the replica set.
警告
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执行备份,并且此成员将不会收到任何查询,且
索引创建和维护使主机系统负担过重。
Even if set to
false, secondaries will build indexes on the_idfield to facilitate operations required for replication.警告
如果您将
members[n].buildIndexes设置为false,则还必须将members[n].priority设置为0。如果members[n].priority不是0,MongoDB 将在尝试添加members[n].buildIndexes等于false的成员时返回错误。为确保成员不接收任何查询,应隐藏所有未构建索引的实例。
其他从节点无法从
members[n].buildIndexes为 false 的节点中复制。
members[n].hidden可选。
类型:布尔值
默认:false
When this value is
true, the replica set hides this instance and does not include the member in the output ofdb.hello()orhello. This prevents read operations (that is, queries) from ever reaching this host by way of secondary read preference.Hidden members can acknowledge write operations issued with Write Concern. For write operations issued with
"majority"write concern, the member must also be a voting member (that is,votesis greater than0).提示
members[n].priority可选。
Type: Number between 0 and 1000 for primary/secondary members, or 0 or 1 for arbiters.
Default: 1.0 for primary/secondary members, or 0 for arbiters.
一个数字,表示副本集节点成为主节点的相对可能性。
要提高某个成员成为从节点的可能性,请为该成员指定较高的
priority值。要降低某个节点成为主节点的可能性,请为该节点指定一个较低的
priority值。
更改节点的优先级会触发一次或多次选举。选举算法尽最大努力将优先级最高的节点选为主节点。然而,即使有较高优先级的从节点可用,较低优先级的节点也可能成为主节点。
如果优先级较低的节点成为节点,服务器将继续定期进行选举,直到优先级最高的副本集节点成为主节点。选举频率取决于当选节点和最高优先级节点之间的优先级差异。
优先级为
0的成员无法成为主节点。非投票节点(
votes设置为0的节点)的优先级必须为0。
members[n].tags可选。
类型:文档
默认:无
一份
tags文档包含用户定义的副本集节点标签字段和值对。{ "<tag1>": "<string1>", "<tag2>": "<string2>",... } 对于读取操作,您可以在读取偏好中指定标签集,以将操作定向到具有指定标签的副本集节点员。
对于写入操作,您可以使用
settings.getLastErrorModes和settings.getLastErrorDefaults. 创建自定义写关注。
有关更多信息,请参阅配置副本集标签集。
members[n].secondaryDelaySecs可选。
类型:整型
默认值:0
该副本集节点应“滞后”于主节点的秒数。
使用此选项创建延迟节点。延迟节点维护反映过去某个时间点数据状态的数据副本。
Delayed members can contribute to acknowledging write operations issued with Write Concern. However, they return write acknowledgment no earlier than the configured delay value. For write operations issued with
"majority"write concern, the member must also be a voting member (that is,votesis greater than0).提示
members[n].votes可选。
类型:整型
默认值:1
服务器在副本集选举中将投的票数。每个节点拥有的票数为
1或0,仲裁节点始终恰好拥有1票。priority大于 0 的成员不能有 0 个votes。副本集最多可以有 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 及更早版本中,如果
settings.chainingAllowed为:从 MongoDB 5.0.2 开始:
启用覆盖后,即使 为
settings.chainingAllowed,副本集从节点(secondary node from replica set)成员也可以从其他从从节点(secondary node from replicafalseset)成员复制数据。要覆盖
settings.chainingAllowed并允许从从节点进行复制,请将enableOverrideClusterChainingSetting服务器参数设置为true。enableOverrideClusterChainingSetting的默认值为false。
提示
settings.getLastErrorDefaults可选。
类型:文档
(从 MongoDB 5.0 开始提供)
重要
从 MongoDB 5.0 开始,除了默认值
{ w: 1, wtimeout: 0 }之外,不能使用settings.getLastErrorDefaults来指定默认写关注。请改用setDefaultRWConcern命令为副本集或分片集群设置默认的读关注或写关注配置。
settings.getLastErrorModes可选。
类型:文档
通过使用
members[n].tags来定义自定义写关注文档。自定义写关注可以提供数据中心感知。{ getLastErrorModes: { <name of write concern> : { <tag1>: <number>, .... }, ... } } <number>是指满足写关注所需的不同标签值的数量。例如,以下settings.getLastErrorModes定义了一个名为datacenter的写关注,它要求写入操作传播到两个dc标签值不同的成员。{ getLastErrorModes: { datacenter: { "dc": 2 } } } To use the custom write concern, pass in the write concern name to the
wOption, for example:{ w: "datacenter" } 有关更多信息和示例,请参阅配置副本集标记集。
settings.electionTimeoutMillis可选。
类型:int
默认值:10000(10 秒)
检测副本集的主节点无法访问的时间限制(以毫秒为单位)。此设置控制使用
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会禁用主节点追赶,因此也会禁用追赶接管。
settings.replicaSetId类型:对象标识符
与该副本集相关联并在
rs.initiate()或replSetInitiate期间自动创建的 ObjectId。您无法更改replicaSetId。