-
Notifications
You must be signed in to change notification settings - Fork 444
部分实践场景介绍
Vinllen Chen edited this page Apr 3, 2020
·
1 revision
从版本2.2开始,MongoShake可以支持副本集->副本集,副本集->集群,集群->副本集,集群->集群,且源实例和目的实例可以是同一个实例
下面的功能可以按照用户需求组合使用
- 配置源端副本集,参数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
- 配置源端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(因为阿里云上的只读账户目前没有权限获取副本集信息)
- 将mongoshake部署在源端同机房或者同地域,尤其对源端和目的端距离较远的场景,否则迁移速度会慢很多
- 选择合适的并发参数,达到满负载迁移,适当放大参数replayer.collection_parallel和replayer.document_batch_size,最优情况是压满目的端的iops
-
对阿里云集群实例做迁移或同步,且需要过滤源端的orphan文档,操作步骤如下: 1)在阿里云控制台上给每个shard和cs节点申请连接地址和只读账号 2)在mongo_urls上填写shard的连接地址和副本集名字,shard副本集名字通过查config.shards表获取 3)配置filter.orphan_document=true,开启同步即可
-
想更改集群实例某个表的shard key,能接受该表名(不能接受只能迁移到新实例上),操作步骤如下: 1)先创建一张新表,并把所需的shard key和索引创建好 2)注意配置参数filter.namespace.white和transform.namespace,并开启全量+增量同步 3)在业务低峰期停服,更改应用访问的表名后开启服务,观察目的库没有新数据写入后停掉mongoshake