副本集成员介绍

primary(主节点)

接受所有的写操作,然后将写操作记录在 oplog 中。从节点复制此 oplog,并将 oplog 中的操作应用于自身。

secondary(从节点)

主要从主数据库复制,以维护相同的数据集。可以将从节点配置为如下:

  • priority 0(优先级为0):维护主数据库的数据集的副本,不会成为主节点。可以接受读取操作,并且在选举中参与投票。
  • hidden(隐藏):维护主数据库的数据集的副本,但对客户端应用程序不可见。优先级为 0,因此不会成为主节点,但是在选举中参与投票。
  • delayed(延迟):维护主数据库的数据集的副本,但不是最新的数据集。优先级为
    0,并且应该是隐藏的。在选举中参与投票。例如:如果当前时间是09:52,并且成员有一个小时的延迟,则延迟的成员没有比08:52更新的操作。

arbiter(仲裁节点)

仲裁者没有数据集的副本,也不能成为主节点。只在初选的选举中参与投票。

·

副本集中 write 策略

官方参考文档:https://docs.mongodb.com/v3.2/reference/write-concern/

格式:

{ w: <value>, j: <boolean>, wtimeout: <number> }

w 确认写入操作已传播 mongod 实例数量,或具有指定标签的 mongod 实例。它的值可以是以下几种:

  • <number>:确认写入操作已传播到指定数量的 mongod 实例。默认为 1 个;0 表示不用确认,然是有可能会报错。
  • majority:确认写入操作已传播到拥有投票权的大多数成员。
  • <tag set>:确认写操作已传播到具有指定标签的副本集成员。

j 确认已将写操作写入日志。true 表示需要确认。

wtimeout 指定超时时间,以防止写操作无限期阻塞。仅适用于 w 大于 1。

·
示例:修改默认 write 策略

cfg = rs.conf()
cfg.settings.getLastErrorDefaults = { w: "majority", wtimeout: 5000 }
rs.reconfig(cfg)

副本集中 read 策略

官方参考文档:https://docs.mongodb.com/v3.2/core/read-preference/

读取首选项描述了 MongoDB 客户端如何将读取操作路由到副本集的成员。

primary 默认模式。所有操作均从副本集中的主节点读取。

primaryPreferred 在大多数情况下,操作从主服务器读取,但如果不可用,则从辅助成员读取操作。

secondary 所有操作均从副本集的辅助成员读取。

secondaryPreferred 在大多数情况下,操作会从辅助成员读取,但如果没有辅助成员可用,则操作将从主要成员读取。

nearest 以最少的网络延迟从副本集的成员读取的操作,与成员的类型无关。

注意: 通常,请勿使用 secondary 和 secondaryPreferred。