10.MongoDB系列之副本集组成

2022-11-19,,,

1. 同步

复制是指多台服务器保持相同的数据副本MongoDB通过保存操作日志(oplog)实现复制功能。

oplog存在于主节点local数据库中的一个固定集合,包含了主节点执行的每一次写操作。

每个节点维护自己的oplog,用来记录它从主节点复制的每个操作,从节点停止运行重启后,会从oplog中的最后一个操作开始同步,openlog中的每个操作都是幂等的,所以目标数据集执行一次与多次都会产生同样的效果。

由于openlog大小固定,因此只能容纳一定数量的操作。在大多数情况下,默认的oplog大小就足够了。但以下的工作负载可能会需更大的oplog。

一次更新多个文档

为了保持幂等性,oplog必须将多文档更新转换为多个单独的操作
删除的数据量与插入的数据量相同

此情况下,磁盘使用量不会增加,但是操作日志可能会非常大,因为删除与插入都要一条条记录操作日志
大量的就地(in-place更新)

如果很大一部分工作负载是不增加文档大小的更新,那么也会有大量操作日志

mongodb中存在两种形式数据同步:初始化同步 与 复制

1.1 初始化同步

初始化同步用于向新成员添加完整的数据集。

当一个副本集启动时,它会检查自身的有效状态,如果有效,则会从副本集的另一个成员中复制完整副本。

首先,MongoDB会将现有数据全部删除,然后克隆除local数据库之外的所有数据库。一但所有的数据库都被克隆,mongod会检查同步源的oplog,将在复制过程中发生的所有变更应用到数据集上。

有个特别注意的问题是初始化同步时间过长。这种情况下, 新成员可能从同步源oplog末尾脱离(毕竟它是固定集合),导致永远无法跟上同步源。除了在不太忙的时候初始化,别无他法。

1.2 复制

从节点会在初始化同步后持续复制数据。它们从同步源复制oplog,并在一个异步进程中应用这些操作。

2. 成员状态

STARTUP

成员第一次启动时的状态,这是MongoDB尝试加载副本集配置

STARTUP2

配置被加载,处于初始化同步状态,通常只需几秒。

RECOVERING

此状态表明成员运行正常,但不能处理读请求

ARBITER

仲裁者独有的状态

DOWN UNKNOW REMOVED

表示系统处于异常状态

欢迎关注公众号算法小生或沈健的技术博客

10.MongoDB系列之副本集组成的相关教程结束。

《10.MongoDB系列之副本集组成.doc》

下载本文的Word格式文档,以方便收藏与打印。