本节介绍了产品架构和功能原理的相关内容。 DRS的产品架构以及功能原理如下图所示: 图 DRS产品架构 架构说明 最小权限设计 a. 采用JDBC连接,无需在用户的源数据库、目标数据库节点部署程序。 b. 任务独立虚拟机运行独享资源,租户之间数据隔离。 c. 采用最小IP资源,在源数据库、目标数据库仅开放DRS数据迁移实例节点IP访问权限,无需增加网段。 可靠性设计 a. 连接异常自动重试:当网络闪断、数据库倒换等场景造成DRS和数据库连接异常,会自动重试直到任务恢复。 b. 具备断点续传能力:源数据库或目标数据库连接出现异常时,自动记录当前回放位点,等故障修复后,自动从上一次位点接续回放,保证同步数据的一致性。 c. DRS迁移实例所在虚拟机故障,业务自动切换到新虚拟机并保证IP不变,保证迁移任务正常。 实时迁移基本原理 图 实时迁移原理 以“全量+增量”迁移为例,完整的迁移分为四个阶段。 a. 第一阶段:结构迁移。DRS服务会从源数据库查询到用户选择迁移的库、表、主键等对象,然后在目标数据库创建这些对象。 b. 第二阶段:全量数据迁移。DRS服务会通过并行技术,以最高效的资源利用,从源数据库查询到当前所有数据,并在目标数据库进行插入。在全量数据迁移启动前,会提前进行增量数据抽取保存,以便在第三阶段增量数据迁移时,能够和全量数据接续,保证数据的完整性和一致性。 c. 第三阶段:增量数据迁移。全量任务结束后,增量迁移任务启动,此时会从全量开始的增量数据持续的解析转换和回放,直到追平当前的增量数据。 d. 第四阶段:为了防止触发器、事件在迁移阶段对于数据的操作,在结束任务阶段再迁移触发器、事件。 全量数据迁移的底层模块主要原理: 分片模块:通过优化的分片算法,计算每个表的分片逻辑 抽取模块:根据计算的分片信息并行多任务从源数据库查询数据 回放模块:将抽取模块查询的数据并行多任务插入目标数据库 增量数据迁移的底层实现模块主要原理: 日志读取模块:日志读取模块从源数据库读取原始增量日志数据(例如MySQL为binlog),经过解析转换为标准的日志格式存储在本地。 日志回放模块:日志回放模块根据日志读取模块转换的标准格式增量日志,根据用户的选择策略进行加工过滤,将增量数据同步到目标数据库。