功能解读快速上手OceanBase数据迁

北京中科白颠疯曝光 http://health.yealer.com/bdf/2017/2017-03-17/m/10184.html

在上一期的OceanBase功能解读系列文章中,我们为大家带来了ODC功能解读(戳这里回顾:《OceanBase开发者中心ODC功能解读》),本文将为大家分享数据迁移服务的相关内容。

数据迁移作为数据库生态系统中非常重要的环节,不仅承担着将数据从一个数据库迁移或同步到另外一个数据库的任务,还承担着至关重要的高可用作用,当系统发生故障时随时切换至备用数据库。

OceanBase社区版3.1.2正式发布之前,用户只能通过黑屏的社区工具例如DataX、Canal、MySQLDumper/Loader来完成数据迁移,需要手动进行各种设置和调优,容易出现未知错误且操作不够便利。3.1.2新版本发布之后,OceanBase迁移服务(OceanBaseMigrationService,以下简称为OMS)提供MySQL与OceanBase之间数据全量和增量迁移服务的能力,并提供可视化的集中管控平台,只需简单配置即可实时迁移数据,提供更低风险、更低成本、更高效的数据迁移服务。

特性优势

重要特性

支持MySQL与OceanBase进行实时数据传输,极大降低业务迁移的门槛和业务改造的难度。

一站式交互支持数据迁移的全生命周期管理。用户可以在管理控制图界面操作完成数据迁移任务的创建、配置和监控,交互简便。

多重数据校验提供多种数据一致性校验方式,更加全面、省时、高效地保证数据质量。同时展示差异数据,提供快速订正的途径。

核心价值

轻松迁移OceanBase完整适配OceanBase数据库各版本的特性,智能化处理数据库对象的采集和转换,支持源端不停服迁移。

高性能全量数据迁移性能可以达到MB/s,20万TPS,数据同步性能可以达到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实现了数据的迁移、校验和订正。

进行迁移数据时,配置源端、目标端、待迁移表和库表映射等信息后,为每张迁移表创建一条ReaderBrokerWriter的通道,再由上层迁移程序对每张表的迁移进行调度。可以并发迁移多张表,在Reader和Writer组件中可以并发执行每张表的迁移。

进行数据校验和订正时,配置源端、目标端、待迁移表和库表映射等信息后,为每张校验的表创建SrcReaderBrokerDstReader和BrokerVerifier的校验通道。

第三,日志读取组件。不同类型数据库的日志读取模块(Store)的实现方式不同,例如OceanBaseStore模块的实现方式是依赖于OceanBase的Liboblog工具。

Liboblog是OceanBase的增量数据同步(ChangeDataCapture,CDC)工具,通过RPC方式拉取OceanBase各个分区的Redo日志后,结合各个表和列的Schema信息,转换Redo日志为中间定义的数据格式,最后以事务的方式输出修改的数据。

第四,同步写入组件。同步写入模块(JDBCWriter)是从日志读取模块(Store)拉取增量数据的同时,将其翻译为INSERT、UPDATE或DELETE等SQL语句写入数据至目标端的组件。Store组件记录的是流式的增量数据,可以通过Pipeline保证数据的有序性。Writer组件单线程顺序执行事务可以满足基本要求,但不能扩展性能,所以OMS引入并发写机制。在提升同步性能的同时,还需要保证数据的一致性,所以OMS引入冲突矩阵机制实现乱序并发写入,以确保每个事务的最终一致性。为了避免循环复制问题,所有通过OMS的JDBCWriter模块写入的数据都会在Store组件中进行打标处理,以确保不会再次被其它模块消费。

OMS不仅是OceanBase数据迁移服务的重要工具,更是作为集数据迁移、数据同步、集中管控于一体的基础设施,承接用户的业务,满足用户业务的同时,尽可能提高用户业务的可用性,从而为用户提供更好的服务。

未来OMS会持续在兼容性、易用性以及更多数据库支持上不断迭代,满足用户的需求,欢迎大家针对工具提出建议和使用反馈。




转载请注明:http://www.aierlanlan.com/rzdk/5607.html