功能解读|快速上手 OceanBase 数据迁移服务
在 OceanBase 功能解读系列的上一期中,我们为大家带来了 ODC 功能解读(戳这里回顾:《OceanBase 开发者中心 ODC 功能解读》),本文将为大家分享数据迁移服务的相关内容。
数据迁移作为数据库生态系统中非常重要的环节,不仅承担着将数据从一个数据库迁移或同步到另外一个数据库的任务,还承担着至关重要的高可用作用,当系统发生故障时随时切换至备用数据库。
OceanBase 社区版 3.1.2 正式发布之前,用户只能通过黑屏的社区工具例如 DataX、Canal、MySQL Dumper/Loader 来完成数据迁移,需要手动进行各种设置和调优,容易出现未知错误且操作不够便利。3.1.2 新版本发布之后,OceanBase 迁移服务(OceanBase Migration Service,以下简称为 OMS)提供 MySQL 与 OceanBase 之间数据全量和增量迁移服务的能力,并提供可视化的集中管控平台,只需简单配置即可实时迁移数据,提供更低风险、更低成本、更高效的数据迁移服务。
特性优势
重要特性
支持 MySQL 与 OceanBase 进行实时数据传输,极大降低业务迁移的门槛和业务改造的难度。
一站式交互支持数据迁移的全生命周期管理。用户可以在管理控制图界面操作完成数据迁移任务的创建、配置和监控,交互简便。
多重数据校验提供多种数据一致性校验方式,更加全面、省时、高效地保证数据质量。同时展示差异数据,提供快速订正的途径。
核心价值
轻松迁移 OceanBase 完整适配 OceanBase 数据库各版本的特性,智能化处理数据库对象的采集和转换,支持源端不停服迁移。
高性能全量数据迁移性能可以达到 100 MB/s,20 万 TPS,数据同步性能可以达到 50000 RPS。
工具功能
OMS 提供数据迁移功能,帮助用户快速、实时地迁移其它数据源的数据至 OceanBase。
OMS 部署服务器需要同时保持源实例和目标实例的网络连通。只需要配置源端和目标库,并选择需要迁移的表(白名单)或无需迁移的表(黑名单),即可启动数据迁移任务。OMS 可以自动完成数据迁移的所有流程,无需对中间任务进行启动、暂停等操作。
用户可以通过数据迁移功能,迁移源端数据库(数据表)中的存量数据至目标端数据库(数据表)中,并保持源库到目标库的实时增量同步。
迁移流程
通常迁移流程如下图所示:
迁移流程通常分为结构迁移、全量迁移、增量迁移、数据校验几个流程。迁移任务是 OMS 数据迁移功能的基本单元。OMS 在创建迁移任务时,可以指定的最大迁移范围是数据库级别,最小迁移范围是表级别。迁移任务的生命周期包括结构迁移、全量数据迁移和增量迁移同步链路的全部流程管理。
OMS 数据迁移支持结构迁移、全量数据迁移、增量数据迁移等迁移类型:
结构迁移负责迁移源库中的表、索引、约束和注释等数据对象至 OceanBase 目标库中。当源端数据库非 OceanBase 时,会根据目标 OceanBase 语法定义标准进行格式转换和拼装,然后复制至 OceanBase 目标库中。
全量数据迁移 OMS 支持迁移源库表中的存量数据至 OceanBase 库对应的表中。OMS 提供在线数据迁移功能,全量数据迁移过程中,如果源库不断有业务写入,在全量数据迁移完成前,OMS 会启动增量拉取模块,拉取源实例中增量更新的数据进行解析和封装后,将其存储在 OMS 中。
增量数据迁移全量迁移任务开始后,在源库发生变化的数据(新增、修改或删除)为增量数据。OMS 支持迁移增量数据至 OceanBase 对应的表中。全量数据迁移完成后,OMS 会启动增量数据回放模块,从增量数据拉取模块获取增量数据。增量数据经过过滤和映射转换后,会同步至目标实例中。在增量数据同步追平后,OMS 会维护源库至目标库的实时数据同步链路。
数据校验
在全量数据迁移完成、增量数据迁移至目标端和源端基本追平后,OMS 会自动发起一轮针对源库配置的数据表和目标端表的全量数据校验任务。
在增量数据同步过程中,用户也可以发起自定义的数据校验,OMS 会提供相应的接口。针对校验出来不一致的数据,OMS 会提供以源端为基准,在目标端进行订正操作的 SQL 脚本。
工具架构
架构概览
OMS 连接的两端分别是待迁移的源业务数据库和目标端数据库。
OMS 系统架构如下图所示:
OMS 内部主要包含:
管理控制台:进行一站式迁移调度。
DBCat:数据对象采集和转换组件。
Dataflow:结构迁移、全量数据迁移和数据校验组件。
增量日志抓取组件和增量数据写入组件。
分层功能化体系
OMS 功能架构:
服务接入层主要包括传输项目的管理、各种类型数据源的管理、OMS 各个组件模块的运维和监控,以及告警设置等。
流程编排层主要负责实现上层表结构迁移、启动全量数据迁移、增量数据迁移、数据校检和数据订正,以及链路切换等任务的执行细节。
组件链路层组件链路层包括以下模块:
①负责结构迁移的核心组件 DBCat 转换引擎,可以根据源端、目标端具体的数据源类型和字符编码类型,进行精确的数据类型映射或转换;
②负责全量数据迁移和校验,并针对不一致的数据生成订正 SQL 脚本的 Checker 组件;
③负责数据库增量日志的读取、解析和存储的 Store 模块;
④负责向目标端数据库并发写入的 JDBCWriter 模块;
⑤负责向目标端消息队列增量写入的 Connector 模块;
⑥负责组件状态监控的 Supervisor 模块。
组件基本原理
OMS 内部主要包含四大组件:结构迁移组件、全量数据流和数据校验组件、日志读取组件、同步写入组件。
第一,结构迁移组件。OMS 结构迁移的核心组件(DBCat)作为 OceanBase 原生的 Schema 转换引擎,可以根据源端、目标端具体的数据源类型和字符编码类型,进行精确的数据类型映射或转换。OMS 的结构迁移组件支持转换、迁移数据库中的表、约束、索引和视图等多种对象。
第二,全量数据流和数据校验组件。全量数据流模块(Dataflow)负责源库存量数据的迁移,以及迁移后的全字段校验。为了扩展灵活性和充分复用组件,Dataflow 自下而上分别是 Reader 模块、Writer 模块、Broker 模块和统一数据模型层:
Reader 模块:负责从源端读取数据,每一种数据库类型都有对应的 Reader 插件。Reader 插件根据统一数据模型层转换读取的记录后,将其放入 Broker 模块中,由其它模块消费。
Writer 模块:从 Broker 模块订阅某张表的记录,根据每个 Writer 插件的类型,将记录按照统一数据模型层转换为适配下游的插入语句后,写入下游。
Broker 模块:用于解耦 Reader、Writer 或其它模块,以提升性能。解藕后,上下游模块可以相互独立,便于维护和扩展。
统一数据模型层:各组件间通过 Broker 要实现解藕,还需要有一层统一数据模型。数据从 Reader 写入 Broker 时需要先按统一数据模型转换,从 Broker 获取数据记录后,也需要由记录的统一数据模型转化为下游适配的对象或语句。
在上述底层模块的基础上,OMS 实现了数据的迁移、校验和订正。
进行迁移数据时,配置源端、目标端、待迁移表和库表映射等信息后,为每张迁移表创建一条 Reader > Broker > Writer 的通道,再由上层迁移程序对每张表的迁移进行调度。可以并发迁移多张表,在 Reader 和 Writer 组件中可以并发执行每张表的迁移。
进行数据校验和订正时,配置源端、目标端、待迁移表和库表映射等信息后,为每张校验的表创建 SrcReader > Broker > DstReader 和 Broker > Verifier 的校验通道。
第三,日志读取组件。不同类型数据库的日志读取模块(Store)的实现方式不同,例如 OceanBase Store 模块的实现方式是依赖于 OceanBase 的 Liboblog 工具。
Liboblog 是 OceanBase 的增量数据同步(Change Data Capture, CDC)工具,通过 RPC 方式拉取 OceanBase 各个分区的 Redo 日志后,结合各个表和列的 Schema 信息,转换 Redo 日志为中间定义的数据格式,最后以事务的方式输出修改的数据。
第四,同步写入组件。同步写入模块(JDBCWriter)是从日志读取模块(Store)拉取增量数据的同时,将其翻译为 INSERT、UPDATE 或 DELETE 等 SQL 语句写入数据至目标端的组件。Store 组件记录的是流式的增量数据,可以通过 Pipeline 保证数据的有序性。Writer 组件单线程顺序执行事务可以满足基本要求,但不能扩展性能,所以 OMS 引入并发写机制。在提升同步性能的同时,还需要保证数据的一致性,所以 OMS 引入冲突矩阵机制实现乱序并发写入,以确保每个事务的最终一致性。为了避免循环复制问题,所有通过 OMS 的 JDBCWriter 模块写入的数据都会在 Store 组件中进行打标处理,以确保不会再次被其它模块消费。
OMS 不仅是 OceanBase 数据迁移服务的重要工具,更是作为集数据迁移、数据同步、集中管控于一体的基础设施,承接用户的业务,满足用户业务的同时,尽可能提高用户业务的可用性,从而为用户提供更好的服务。
未来 OMS 会持续在兼容性、易用性以及更多数据库支持上不断迭代,满足用户的需求,感兴趣的用户可以点击这里,针对工具提出建议和使用反馈。
评论