1。背景介绍随着GaussDB(foropenGauss)数据库的不断发展,越来越多的客户选择使用GaussDB(foropenGauss),其中很大一部分是用GaussDB(foropenGauss)替换现有系统。目前客户使用的数据库种类繁多,如Oracle、MySQL、PostgreSQL等,那么如何解决将客户现有的数据库迁移到GaussDB(foropenGauss)的问题是一个非常迫切的需求。GaussDB(foropenGauss)自带的GDS数据迁移工具实现了GaussDB(foropenGauss)之间的高效数据迁移,但无法解决异构同步和实时同步的场景。华为云数据库迁移工具DRS作为易用、稳定、高效的云服务,为GaussDB(openGauss)提供异构迁移和实时同步能力,帮助客户轻松迁移数据库至GaussDB(openGauss)。2、数据库迁移整体解决方案数据库迁移的目的是业务迁移,业务能否顺利切换取决于数据库的迁移能力和迁移后的准确性。从业务端来看,至少要满足以下三个正确性才能进行业务切换。对象迁移是指将正确数据库的存储过程、函数、触发器、表结构、索引等所有数据库对象完整迁移到目标库,并能保证对象的运行逻辑与源库一致.数据迁移就是将源数据库的全量数据正确迁移到目标数据库。当业务需要停机窗口时,应考虑全量+增量在线迁移,保证业务不中断。同时需要能够对同步数据进行校验,保证迁移数据的准确性。迁移后,业务运行无误。对象和数据迁移到目标数据库后,业务切换还存在两个风险点。一是业务在目标数据库中的运行结果是否正确,二是目标数据库的性能与源数据库的性能是否一致。库支撑业务的负载。因为异构数据库之间还是存在很大的差异,设计理念和实现方式上存在很多差异,这就会导致两个看起来很相似的对象却有完全不同的运行结果或效率。因此,必须有工具来验证这种差异,保证迁移后业务运行的正确性。为了满足上述业务切换的条件,华为云提供了数据库迁移的整体解决方案,形成了整个迁移过程的闭环。语法迁移(UGO)实现oracle数据库对象迁移到GaussDB(foropenGauss)的能力,可以给出完整的迁移评估报告,哪些对象可以完全兼容迁移,哪些对象需要转换迁移,哪些对象需要商务合作转型。DRS-数据迁移实现了将Oracle、MySQL、PostgreSQL等数据库数据实时迁移到GaussDB(foropenGauss)的能力。DRS-dataverification实现了数据迁移后的一致性校验,具有行级比对、内容级比对和实时增量数据比对能力。DRS-TrafficPlayback实现了抓取Oracle数据库的业务流量,将流量SQL转换,然后在GaussDB(针对openGauss)中回放的能力。3、DRS数据迁移云上DRS提供简单易用的操作界面,采用流程化配置方式,客户可根据提示步骤一步步搭建同步链路。DRS除了支持从Oracle到GaussDB(针对openGauss)的数据迁移,还支持其他数据库之间的数据同步。以下是DRS当前支持的源和目标数据库类型的列表。在数据迁移过程中,DRS通过多种手段和技术降低可能存在的风险,保证迁移过程的稳定性和最终数据的一致性。在线迁移DRS通过全量迁移将客户数据库中的存量数据迁移至GaussDB(针对openGauss),通过增量同步实时解析源数据库日志,将客户的实时变化数据同步至Gauss(针对openGauss)。增量无缝对接,保证客户在不中断业务的情况下,将所有数据完全迁移到GaussDB(foropenGauss)。预验证在DRS迁移任务启动前,为了检测迁移启动后可能存在的风险或错误,DRS引入了预验证环节,可以提前验证配置信息、数据库兼容性信息、连接信息等。同时,对一些可以迁移成功但可能影响业务的情况进行提醒,以便客户及时发现并提前处理。断点机制为了保证数据迁移的一致性,DRS在各个组件中都有断点机制,无论是正常启停、异常重启还是failover场景,都可以保证数据同步的准确性。将导致数据丢失。4.DRS技术实现原理DRS在技术实现上主要分为两大模块,一是全量数据同步,二是增量数据同步。全量同步解决静态数据的迁移,增量同步解决实时变化数据的迁移。全量同步的技术架构全量同步的整体逻辑比较简单,就是通过select从源库中查询数据,然后将数据写入到目标库中,但是在具体的代码实现中有一些关键的技术点.一般数据分片的全量同步产品的同步粒度可以达到表级并发,即多个线程可以同时同步多个表。一张表包含数十亿甚至数百亿条数据。这时候这张表的同步时间就变成了全同步的时间。那么如何进一步提高单表的同步效率呢?我们可以将单表进一步拆分,根据主键拆分成多个分片,以分片为单位进行多线程并行同步。目前的DRS按照以下策略对表进行分片:没有主键的表不分片分区表按分区同步,每个分区不再分片为了减少全量同步过程中的磁盘占用,导出的数据DRS不缓存在磁盘中,而是通过内存直接传递给导入线程。当导出和导入速率相等时,可以最大化完全同步的效率。中间断点控制全同步中断是一个很棘手的问题。可能2亿条数据的表,同步到1.8亿条的时候,因为网络或者源库快照太旧同步失败。如果没有良好的断点控制机制,之前的努力可能就白费了,需要重新同步一遍。DRS使用分片作为断点来保存记录。对于上面的例子,即使同步中断了,也可以重新拉起。拉起后,同步成功的分片将不再同步,还未同步。分片将继续同步。交管客户的业务往往有高峰和低峰期。在高峰期,数据库的资源使用率最高。尽量避免在业务高峰期做全量同步,因为全量同步对源数据库的cpu、Memory和网络资源占用影响很大。DRS使用流量控制机制来减少业务高峰期对源库的资源占用,主要是通过控制网络流量。客户可以设置流量控制的时间段。DRS会在全同步过程中实时计算同步。流量的大小。运行到这个时间段后,当流量超过设定的阈值时,数据采集的速度就会变慢。运行这段时间后,恢复全量数据同步速度。全量+增量无缝连接在业务切库场景下,数据迁移过程一般有两种选择。一种是一次性将数据从源数据库迁移到目标数据库,但是需要业务关闭窗口。这个窗口的大小取决于全量数据迁移的时间。当数据量很大时,整个迁移过程可能需要几天时间,这种业务宕机是不可接受的。所以另一种解决方案是业务不中断的数据迁移方案。它的实现原理是基于全量迁移和增量同步的无缝衔接。对于Oracle->GaussDB(针对openGauss)的迁移,Oracle数据库提供了指定scn进行快照导出的功能,基于该特性,DRS进行全量同步时,指定scn进行导出,从而使整个的数据全量同步是这个scn点之前的快照数据,然后增量同步就是以这个scn点作为同步的分界点,只有大于这个scn的增量事务才会同步到目标库。这样就实现了全额和增量的无缝对接。同步过程不需要业务停机。当全量数据同步完成,增量同步赶上当前时间点后,可以进行业务切换,业务中断窗口可以控制在秒级。.增量同步技术架构DRS的增量同步架构主要分为数据抓取、文件存储、数据回放三个部分。数据抓取数据抓取通过对源数据库日志的分析,实时获取源数据库的变更数据。内部主要包括日志拉取、日志解析、事务集成、数据存储。日志提取DRS使用Oracle的Logminer接口获取实时重做日志。当重做文件被归档时,DRS将读取归档的日志文件。为了防止源库的归档日志被无限删除,DRS会启动一个日志抓取线程(可以多个线程并发)将日志拉到本地,然后进行后续分析。日志分析OracleLogminer接口获取到的数据需要进一步分析才能得到实际的变化内容。DRS的日志分析线程对返回的数据进行过滤、拼接、元数据映射、转换等操作,形成一个完整的变更记录对象。事务集成日志解析按照源数据库变化数据的顺序进行。解析后的每条记录的事务交错混合在一起。每条记录都必须按照交易id进行整合,才能形成一个完整的交易。另一方面,对于OracleRAC场景,也需要对不同节点的事务进行排序,避免乱序事务。事务整合后,放在磁盘上的文件按照源库业务提交的先后顺序形成一个序列,DRS会按照这个顺序将数据写入磁盘文件。放在磁盘上的数据包含了源数据库中每条变化数据的所有信息,包括表信息、列信息、事务信息、数据信息和其他附加信息(如时间戳、rowid等)。每一条变化的数据都被恢复到对象的SQL中。数据回放数据回放是在目标数据库中执行捕获数据的过程,但它与数据捕获是解耦的。它读取DRS存储文件,解析出每条变化的数据,根据文件中记录的元数据信息重构相应的SQL语句,并在目标数据库中执行。在数据回放前,DRS提供了过滤和转换功能,可以对同步的数据进行过滤,过滤条件可以配置,比如只同步id<10000的数据,或者同步数据的表名、schema名或列名用于映射等。异常处理和回放性能是两个重要的考虑因素。DRS通过配置数据冲突策略处理播放中的异常数据,通过并发机制提高加载性能。冲突策略所谓冲突是指在数据回放过程中出现数据错误(如主键冲突、update和delete找不到记录等),而这些错误都是由于双方数据不一致造成的。DRS对这类错误采用覆盖、忽略和等待三种处理策略。覆盖:当发生冲突时,用捕获的数据覆盖目标数据库中的数据。忽略:发生数据冲突后,直接跳过错误记录继续执行。等待:数据冲突后,等待人工处理。DRS的并发机制采用记录级别的并发,最大限度地提高了数据加载的性能。首先从DRS存储文件中读取增量数据,并按顺序放入队列中。并行分析引擎会从队列中获取每条数据,根据其主键信息判断是否存在数据冲突。对于没有冲突的数据,说明可以并行执行,将数据分布到多个线程队列中。当线程队列中的数据量达到设定的阈值时,这批数据将作为一个事务在目标数据库中执行。对于有冲突的数据,将此数据放入冲突队列,等待线程执行完上一批数据,然后再次进入并行分析引擎判断是否有冲突。ps:本内容根据《GaussDB(for openGauss)数据迁移之DRS》科技直播完成
