副本集配置

您可以使用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

Type: string

​ 复制集的名称。

​ _id必须与副本相同,或者在命令行用--replSet命令指定mongod的replSetName值

version

Type: int

​ 用一个递增的数字来区分副本集配置文档的修订与配置的先前迭代。

相对版本4.4中的修改:副本集节点使用term和version在“最新”副本配置上达成共识。当节点比较副本配置文档时,具有较大术语的配置文档被认为是“最新的”。如果term相同或不存在,则较大版本的配置文档视为“最新”。

term

Type: int

4.4新版功能仅在featureCompatibilityVersion (fCV)中可用“4.4”或更高版本。

用一个递增的数字来区分副本集配置文档的修订与配置的先前迭代,配置文档的term与执行重新配置的复制集主的term匹配,初选获胜后,每任期一次,它的任期就会增加。如果在replSetReconfig操作中显式设置,主节点将忽略term字段。

强制重新配置将删除术语字段,不强制发出replSetReconfig时,它将该term设置为自己的term。

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

configsvr

Type: boolean

Default: false

表明复制集是否用于分片集群的配置服务器,如果副本集用于分片集群的配置服务器,则设置为true。

💡TIP

​ 参考:Sharded Cluster Enhancements

protocolVersion

Type: number

Default: 1

从4.0开始,MongoDB只支持protocolVersion: 1,不再支持protocolVersion: 0。

💡提示

​ 参考:Replica Set Protocol Version

writeConcernMajorityJournalDefault

Type: boolean

Default: true

如果写关注点没有显式指定日志选项j,则确定{w: "majority"}写关注点的行为。

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

Value { w: "majority" } Behavior
true MongoDB在大多数投票节点写入磁盘上的日志后承认写入操作。当writeConcernMajorityJournalDefault为true时,复制集的所有投票节点必须运行日志记录。如果复制集的任何投票节点使用内存中存储引擎,则必须设置writeConcernMajorityJournalDefault为false。如果复制集的任何投票节点使用内存存储引擎和writeConcernMajorityJournalDefault为true,多数写操作可能失败。这些操作包括固有地使用“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时,副本集节点记录启动警告。

💡提示

​ 参考:

members

Type: array

节点配置文档数组,副本集的每个节点对应一个。members数组是一个零索引数组。

每个特定于节点的配置文档可以包含以下字段:

members[n]._id

Type: integer

复制集中节点的整数标识符,在所有节点中惟一。从MongoDB 5.0开始,这个值可以是大于或等于0的任何整数值,之前这个值只能为0到255之间的整数。

每个副本集节点必须有唯一的_id。避免重复使用_id值,即使当前配置中没有节点[n]项使用该_id。

一旦设置,就不能更改节点的_id。

NOTE

对象中的副本集成员,使用数组索引创建数组成员。数组索引从0开始。不要将这个索引值与成员[n]的值混淆。成员数组中每个文档中的_id字段。

members[n].host

Type: string

集合节点的主机名和端口号(如果指定的话)。

复制集中的每个主机的主机名必须是可解析的。

⚠️WARNING

[n] .host节点不能保留解析到本地主机或本地接口的值,除非该集合的所有节点都位于解析到本地主机的主机上。

members[n].arbiterOnly

可选.

Type: boolean

Default: false

值为true表示该节点是仲裁节点

当使用rs.addArb()方法添加仲裁节点时,该方法会自动设置members[n].arbiterOnly的值为true。

以下MongoDB版本,对于带仲裁节点的副本集,pv1与pv0 (MongoDB 4.0+不再支持)相比,增加了w:1回滚的可能性:

  • MongoDB 3.4.1
  • MongoDB 3.4.0
  • MongoDB 3.2.11 或者更早版本

See Replica Set Protocol Version.

members[n].buildIndexes

Optional.

Type: boolean

Default: true

一个布尔值,指示mongod 是否在该节点上构建 indexes ,你只能在向复制集添加节点时设置此值,而无法改变

members[n].buildIndexes字段中已添加的节点。要添加节点,请参见rs.add()rs.reconfig()

对于从客户端接收查询的 mongod实例,不要设置为false。

如果以下所有条件都满足,将buildIndexes设置为false可能有用:

  • 您只使用此实例执行使用的备份mongodump
  • 此节点将不会接收任何查询
  • 创建和维护索引会使主机系统负担过重

即使设置为false,二级服务器也会在_id字段上建立索引,以方便复制所需的操作。

⚠️WARNING

如果你设置 members[n].buildIndexes 若为假,也必须设置 members[n].priority 为0。如果members[n].priority

如果不是0,MongoDB在尝试添加节点时将返回错误 members[n].buildIndexes 等于false。

为确保节点不接收查询,应隐藏所有未构建索引的实例。

其他从节点无法从其中的成员进行复制 members[n].buildIndexes 为false。

members[n].hidden

Optional.

Type: boolean

Default: false

当此值为true时,复制集将隐藏该实例,并且在 db.hello()hello.的输出中不包括该节点,这可以防止读操作(即查询)通过次要读优先级到达这个主机。

隐藏节点可以确认由写安全的写操作。对于带有“多数Write Concern的写操作,节点必须是有表决权的节点(即votes 大于0)。

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 (i.e. votes is greater than 0).

💡TIP

参考:

Hidden Replica Set Members

members[n].priority

在3.6版更改:从MongoDB 3.6开始,仲裁器的优先级为0。如果一个仲裁器的优先级为1,MongoDB 3.6将仲裁器的优先级重新配置为0。

Optional.

Type: 0到1000之间的数字为主节点/从节点;0或1为仲裁者。

Default: 主节点/从节点1;0表示仲裁节点。

数字的值表示节点是否成为主节点.的判断条件。

指定节点的数值改变节点成为 主节点的相对资格,(数值越高资格等级越高,反之亦然),members[n].priority数值为0则不能成为 primary

优先级大于0的节点不能拥有0票。

改变副本集中优先级的平衡将触发一个或多个选举。如果一个较低优先级的从节点比一个较高优先级的从节点当选,副本集节点将继续调用选举,直到最高优先级可用节点成为主节点。

priority为0的节点可以确认由写安全发出的写操作。对于带有""majority" Write Concern的写操作,节点必须是有表决权的成节点员(即votes 大于0)。

Members with priority of 0 can acknowledge write operations issued with Write Concern. For write operations issued with "majority" write concern, the member must also be a voting member (i.e. votes is greater than 0).

💡TIP

参考:

Replica Set Elections.

members[n].tags

Optional.

Type: document

Default: none

标记文档包含用于复制集节点的用户定义标记字段和值对。

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

更多信息请参考 Configure Replica Set Tag Sets.

members[n].secondaryDelaySecs

Optional.

Type: integer

Default: 0

这个复制集成员“滞后”于主节点的秒数。

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

延迟的节点可以帮助确认由写安全发出的 Write Concern.

延迟的节点可以帮助确认由写安全发出的写操作。但是,它们返回写确认不早于配置的延迟值。

对于带有 "majority" 写关系的写操作,节点必须是有表决权的节点(即:votes 大于0)。

💡TIP

参考:Delayed Replica Set Members

members[n].votes

Optional.

Type: integer

Default: 1

服务器将在 replica set election中投出的票数。 每个节点拥有的票数要么是 1,要么是 0, arbiters 总是恰好有 1 票。

priority 大于 0 的成员不能有 0 votes

一个副本集最多可以有 50个节点,但只有 7 个有投票权的节点。 如果在一个副本集中需要超过 7 个成员,请设置members[n].votes对于额外的无投票节点为 0。

无投票权(即 votes为 0)的节点的priority必须为 0。从 MongoDB 5.0 开始,新添加的从节点不算作投票节点,并且在达到 SECONDARY 状态之前不能被选举。非投票节点不能确认以“多数”写安全发出的写操作。

💡提示

参考:

settings

settings

Optional.

Type: document

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

settings 文档包含以下字段:

settings.getLastErrorDefaults

Optional.

Type: document

从 MongoDB 5.0 开始不可用。

🏁重点

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

settings.getLastErrorModes

Optional.

Type: document

用于通过使用定义自定义write concern 的文档 members[n].tags. 自定义写安全可以提供data-center awareness.

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

<number>的是满足写入关注点所需的不同标签值的数量。例如,以下 settings.getLastErrorModes定义一个名为的写关安全datacenter,它要求写入传播到两个dc标签值不同的节点。

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

要使用自定义写安全,请将写安全名称传递给wOption,例如

{ w: "datacenter" }

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

settings.heartbeatTimeoutSecs

可选

类型:整数

默认值:10

副本集节点等待彼此成功心跳的秒数。如果一个节点没有及时响应,其他节点会将这个拖欠的节点标记为不可访问。

笔记

为了pv1, settings.electionTimeoutMillis对从节点是否要求选举的影响大于settings.heartbeatTimeoutSecs.

settings.electionTimeoutMillis

可选

类型:整数

默认值:10000(10 秒)

以毫秒为单位的时间限制,用于检测何时无法访问副本集的主节点:

  • 较高的值会导致较慢的故障转移,但会降低对主节点或网络缓慢或不稳定的敏感度。
  • 较低的值会导致更快的故障转移,但会增加对主节点或网络缓慢或不稳定的敏感度。

该设置仅在使用时适用protocolVersion: 1.

NOTE

在4.0.2版更改:如果参数为 true(默认),当主节点从 (或不带 的命令)enableElectionHandoff下台时,已下台的主节点会提名一个符合条件的从节点立即进行选举。否则,副手可以等到直到 召集选举。降级的主节点不会等待切换的效果。有关详细信息,请参阅 rs.stepDown()replSetStepDownforce: truesettings.electionTimeoutMillisenableElectionHandoff

settings.catchUpTimeoutMillis

可选

类型:整数

在3.6版中更改

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

新选出的主节点与可能具有更新的写入的其他副本集节点同步(赶上)的时间限制(以毫秒为单位)。无限或高时间限制可能会减少其他节点在选举后需要回滚的数据量,但可能会增加故障转移时间。

新当选的节点一旦完全赶上其他节点,就会提前结束选举期。. 在选举期间,新选出的主节点不可用于客户端的写入。用于replSetAbortPrimaryCatchUp 中止选举,然后完成向主节点的过渡。

该设置仅在使用时适用 protocolVersion: 1.

笔记

要将 3.6 版本启动的副本集降级到 3.4,请将catchUpTimeoutMillisfrom更改-1为正数。未能将此值更改为正数会导致运行 3.4 版的节点既不重启也不加入副本集。

settings.catchUpTakeoverDelayMillis

可选

类型:整数

默认值:30000(30 秒)

节点在确定它领先于当前 主节点后等待启动 追赶接管的时间(以毫秒为单位) 。在追赶接管期间,当前主节点之前的节点发起选举以成为副本集的新主节点

发起接管的节点确定它领先于当前主节点后,它会等待指定的毫秒数,然后验证以下内容:

  1. 它仍然领先于当的主节点,
  2. 它是所有可用节点中最新的节点,
  3. 目前的主节点目前正在赶上它。

一旦确定所有这些条件都满足,发起接管的节点立即进行选举。

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

笔记

设置catchUpTakeoverDelayMillis-1禁用追赶接管。

环境catchUpTimeoutMillis禁用 主追赶0并因此也禁用追赶接管。

  • settings.heartbeatIntervalMillis

    仅限内部使用。心跳的频率(以毫秒为单位)。

  • settings.replicaSetId

    类型:ObjectIdrs.initiate()与副本集关联并在或 期间自动创建的 ObjectId replSetInitiate。你不能改变 replicaSetId.

    复制参考

副本集协议版本

原文链接: https://docs.mongodb.com/manual/reference/replica-configuration/

译者:陆文龙

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""