副本集配置
在本页面
您可以使用rs.conf()方法或replSetGetConfig命令访问replica set的配置。
要修改副本集的配置,请使用rs.reconfig()方法,并将配置文档传递给该方法。有关更多信息,请参见rs.reconfig()。
Warning
避免重新配置包含不同 MongoDB 版本成员的副本集,因为验证规则在 MongoDB 版本之间可能有所不同。
副本集配置文档示例
以下文档提供了副本集配置文档的表示。您的副本集的配置可能仅包括这些设置的一部分:
{
_id: <string>,
version: <int>,
protocolVersion: <number>,
writeConcernMajorityJournalDefault: <boolean>,
configsvr: <boolean>,
members: [
{
_id: <int>,
host: <string>,
arbiterOnly: <boolean>,
buildIndexes: <boolean>,
hidden: <boolean>,
priority: <number>,
tags: <document>,
slaveDelay: <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 的值相同。
See
replSetName或--replSet有关设置副本集名称的信息。
version
- 类型:整数
一个递增的数字,用于将副本集配置对象的修订与配置的先前迭代区分开。
configsvr
- 3.2 版中的新功能。
类型:布尔值
默认:false
指示副本集是否用于分片群集的配置服务器。如果副本集用于分片群集的配置服务器,则设置为true
。
See also
protocolVersion
- 3.2 版中的新功能。
类型:数字
默认:1 为新副本集
副本集选择协议的版本。
从 MongoDB 3.2 开始,默认情况下,新副本集使用protocolVersion: 1
。 MongoDB 的早期版本使用协议的版本 0,并且不能作为指定protocolVersion
1 的副本集配置的成员运行。
更改协议版本之前,请确保至少有一个 oplog 条目(从当前协议版本生成)已从主服务器复制到所有辅助服务器。有关详细信息,请参见修改副本集协议版本。
Note
MongoDB 3.6 弃用了副本集协议版本 0.
See also
writeConcernMajorityJournalDefault
- 3.2.6 版中的新功能。
类型:布尔值
默认:如果protocolVersion
为 1,则为 true;如果protocolVersion
为 0,则为 false
如果写入关注点未明确指定日记选项j,则确定{ w: "majority" }写入关注点的行为。
下表列出了writeConcernMajorityJournalDefault
值和相关的{ w: "majority" }行为:
Value | { w: "majority" } 行为 |
---|---|
true | MongoDB 在大多数有投票权的成员已将其写入磁盘日志后,才确认写入操作。 |
Important
当writeConcernMajorityJournalDefault
为true
时,副本集的所有有投票权的成员必须带有日记记录。
如果副本集的任何有投票权的成员在没有journaling且_是true
的情况下运行,则"majority"写入操作可能会失败。这些包括固有使用"majority"写关注的操作(例如replSetStepDown命令)或默认情况下使用"majority"写关注的各种mongo shell 方法,例如用户 Management 方法和角色 Management 方法。
从版本 3.6.14 开始,如果副本集成员使用内存存储引擎(投票或不投票),但是副本集的writeConcernMajorityJournalDefault设置为 true,则副本集成员将记录启动警告。
|
| false | MongoDB 在大多数有投票权的成员在内存中应用了写操作之后,对该写操作进行了确认。
> [!NOTE|label:Warning]
如果副本集的任何有投票权的成员都没有journaling运行(即运行内存存储引擎或禁用日记功能运行),则必须将writeConcernMajorityJournalDefault设置为false
。
从版本 3.6.14 开始,如果副本集成员使用内存存储引擎(投票或不投票),但是副本集的writeConcernMajorityJournalDefault设置为 true,则副本集成员将记录启动警告。
|
See also
members
members
- 类型:数组
成员配置文档的数组,副本集的每个成员一个。 members数组是零索引数组。
每个特定于成员的配置文档都可以包含以下字段:
members[n].
_id
- 类型:整数
副本集中每个成员的整数标识符。值必须介于 0 和 255 之间(含 0 和 255)。每个副本集成员必须具有唯一的_id。设置后,您将无法更改成员的_id。
Note
更新副本配置对象时,请使用 array index 访问members数组中的副本集成员。数组索引以0
开头。不要将此索引值与members数组中每个文档中members[n]._id字段的值混淆。
members[n].
host
- 类型:字符串
set 成员的主机名和端口号(如果指定)。
对于副本集中的每个主机,主机名名称都必须是可解析的。
Warning
members[n].host不能保存解析为localhost
或本地接口的值,除非集合的* all *成员位于解析为localhost
的主机上。
members[n].
arbiterOnly
- Optional .
类型:布尔值
默认:false
标识仲裁者的布尔值。值true
表示该成员是仲裁者。
使用rs.addArb()方法添加仲裁器时,该方法会自动为添加的成员将members[n].arbiterOnly设置为true
。
对于以下 MongoDB 版本,具有仲裁器的副本集与pv0
相比,pv1
增加了w:1回滚的可能性:
-
MongoDB 3.4.1
-
MongoDB 3.4.0
-
MongoDB 3.2.11 或更早版本
See 副本集协议版本.
members[n].
buildIndexes
- Optional .
类型:布尔值
默认:true
指示mongod是否在此成员上构建indexes的布尔值。仅在将成员添加到副本集中时才能设置此值。将成员添加到集合后,您将无法更改members[n].buildIndexes字段。要添加成员,请参见rs.add()和rs.reconfig()。
对于从 Client 端接收查询的mongod实例,请勿设置为false
。
如果满足以下所有条件,则将buildIndexes
设置为false
可能会很有用:
-
您仅使用此实例使用mongodump,和执行备份
-
该成员将不会收到任何查询,并且
-
索引创建和维护使主机系统负担沉重。
即使设置为false
,辅助文件也将*在_id
字段上构建索引,以简化复制所需的操作。
Warning
如果将members[n].buildIndexes设置为false
,则还必须将members[n].priority设置为0
。如果members[n].priority不是0
,则 MongoDB 在尝试添加members[n].buildIndexes等于false
的成员时将返回错误。
为确保成员不接收任何查询,应将所有未构建索引的实例都隐藏起来。
其他备用副本不能从members[n].buildIndexes为 false 的成员复制。
类型:布尔值
默认:false
当此值为true
时,副本集将隐藏此实例,并且不将成员包含在db.isMaster()或isMaster的输出中。这样可以防止读取操作(即查询)通过辅助read preference到达此主机。
隐藏的成员可以确认Write Concern发出的写操作。对于发出"majority"写问题的写操作,该成员还必须是有投票权的成员(即votes大于0
)。
See also
members[n].
priority
- 在 3.6 版中进行了更改:从 MongoDB 3.6 开始,仲裁者的优先级为
0
。如果仲裁器的优先级为1
,则 MongoDB 3.6 会将仲裁器重新配置为优先级为0
。
- 在 3.6 版中进行了更改:从 MongoDB 3.6 开始,仲裁者的优先级为
Optional .
类型:主要/次要的数字在 0 到 1000 之间;仲裁者为 0 或 1.
默认:主/辅 1.0;仲裁者为 0.
一个数字,指示成员成为primary的相对资格。
指定较高的值使成员更多有资格成为primary,而较低的值使成员更少有资格成为primary。 members[n].priority 0
的成员没有资格成为主要成员。
更改副本集中的优先级平衡将触发一个或多个选择。如果在较高优先级的辅助节点上选举了较低优先级的辅助节点,则副本集成员将 continue 进行选举,直到优先级最高的可用成员成为主要成员为止。
0
中具有priority的成员可以确认Write Concern发出的写操作。对于发出"majority"写问题的写操作,该成员还必须是有投票权的成员(即votes大于0
)。
See also
类型:文件
默认:无
tags
文档包含用户定义的标记字段和副本集成员的值对。
{ "<tag1>": "<string1>", "<tag2>": "<string2>",... }
-
对于读取操作,您可以在read preference中指定一个标签集,以将操作定向到具有指定标签的副本集成员。
-
对于写操作,可以使用settings.getLastErrorModes和settings.getLastErrorDefaults创建自定义write concern。
有关更多信息,请参见配置副本集标记集。
members[n].
slaveDelay
- Optional .
类型:整数
默认:0
此副本集成员应“滞后”的主服务器“后”的秒数。
使用此选项创建delayed members。延迟成员维护数据的副本,以反映过去某个时间的数据状态。
延迟的成员可能有助于确认由Write Concern发出的写操作。但是,它们不早于配置的延迟值返回写确认。对于发出"majority"写关注点的写操作,该成员还必须是有投票权的成员(即votes大于0
)。
See also
members[n].
votes
- Optional .
类型:整数
默认:1
服务器将在副本集选举中投出的票数。每个成员的投票数为1
或0
,而arbiters始终具有正确的1
投票。
副本集最多可包含50 members,但只有 7 个投票成员。如果一个副本集中需要 7 个以上的成员,请将其他无表决权的成员设置为members[n].votes到0
。
在版本 3.2 中更改:非投票成员的priority必须为 0.
在版本 3.0.0 中更改:成员的members[n].votes不能大于1
。有关详细信息,请参见副本集配置验证。
拥有0
票的成员无法确认以majority
的Write Concern发出的写操作。
settings
settings
- Optional .
类型:文件
包含适用于整个副本集的配置选项的文档。
settings文档包含以下字段:
settings.
chainingAllowed
- Optional .
类型:布尔值
默认:true
当settings.chainingAllowed为true
时,副本集允许secondary成员从其他辅助成员进行复制。当settings.chainingAllowed为false
时,第二副本只能从primary复制。
See also
settings.
getLastErrorDefaults
- Optional .
类型:文件
为副本集指定write concern的文档。仅当write operations或getLastError没有指定其他写关注点时,副本集才会使用此写关注点。
如果未设置settings.getLastErrorDefaults,则副本集的默认写关注点仅需要来自主副本的确认。
settings.
getLastErrorModes
- Optional .
类型:文件
用于通过使用members[n].tags定义自定义write concern的文档。定制写关注点可以提供data-center awareness。
{ getLastErrorModes: {
<name of write concern> : { <tag1>: <number>, .... },
...
} }
<number>
表示满足写关注要求所需的不同标签值的数量。例如,以下settings.getLastErrorModes定义了名为datacenter
的写关注点,它要求写操作传播到dc
标记值不同的两个成员。
{ getLastErrorModes: { datacenter: { "dc": 2 } } }
要使用自定义写入关注点,请将写入关注点名称传递给w Option,例如
{ w: "datacenter" }
有关更多信息和示例,请参见配置副本集标记集。
settings.
heartbeatTimeoutSecs
- Optional .
类型:整数
默认:10
副本集成员 await 彼此成功发出心跳的秒数。如果某个成员未及时响应,则其他成员会将违约成员标记为不可访问。
该设置仅在使用protocolVersion: 0
时适用。
Note
MongoDB 3.6 弃用了副本集协议版本 0.
使用protocolVersion: 1
时,相关设置为settings.electionTimeoutMillis。
settings.
electionTimeoutMillis
- 3.2 版中的新功能。
Optional .
类型:整数
默认:10000(10 秒)
检测副本集主数据库何时不可达的时间限制(以毫秒为单位):
-
较高的值会导致较慢的故障转移,但会降低对主节点或网络的速度或斑点的敏感度。
-
较低的值将导致更快的故障转移,但会增加对主节点或网络的速度或斑点的敏感性。
该设置仅在使用protocolVersion: 1
时适用。
Note
在版本 3.6.7 中进行了更改:如果参数enableElectionHandoff为 true(默认值),则当主节点从rs.stepDown()降级(或没有force: true
的replSetStepDown命令)时,降级的主节点将提名合格的辅助节点立即选举。否则,次要人员最多可以 awaitsettings.electionTimeoutMillis才能进行选举。降级的主服务器不 await 切换的效果。有关更多信息,请参见enableElectionHandoff。
settings.
catchUpTimeoutMillis
- 3.4 版的新功能。
Optional .
类型:整数
在 3.6 版中进行了更改:
默认:-1,无限追赶时间。
新选择的主数据库与其他可能具有更近期写入操作的副本集成员同步(追赶)的时间限制(以毫秒为单位)。无限或高时间限制可能会减少选举后其他成员需要回滚的数据量,但可能会增加故障转移时间。
一旦新当选的主要成员完全赶上集合中的其他成员,它就会提前结束赶超阶段。在追赶期间,新选择的主服务器不可用于来自 Client 端的写入。使用replSetAbortPrimaryCatchUp中止追赶,然后完成向主要角色的过渡。
该设置仅在使用protocolVersion: 1
时适用。
Note
要将版本 3.6 中启动的副本集降级为 3.4,请将catchUpTimeoutMillis
从-1
更改为正数。无法将此值更改为正数会导致运行版本 3.4 的节点既不重新启动也不加入副本集。
settings.
catchUpTakeoverDelayMillis
- 3.6 版的新功能。
Optional .
类型:整数
默认:30000(30 秒)
在确定节点赶超当前primary之后,节点 await 启动“追赶接管”的时间(以毫秒为单位)。在接管接管期间,当前主要节点之前的节点会发起election成为replica set的新主要节点。
在启动接管的节点确定它在当前primary之前,它 await 指定的毫秒数,然后验证以下内容:
-
它仍然领先于当前的主要数据库,
-
它是所有可用节点中最新的节点,
-
当前的主数据库正在赶上它。
一旦确定满足所有这些条件,发起接管的节点将立即运行以进行选举。
有关副本集选择的更多信息,请参见副本集选举。
Note
将catchUpTakeoverDelayMillis
设置为-1
将禁用追赶接管。将catchUpTimeoutMillis
设置为0
会禁用“主要追赶” *,因此也会禁止追赶接管。
settings.
heartbeatIntervalMillis
- 3.2 版中的新功能。
仅供内部使用 。
心跳的频率(以毫秒为单位)。
settings.
replicaSetId
- 3.2 版中的新功能。
类型:ObjectId
与副本集关联并在rs.initiate()或replSetInitate
期间自动创建的 ObjectId。您不能更改replicaSetId
。