如果现有集群需要扩容,但环境不允许必须新建一套集群,或者需要一套对等测试集群进行业务验证,或者备用集群做容灾,此时都需要数据库的迁移,本文对几种能想到的方法进行探讨。
目录导航
背景
本文讨论的是数据全部迁移的情况,对于只有部分表迁移的,不在本文讨论范围。
硬件
新集群一般与老集接近,或者要好一些。
数据量大时,比如几百T,几个P的数据,两套集群之间的网络极有可能成为迁移的瓶颈,要提前注意规避。
业务影响
一次性迁移
- 希望时间越短越好,性能要高
- 表有可能有优先级,比如历史表有可能允许拖后迁移,优先迁移的表已经可以支撑业务正常运行。
非一次性迁移
- 要支持增量同步
- 要运行很多次,操作难度要很低
迁移方案1-备份还原
GBase 8a支持物理层的备份还原gcrman,可以对整个实例做全量和增量备份
参考
GBase 8a表级全量和增量备份还原功能测试gcrcman.py)
空间要求
此方案会将数据以文件的形式备份到指定目录,所以对磁盘空间有要求。
集群结构要求
还原时,要求集群必须与原始集群完全一样,版本,节点数,主备策略,IP等。
操作要求
简单。
迁移方案2-导出导入
通过select into outfile将数据导出到文件里,然后新集群加载入库。
参考
空间要求
导出文件以平文本文件的形式保存,所以对磁盘空间有要求。
集群结构要求
新集群可以是任意架构,只要空间能保存的下即可。IP可以不同。
操作要求
复杂。需要人工编写每个表的导出和导入,且要关注空间可用量,已经并发控制。
迁移方案3-通过GBase同步工具gcluster_rsynctool
将需要同步表写入配置文件,由工具进行自动同步,包括全量和增量。改工具常用于主备集群的同步。
注意,如果目标表存在数据,且数据与原始表完全不同,会被覆盖掉。
参考
GBase 8a跨集群表级同步工具gcluster_rsynctool使用例子
空间要求
同步工具无中间文件落地,无需额外的磁盘空间。
集群结构要求
新集群必须和老集群的主分片数一致,版本一致,且网络必须能直接互通。IP可以不同。
操作要求
简单
迁移方案4-物理文件远程复制
将集群文件全部复制到新集群上,如果IP不同则手工更改IP相关配置,然后启动新集群。
比较难区分主副本,理论上只需要复制主就可以了,但实际操作时复杂度很高,基本是全复制,所以适合少量数据的情况。
参考
空间要求
如果2台集群互通,可以不需要中间磁盘空间。
集群结构要求
新集群必须和老集群完全一样。IP最好一样,否则需要先手工改IP,才能启动集群。
操作要求
复杂
迁移方案5-DBLink 表级insert select
在新集群部署GBase 8a的透明网关,然后通过 insert 本地表 select 远程表@网关 的形式,迁移数据。
由于是逻辑层复制,比其它物理级方案性能预计差2-5倍。不建议超大的表做这个操作,且不支持增量。
空间要求
如果2台集群互通,不需要中间磁盘空间。
集群结构要求
无要求
操作要求
简单。
总结
方案 | 额外空间 | 集群架构 | IP | 操作难度 | 备注 |
---|---|---|---|---|---|
1、备份恢复 | 要求 | 完全相同 | 完全相同 | 简单 | 标准工具,支持增量 |
2、导出导入 | 要求 | 无要求 | 无要求 | 复杂 | 性能好,但需要落地,调度复杂 |
3、同步工具 | 不要求 | 主分片数量相同 | 无要求 | 简单 | 性能好,支持增量,简单易用 |
4、物理文件复制 | 不要求 | 完全相同 | 完全相同 | 复杂 | 不好区分副本,建议少量数据时使用 |
4、DBLink | 不要求 | 无要求 | 无要求 | 中等 | 逻辑层复制性能差 |
另外一次性迁移,结构要求相同的方案,可以考虑先搭建相同结构的集群,待迁移完毕后再扩容。