-
Notifications
You must be signed in to change notification settings - Fork 444
全量迁移功能
从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的分片也做了同步,使得数据库的同步迁移变得很容易。
- 对于Sharding到Sharding的迁移,在迁移前,一定要先关闭源库的balancer,否则很可能因为moveChunk而导致迁移报错退出
- 对于Sharding到Sharding的迁移,配置项mongo_urls要填源库的db节点的连接串列表,context.storage.url要填config server节点的连接串,例如mongo_urls=mongodb://account1:password1@ip1:port1/admin;mongodb://account2:password2@ip2:port2/admin;
为了减少全量迁移的时间,MongoShake会对多表并发进行迁移。为了减少大表迁移的时间,MongoShake也会对文档进行并发迁移。为了提升文档迁移的效率,MongoShake会对多个文档打个batch,进行批量迁移。在MongoShake迁移配置文件中,有以下参数:
- replayer.collection_parallel = 6
- replayer.document_parallel = 10
- replayer.document_batch_size = 100
其中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参数可以设置迁移模式。