副本集成员介绍
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。