DMDRS学习
产品介绍
- 达梦数据复制软件(简称DMDRS)是一种用于同构数据库、异构数据库以及各种数据管理系统之间的数据复制软件。DMDRS采用模块化的设计,通过灵活配置不同的功能模块,实现多功能的数据复制服务,以满足多种场景下的数据复制业务需求。
- 基于数据复制业务的应用场景,DMDRS提供数据迁移、数据同步、数据分发和数据转换等功能,而且数据同步功能还支持一对一、双向、一对多、多对一、级联同步、环形同步和DMDRS主备等多种同步拓扑结构。
产品兼容
支持的软硬件平台
-
DMDRS支持各种主流的软硬件平台,如龙芯、飞腾、鲲鹏、海光、兆芯、申威、宏芯、X86和ARM等处理器以及麒麟、UOS、凝思、Red Hat、Ubuntu、Solaris、AIX和Windows等操作系统。
说明
AIX平台不支持MySQL、Kafka数据库和定时调度功能
支持的数据库
-
DMDRS支持多种同构数据库、异构数据库之间或者数据库与其他数据管理系统之间的数据复制
说明
- DMDRS支持的源数据库:DM8(单机、DSC)、Oracle10g以上版本(单机、RAC)和MySQL5.6以上版本
- DMDRS支持的目标数据库:DM8(单机、DSC)、Oracle10g以上版本(单机、RAC)、MySQL5.6以上版本和Kafka0.8.2以上版本
-
数据迁移
-
数据迁移支持同构或异构数据库之间数据库对象的迁移。迁移对象如下:
-
-
数据同步
-
数据同步支持同构或异构数据库之间的数据同步,包含全量数据装载和增量数据同步同时进行的方式。
-
-
数据分发
-
数据分发支持同构或异构数据库之间的全量数据和增量数据的分发。
-
-
数据转换
- 数据转换可用于数据迁移、数据同步和数据分发等场景,支持对源数据库的全量数据和增量数据进行转换。支持的源数据库和目标数据库与数据迁移、数据同步和数据分发等场景支持的数据库一致。
产品架构
DMDRS采用模块化的设计,通过灵活配置不同的功能模块,实现多功能的数据复制服务,以满足多种场景的数据复制业务需求。
产品模块
- DMDRS产品模块包括Manager管理模块、CPT模块、DSS模块、EXEC模块和SCHED模块。
Manager管理模块
- Manager管理模块是DMDRS服务的管理模块,启动DMDRS服务后,Manager管理模块开始运行,主要提供客户端监听、其他功能模块的加载和维护以及执行控制台命令等功能。
- 根据自定义配置,加载CPT模块、DSS模块、EXEC模块和SCHED模块,实现不同的功能。
- 根据模块名称管理唯一标识的模块。
- 启动监听线程,监听客户端连接。
- 启动授权校验线程,校验License信息。
- 接收并执行控制台命令。
- 清理功能模块。
CPT模块
- CPT模块主要实现源数据库的全量数据装载以及增量数据实时捕获、解析和投递。CPT模块主要提供数据装载、添加同步表、日志捕获、日志解析和消息投递等功能。
- 数据装载:基于数据库接口,查询抽取源数据库的数据发送至目标DMDRS服务,目标DMDRS把数据同步到目标数据库,实现数据装载
- 添加同步表:查询待同步表及部分数据库系统表的结构定义信息,并将其保存到本地磁盘。DMDRS在同步数据时,需要根据匹配的同步表字典信息来解析日志中的表增量操作
- 日志捕获:基于优化的日志扫描算法,实时日志增量捕获,保存在分析队列中
- 日志解析:提取分析队列中的日志数据,将其解析为DMDRS内部统一的消息格式体,保存在投递队列中
- 消息投递:提取投递队列中的消息数据将其整理后保存在发送队列中,等待网络模块进行网络发送
DSS模块
- DSS模块具备高可靠、高吞吐量的流存储和分发功能。DSS模块接收CPT模块发送的数据,并根据Topic主题将消息分类流式持久化存储在不同的Topic中,供下一级数据服务访问使用。
- 根据Topic主题进行分类消息存储,实现数据分发。
- 采用多线程并发IO读写、内存池、数据页缓存等技术,实现高性能的流式存储。
- 基于数据页缓存、优化的页淘汰算法和高效的内存管理等技术手段,实现高吞吐量的数据访问。
- 支持基于任意消费点和消费规则进行数据的消费。
- 支持主备架构,保障高可靠性,避免单点故障问题。
EXEC模块
- EXEC模块主要功能为接收CPT模块发送的全量装载数据或者增量同步数据,在目标数据库进行应用,实现数据实时同步。同时,EXEC模块也可以从DSS流式存储中获取同步数据并应用到目标数据库。
- 支持分组缓存执行功能,通过装载分组、等待分组和执行分组等实现全量数据装载与增量数据同步同时执行的数据同步。
- 支持多线程并行执行入库,实现高效的数据同步。
- 支持数据转换功能,与CVT模块结合使用,实现实时的数据清洗转换同步。
- 支持分组执行功能,实现不同分组对应不同的执行策略,满足多样化的同步执行需求。
- 基于表粒度的同步及高效的检查点算法,解决长事务执行引起的同步阻塞问题。
CVT模块
- CVT模块通过DRS语言实现自定义编程式编写数据转换规则和逻辑,实现数据清洗转换的功能。CVT模块从CPT模块或者EXEC模块中获取数据,并按照预先定义的转换规则及逻辑,以单个操作作为最小单元进行数据清洗转换。
- 支持编程式的转换逻辑规则编写。
- 提供丰富的转换处理函数,如数据函数、字符串函数、时间日期函数等。
- 复杂的转换数据结构支持,如HASH和B树,实现键值对的存储。
- 支持关联查询,可以自定义关联查询条件在第三方库上获取关联数据。
SCHED模块
- SCHED模块主要提供定时自动执行功能调度任务,实现定时执行CVT脚本、定时删除多CPT归档、定时服务守护、定时数据装载、定时数据同步、定时静态数据校验和定时动态数据校验等调度功能。
产品服务
-
DMDRS通过配置不同的功能模块,可以实现多功能的数据复制服务,常用的产品服务包括源DMDRS服务、目标DMDRS服务和DMDSS服务。
功能特性
数据迁移
- 功能特性
- 迁移对象
- 支持表、索引、序列、主键、外键、约束、注释、视图、触发器、函数、存储过程、包、类、同义词和自定义类型数据库对象的迁移。
- 数据装载
- 分组装载:装载表数据时,可以使用分组装载功能对表数据进行快速装载。支持将基表切分成多个部分以便多任务并行装载,并在目标数据库上利用表分组LSN过滤已装载数据日志,以实现表的并发快速装载。
- 交换分区装载:装载分区表数据时,可以使用交换分区功能对分区表数据进行快速装载。根据被装载表的分区分别装载多个基表,并在目标数据库上利用交换分区功能将这些基表合并为同一张表。每个分区都启用一个独立的线程来装载该分区的数据,从而实现多线程并行地装载分区表。
- 断点续传:装载表数据时,根据表数据量的大小采用不同的装载方式,数据量小的表会整表装载,数据量大的表会将数据分割为多个小数据集后再装载。在装载过程中,DMDRS会记录每个数据集的装载状态。根据装载状态进行不同处理,对未开始装载的数据集继续装载,对装载错误的数据集进行重装,对已成功装载的数据集则不处理,从而实现表数据的装载断点续传功能。
- 快速装载:如果目标数据库支持快速装载接口(如Oracle 、DM),装载表数据时,可以使用快速装载功能,目标DMDRS接收到装载数据后,会使用数据库提供的快速装载接口进行数据入库,加快装载效率。
- 迁移对象
数据同步
- 功能特性
- 添加增量同步表
- 支持动态添加或删除增量同步表,在已有同步链路中,添加增量同步表后,源DMDRS会自动进行表的增量数据的同步。
- 添加同步表
- 支持动态添加或删除同步表,在已有同步链路中,添加同步表后,源DMDRS会自动进行表的全量数据的装载,装载完成后自动进行增量数据的同步。
- 离线日志解析
- 当只有数据库归档文件和离线字典文件时,DMDRS支持在不连接数据库的情况下,通过指定过滤条件以及LSN范围将数据库归档文件解析成SQL语句存放在文件中。
- 远程日志读
- 适用于源数据库为DSC、Oracle RAC和MySQL数据库,源DMDRS无需部署在源数据库服务器本地,可以部署在其他服务器通过远程日志读功能,实现远程归档日志实时读取捕获解析,完成数据实时同步。当源数据库为DSC时,DSC必须处于ASM模式。
- 数据库归档删除
- 支持将源DMDRS已经同步的归档文件删除或者备份到指定目录,防止归档文件对数据库服务器空间的过度占用。
- DMDRS主备
- 支持DMDRS主备功能,支持一主一备。DMDRS主备节点分别部署在数据库集群节点或主备集群节点上,当DMDRS主节点所在的数据库节点故障后,能自动切换到DMDRS备节点所在的数据库上继续同步,避免同步中断。
- 对象映射
- 支持对象名的映射,包括数据库名/容器名、表空间名、模式名和表名。
- 数据类型映射
- 支持数据类型映射以及映射类型的自定义修改。
- 分组执行
- 支持在数据执行时,将同步表进行分组,不同分组的事务执行策略、事务合并策略和执行优先级等不相同,用于满足不同场景需求。若一个事务涉及多个表,并且这些表归属不同的分组,会将事务按照表拆分为多个子事务,子事务将作为独立的事务去执行。
- 添加增量同步表
数据分发
- 功能特性
- 高性能、高吞吐量的持久化存储
- DMDRS与DMDSS服务共同构建高性能的同步分发服务,将源DMDRS的数据进行持久化存储,实现大规模数据量分发,适用一对多的同步场景。
- 基于映射规则的数据分发
- 目标DMDRS获取分发数据时,支持配置数据映射规则,只获取需要的数据。
- 基于DMDSS主备的数据分发
- 数据分发支持部署配置为DMDSS主备分发,避免DMDSS单点故障问题。
- 高性能、高吞吐量的持久化存储
数据转换
- 功能特性
- 实时抓换
- CVT模块与CPT模块或者EXEC模块共同使用,以数据库日志中单个操作作为最小单元进行数据清洗转换,将CPT模块或EXEC模块获取的数据进行实时转换。
- 可编程
- 提供表名定义、变量定义和转换定义等流程定义语句,支持循环语句、条件语句和返回语句等语法,支持+,-,*,/,not,and,or,like等运算符,支持丰富的转换函数,可实现自定义编程式的转换逻辑编写。
- 支持转换函数
- 支持自定义系统函数包、支持数据函数、字符串函数、日期时间函数和类型转换函数等。
- 支持键值对存储
- 提供容器类型的结构支持,容器是指能够存储key-value等键值对,可以保存流程转换过程中的一些信息。例如需要关联查询过滤的情况,可以将关联表的同步操作捕获并存储在容器中,需要时直接在容器中查找,减少与数据库的交互。
- 支持联机查询
- 提供对数据库的联机查询功能,DMDRS在数据实时转换时,可以联机查询数据库中与转换数据相关的结果集并保存,便于数据转换时关联。
- 实时抓换
应用场景
数据迁移
-
数据迁移提供稳定、高效的数据库全量数据迁移,一般用于迁移后源数据库业务会中断的场景。数据迁移的部署方式及特点如下所示:
-
部署服务包括源DMDRS和目标DMDRS
-
数据迁移直接查询抽取源数据对象定义或数据,将其发送至目标DMDRS,实现数据迁移。采用多种迁移技术,如分组装载、快速装载和断点续传等,保障迁移的完整性和高效性。
-
数据同步
-
数据同步是通过全量数据装载和增量数据同步功能,保证源数据库和目标数据库数据的持续一致性,适用于同构或异构数据库之间的数据实时同步。数据同步支持一对一、双向、一对多、多对一、级联实时、环形和主备同步等多种拓扑结构。
-
一对一同步
-
一对一同步是指将源数据库的数据通过DMDRS单向地同步到目标数据库。主要应用于源数据库的业务数据仅需传递到单个目标数据库实例的场景,实现双业务中心、实时备份和报表服务等业务。部署方式及特点如下所示:
- 部署服务包括源DMDRS和目标DMDRS。
- 源数据库与目标数据库通过DMDRS进行实时数据同步,保持数据一致性,目标数据库可进行读写访问。
- 基于目标数据库系统的读写访问,可构建”双活“业务系统,分担源数据库的系统压力。
- 目标数据库可作为备机服务,承担部分查询业务,分担源数据库系统的压力,应用于数据分析和报表服务等业务。
- 目标数据库可作为实时备份,在源数据库出现故障时,可进行业务切换,保障业务连续性,降低业务中断风险。
- 目标数据库系统的同步表数据不能被修改,否则可能导致同步表数据不一致。
注意:
将目标DMDRS服务的配置参数topology配置为NORMAL模式,有助于提升同步的性能
-
-
双向同步
-
双向同步是指将两端数据库的数据分别通过DMDRS同步到对端数据库。主要应用于两端数据库均有业务操作,且必须保持两端数据库的数据一致性的场景。部署方式及特点如下所示:
-
部署服务包括两端数据库的双向DMDRS服务。
-
同步两端的数据库均有业务操作,导致同步表数据的增量变化。
-
任一端数据库的增量操作均可通过DMDRS服务同步到对端,保持数据一致性。
-
注意
- 需要将目标DMDRS服务的配置参数topology配置成RING模式
- 双向同步无法保证事务在两端的执行先后顺序
- DDL操作支持的的数据库双向同步的是DM和Oracle
- 不能过滤DRS_$开头的辅助表
- 两端DMDRS服务的站点号不能重复
-
-
一对多同步
-
一对多同步是将源数据库的数据通过DRS同步到多个目标数据库。主要应用于源数据库需要将业务数据系统全部同步到多个目标数据库,或将业务系统的数据分类同步到多个目标数据库的场景。部署方式及特点如下:
-
部署服务包括源DMDRS服务(包含多个CPT模块)和多个目标DMDRS服务。
-
源DMDRS服务包含多个CPT模块,可根据需要启用或停止某个数据同步链路。
-
源DMDRS服务可根据过滤规则,将操作数据分类同步到对应的目标DMDRS,实现分类同步。
-
一对多同步属于单向数据实时同步,因此目标数据库不能修改对应同步表数据,否则可能导致数据不一致。
注意
- 所有源DMDRS服务的CPT模块arch配置的clear_flag参数应配置为0
- 需要对每个同步链路单独做全量数据装载或字典装载
- 每个CPT模块的dict_dir参数配置的路径不能重复
-
-
多对一同步
-
多对一同步是指将多个源数据库的数据通过DMDRS同步到单个目标数据库。主要应用于多个源数据库的业务数据向单个目标数据库进行汇总的业务场景。部署方式及特点如下:
-
部署服务包括多个源DMDRS服务和单个目标DMDRS服务。
-
多个源数据库同步表的数据汇集到目标数据库中,适用于汇总分析、数据分析和数据仓库等业务场景。
-
由于多个源数据库的数据汇集到单个目标数据库,如果多个源数据库的数据质量存在问题,可能导致目标数据库汇集的冲突问题。
-
某个源数据库进行表的删除或清空等操作,会导致目标数据库删除或清空同步的其他源数据库的数据。
-
-
注意
- 目标DMDRS服务会为每个源DMDRS同步链路创建私有的缓存,私有缓存的大小由参数site_buffer决定
- 目标DMDRS服务会为每个源DMDRS同步链路创建私有的装载缓存,由参数load_buffer_limit控制,并受源DMDRS服务CPT模块load配置的nets参数影响
-
-
级联同步
-
级联同步是指在有3个或3个以上数据库的场景下,通过DMDRS实现源数据库→级联数据库→目标数据库的数据的级联同步。主要应用于业务系统的同步数据具有层次或者包含关系的场景。部署方式及特点如下:
-
部署服务包括源DMDRS、至少1个级联DMDRS和目标DMDRS,级联DMDRS作为级联同步中的中间节点,既产生增量同步数据,也接收上一级节点发送的同步数据。
-
级联同步的同步数据具有层次或者包含关系,目标数据库的同步数据可包含所有其他同步数据库的数据。
-
由于级联同步的特点,首节点、中间节点以及尾节点同步数据可能不一致。
-
-
-
环形同步
-
环形同步是指在有3个或3个以上数据库的场景下,通过DMDRS实现数据库A→数据库B→数据库C→数据库A的数据的环形同步。主要应用于多个数据库业务系统需要保持数据一致,且每个数据库上的业务数据均需同步到其他数据库的场景。部署方式及特点如下:
-
每个同步数据库均部署级联DMDRS服务,级联DMDRS作为环形同步中的节点,既产生增量同步数据,也接收上一级节点发送的同步数据。
-
每个数据库的操作均会同步到环形结构的其他数据库中。
-
环形结构中的同步表数据,在所有节点保持一致。
-
-
-
主备同步
-
主备同步是指在源数据库或目标数据库为集群或者主备的场景下,将源数据库的数据通过DMDRS主备同步到目标数据库。DMDRS主节点服务承担同步功能,DMDRS备节点服务处于等待就绪状态,持续同步主节点服务的环境。
-
当DMDRS主节点服务所在的数据库节点故障后,DMDRS备节点服务会自动成为主节点,避免同步中断。
-
DMDRS主节点服务负责全量数据和增量数据的同步。
-
DMDRS备节点服务实时同步主节点的环境。
-
DMDRS主节点服务所在的数据库节点故障后,DMDRS备节点将会成为主节点继续同步服务,原来的DMDRS主节点将履行备节点职责。
-
-
-
数据分发
-
数据分发是指源DMDRS服务与DMDSS服务共同构建基于高性能的流存储的数据分发同步服务,源DMDRS服务将源数据库的同步数据发送至DMDSS流存储进行持久化存储,以供下一级的目标DMDRS服务进行访问,并完成同步。
-
基于DMDSS的高性能分发服务,使得源DMDRS服务在进行数据同步时,不用等待目标DMDRS执行的响应,不会受到目标DMDRS执行性能的影响,高效快速的进行源数据库数据的同步,适用于大规模数据量的高效同步,避免源数据库归档文件由于分析不及时被删除,造成同步归档不连续的情况。
-
部署方式及特点:
-
部署服务包括源DMDRS、DMDSS和多个目标DMDRS。
-
适用于源数据库大规模数据量的同步要求,通常应用于TB级及以上数据量同步的应用场景。
-
对于源数据库增量操作数据量大或归档文件保留时间较短的情况,可应用本同步架构,通过DMDSS对日志数据进行持久化存储,避免源DMDRS归档被删导致的断档风险。
-
DMDSS服务对服务器磁盘性能以及容量具有较高要求。
-
基于高性能、高吞吐量的DMDSS服务,可以实现多个目标的数据分发服务,适用于要求进行一对多的同步业务场景。
-
由于同步数据流多了DMDSS的中间存储,相比于源DMDRS与目标DMDRS网络直连的同步架构,在数据同步实时性方面,可能存在一定损耗。
-
DMDSS流存储服务可部署为DMDSS主备服务,提高可靠性,避免单点故障。
-
数据转换
- 数据转换是指对源数据库的全量数据和增量数据进行自定义转换,数据转换功能可用于数据迁移、数据同步和数据分发等场景,满足多样化的数据转化场景。部署方式及特点如下:
- 在源DMDRS服务或者目标DMDRS服务中启动CVT数据转换功能,可以在源DMDRS中进行数据转换,也可以在目标DMDRS中进行数据转换。
- 数据转换支持实时对增量数据进行数据内容转换、数据拆分和函数处理等功能,CVT模块针对每一行记录进行实时转换。
- 提供自定义可编程的方式进行转换功能及转换逻辑编写,提供丰富的处理流程及处理函数,支持复杂的HASH、B树等数据结构进行数据处理。
参考
- 达梦在线服务平台:https://eco.dameng.com/