Skip to content

部分实践场景介绍

Vinllen Chen edited this page Apr 3, 2020 · 1 revision

从版本2.2开始,MongoShake可以支持副本集->副本集,副本集->集群,集群->副本集,集群->集群,且源实例和目的实例可以是同一个实例

1. 功能列表

下面的功能可以按照用户需求组合使用

1.1 源端为副本集实例

  • 配置源端副本集,参数mongo_urls
  • 配置目的端副本集(也可以是tcp/rpc/kafka/file通道),参数tunnel.address

常用功能

  • 支持全量+增量迁移,全量迁移包含索引迁移,参数sync_mode=all
  • 支持增量ddl迁移,参数replayer.dml_only=false
  • 支持白名单、黑名单,参数filter.namespace.white和filter.namespace.black
  • 支持自动删除目的库同名表,参数replayer.collection_drop=true
  • 支持目的表索引跟源表不同,参数replayer.collection_drop=false,在目的库先将目的表的新索引创建好再同步(迁移前如果目的表存在,则不再同步该表的索引)
  • 支持全量迁移流量控制,参数replayer.collection_parallel,replayer.document_parallel和replayer.document_batch_size
  • 支持自定义checkpoint的写入地址,参数context.storage.url,context.storage.db和context.storage.collection

特殊功能

  • 支持对阿里云副本集实例做迁移或同步
  • 支持目的表更名,参数transform.namespace
  • 支持dbref的表更名,性能影响较大,参数dbref=true
  • 支持admin库同步,默认不同步,参数filter.pass.special.db=admin
  • 提升增量同步的容错率,参数replayer.executor.upsert=true和replayer.executor.insert_on_dup_update=true
  • 支持目的端为tcp/rpc/kafka/file通道,参数tunnel设置成对应的模式,tunnel.address设置对应模式的对应地址,例如rcp/tcp设为ip:port,file设为文件路径,kafka设为topic@brokers1,brokers2

1.2 源端为集群实例实例

  • 配置源端shard节点列表,参数mongo_urls
  • 配置源端config节点,参数mongo_cs_url
  • 配置目的端mongos节点(也可以是tcp/rpc/kafka/file通道),参数tunnel.address

常用功能

  • 支持所有副本集实例的常用功能
  • 支持过滤源端的orphan文档(move chunk失败造成的遗留文档),参数filter.orphan_document=true
  • 支持增量同步期间源库开启balancer,参数movechunk.enable=true(但在全量同步期间源端balancer仍需要关闭)

特殊功能

  • 支持所有副本集实例的特殊功能
  • 支持对阿里云集群实例做迁移或同步且需要过滤源端的orphan文档(不需要过滤orphan可以不做额外配置),在参数mongo_urls中需要额外添加每个节点的副本集名字,后面增加?replicaSet=xxx(因为阿里云上的只读账户目前没有权限获取副本集信息)

2. 大数据量迁移场景

  • 将mongoshake部署在源端同机房或者同地域,尤其对源端和目的端距离较远的场景,否则迁移速度会慢很多
  • 选择合适的并发参数,达到满负载迁移,适当放大参数replayer.collection_parallel和replayer.document_batch_size,最优情况是压满目的端的iops

3. 较复杂用户场景

3.1 源端为集群实例实例

  1. 对阿里云集群实例做迁移或同步,且需要过滤源端的orphan文档,操作步骤如下: 1)在阿里云控制台上给每个shard和cs节点申请连接地址和只读账号 2)在mongo_urls上填写shard的连接地址和副本集名字,shard副本集名字通过查config.shards表获取 3)配置filter.orphan_document=true,开启同步即可

  2. 想更改集群实例某个表的shard key,能接受该表名(不能接受只能迁移到新实例上),操作步骤如下: 1)先创建一张新表,并把所需的shard key和索引创建好 2)注意配置参数filter.namespace.white和transform.namespace,并开启全量+增量同步 3)在业务低峰期停服,更改应用访问的表名后开启服务,观察目的库没有新数据写入后停掉mongoshake

Clone this wiki locally