oplog 中的每个操作都是幂等的。也就是说,无论对目标数据集应用一次还是多次,oplog 操作都会产生相同的结果。
Oplog大小
当您第一次启动副本集成员时,如果您未指定 oplog 大小,MongoDB 将创建默认大小的 oplog。默认 oplog 大小取决于存储引擎:
存储引擎 | 默认 Oplog 大小 |
---|---|
WiredTiger 存储引擎 | 5% 的可用磁盘空间 |
内存存储引擎 | 5% 的物理内存 |
oplog要点
oplog大小
oplog保留期限
oplog时间戳:主副断开,时间戳内可继续同步
Oplog状态:要查看 oplog 状态(包括操作的大小和时间范围),请发出该rs.printReplicationInfo()
方法。
副本集数据同步
MongoDB 使用两种形式的数据同步:初始同步,用完整数据集填充新成员;复制,将正在进行的更改应用于整个数据集。
您可以使用参数指定首选的初始同步源 initialSyncSourceReadPreference
。此参数只能在启动时指定mongod
。
初始同步完成时,成员将从 过渡 STARTUP2
到SECONDARY
。
容错
如果执行初始同步的辅助服务器在同步过程中遇到非瞬态 (即持久性)网络错误,则辅助服务器将从头重新启动初始同步过程。如果由于瞬态(即临时)网络错误、集合丢失或集合重命名而中断,则执行初始同步的辅助服务器可以尝试恢复同步过程。
副本集高可用性
副本集使用选举来支持 高可用性。
- 副本集选举
- 当主节点不可用时就会发生选举,并且副本集成员会自主选择新的主节点。
- 副本集故障转移期间的回滚
- 当成员在故障转移后重新加入复制副本集时,回滚将恢复对以前主成员的写入操作。
- 当成员在故障转移后重新加入其副本集时,回滚会还原前主节点上的写入操作。仅当主节点接受了在主节点关闭之前辅助节点未成功复制的写入操作时,才需要回滚 。当主节点作为辅助节点重新加入副本集时,它会还原或“回滚”其写入操作以保持与其他成员的数据库一致性。
当副本集拥有稳定的主节点后,选举算法将“尽最大努力”让具有最高 priority
可用优先级的辅助节点发起选举。成员优先级会影响选举的时间和结果;具有较高优先级的辅助节点比具有较低优先级的辅助节点相对较早地发起选举,并且获胜的可能性也更大。但是,即使有更高优先级的辅助节点可用,较低优先级的实例也可能会在短时间内被选为主节点。副本集成员将继续发起选举,直到可用的最高优先级成员成为主节点。
优先级为 的成员0
无法成为主成员,也不会参与选举。
写入副本集关注
副本集的写入关注度描述了在操作成功返回之前必须确认写入操作的数据承载成员(即主节点和次节点,但不是仲裁节点)的数量。成员只有在成功接收并应用写入后才能确认写入操作。
对于副本集:
-
写入关注
w: "majority"
需要确认写入操作已持久提交给 计算得出的大多数数据承载投票成员。对于大多数副本集配置,w: "majority"
是默认的写入关注。 -
写入关注
w: 1
只需要主副本集成员的确认,然后返回写入关注确认。 -
数值大于的写入关注
1
需要主节点和尽可能多的辅助节点确认才能达到指定值。辅助节点无需是投票成员即可达到写入关注阈值。指定的写入关注值不能大于副本集中承载数据的成员总数。
验证对副本集的写入操作
以下操作包括writeConcern
方法选项insertOne()
。操作指定:-"majority"
写入关注,以及 - 5 秒超时。
写入wtimeout
关注参数确保操作不会无限期阻塞。
db.products.insertOne( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: "majority" , wtimeout: 5000 } } )
标签:副本,成员,写入,oplog,同步,要点,节点 From: https://www.cnblogs.com/wonchaofan/p/18288161