南大通用GBase 8a数据库迁移的几种方法探讨

如果现有集群需要扩容,但环境不允许必须新建一套集群,或者需要一套对等测试集群进行业务验证,或者备用集群做容灾,此时都需要数据库的迁移,本文对几种能想到的方法进行探讨。

背景

本文讨论的是数据全部迁移的情况,对于只有部分表迁移的,不在本文讨论范围。

硬件

新集群一般与老集接近,或者要好一些。

数据量大时,比如几百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相关配置,然后启动新集群。

比较难区分主副本,理论上只需要复制主就可以了,但实际操作时复杂度很高,基本是全复制,所以适合少量数据的情况。

参考

GBase 8a 通过物理文件操作实现表备份还原的方法

空间要求

如果2台集群互通,可以不需要中间磁盘空间。

集群结构要求

新集群必须和老集群完全一样。IP最好一样,否则需要先手工改IP,才能启动集群。

操作要求

复杂

迁移方案5-DBLink 表级insert select

在新集群部署GBase 8a的透明网关,然后通过 insert 本地表 select 远程表@网关 的形式,迁移数据。

由于是逻辑层复制,比其它物理级方案性能预计差2-5倍。不建议超大的表做这个操作,且不支持增量。

空间要求

如果2台集群互通,不需要中间磁盘空间。

集群结构要求

无要求

操作要求

简单。

总结

方案额外空间集群架构IP操作难度备注
1、备份恢复要求完全相同完全相同简单标准工具,支持增量
2、导出导入要求无要求无要求复杂性能好,但需要落地,调度复杂
3、同步工具不要求主分片数量相同无要求简单性能好,支持增量,简单易用
4、物理文件复制不要求完全相同完全相同复杂不好区分副本,建议少量数据时使用
4、DBLink不要求无要求无要求中等逻辑层复制性能差

另外一次性迁移,结构要求相同的方案,可以考虑先搭建相同结构的集群,待迁移完毕后再扩容。