MongoDB初始化数据同步:
副本集中的成员启动之后,就会检查自身的状态,确定是否可以从某个成员那里进行同步。如果不行的话,尝试从其他成员那里进行完整的数据复制。
这个过程就是初始化同步(initial syncing),这几个步骤可以从mongod日志查看。
1、首先,这个成员会做一些记录前的准备工作:选择一个成员作为同步源,在local.me中为自己创建一个标识符,删除所有已存在的数据库,以一个全新的状态进行复制。
在这个过程中,所有现有的数据都会被删除。应该只在不需要保留现有数据的情况下做初始化同步,因为mongod会首先将现有数据删除。
2、然后是克隆(cloning),就是将同步源的所有记录全部复制到本地。通常是最耗时的。
3、然后就进入oplogt同步的第一步,克隆过程中所有的操作都会记录到oplog中。如果有文档在克隆过程中被移动了,就可能会被遗漏,导致没有被克隆,对于这样的文档可能
需要重新克隆
4、接下来是oplog同步过程的第二步,用于将第一个oplogt同步中的操作记录下来
5、到目前为止,本地的数据应该与主节点的某个时间点的数据完全一致,可以创建索引,如果集合比较大,创建索引也会比较耗时
6、如果当前节点的数据仍远远落后于同步源,那么oplog同步过程的最后一步就是将创建索引期间的所有操作全部记录下来,防止该成员成为备份节点
7、现在,当前成员初始化完成,切换到普通同步状态,这时当前成员就可以成为备份节点
replset initial sync done
replset syncing
replset secondary