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