天天看点

MongoShake全量迁移功能简介功能介绍

简介

从v1.5版本开始,MongoShake新增了全量迁移功能,该功能可以让用户更快地对数据量较大的MongoDB数据库做数据复制。MongoShake不再需要源数据库保留全部的oplog,只要依赖当前的oplog就能做数据同步复制。MongoShake全量迁移功能会在迁移前记录源数据库的oplog位点,然后将源数据库的数据全部复制到目的库,复制原理跟MongoDB源生的节点间数据同步是一样的,它会并发将每个db每个表的数据先全量同步到目的库,最好再从之前记录的oplog位点同步剩余的oplog数据,达到数据的同步。

功能介绍

MongoShake全量迁移支持跨region的数据同步,支持各种MongoDB数据库形态的数据迁移,包括ReplicaSet到ReplicaSet,ReplicaSet到Sharding,Sharding到ReplicaSet,Sharding到Sharding。MongoShake不仅对数据做了同步,而且对索引以及Sharding的分片也做了同步,使得数据库的同步迁移变得很容易。

并行复制

为了减少全量迁移的时间,MongoShake会对多表并发进行迁移。为了减少大表迁移的时间,MongoShake也会对文档进行并发迁移。为了提升文档迁移的效率,MongoShake会对多个文档打个batch,进行批量迁移。在MongoShake迁移配置文件中,有以下参数:

replayer.collection_parallel = 6

replayer.document_parallel = 10

replayer.document_batch_size = 1000

其中replayer.collection_parallel控制迁移的表并发个数,replayer.document_parallel控制每个表中文档的并发个数,replayer.document_batch_size控制每个batch中的文档个数

安全性

为了避免用户错填迁移的实例,在迁移前MongoShake会检查目的实例是否存在待迁移的表,如果存在默认则会报错,退出迁移。用户如果想对已经同步的目的实例重新做全量迁移,又不想手动删除已存在的表,也可以把以下参数设置为true

replayer.collection_drop = false

分片同步

MongoShake对于Sharding到Sharding的迁移,还会同步源Sharding的分片信息,包括sharding key和unique信息,但不会同步background信息,这是因为目的库做前台创建索引时,速度会快些。

同步模式

MongoShake支持三种迁移模式all/document/oplog,可以分别进行全量同步document,增量同步oplog,以及全量+增量迁移all。如果设置的模式是all,它会自动识别全量迁移是否已经执行过,如果执行过,它会跳过全量迁移,直接进行增量迁移。判断的逻辑依据checkpoint表里的位点的数据是否在源库的oplog中存在,如果已存在说明增量迁移所依赖的数据都在源库上,可以继续做增量迁移。

sync_mode = all