DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行。以下是DMHS模块组成图。
对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插 入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。
DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。数据初始装载用于将源端数据库的初始数据同步至目标数据库,使得源库和目标库的初始数据保持一致。数据初始装载的有两种方式:直接的数据装载方式和备份文件装载方式。直接的数据装 载方式基于源数据库数据的直接查询抽取装载;备份文件装载方式则是基于数据库自身的数据备份还原,将源库初始数据备份后在目标库进行还原达到初始数据一致。备份文件装载方式要求源库和目标库为同一类型的数据库系统,目前 DMHS 仅支持 DM 数据库的备份文件 装载方式。
DMHS 目标端通过 NET 模块接收源端发送过来的日志消息,然后把这些消息按事务分类,如果某个事务上收到了提交消息,则通过 SQL 逆向生成的技术构造还原相应的事务 SQL 语句,使用 ODBC 驱动接口对这些数据进行入库执行,完成数据同步;如果某个事务在源端回滚,则直接丢弃不执行。
管理模块(MGR)是同步服务的启动框架,根据配置文件加载并启动 CPT、EXEC 或 NET 模块,从而提供完善的捕获器功能、执行器功能、路由器功能或转发器功能。
MGR 模块可以解析配置参数,根据配置参数启动 DMHS 的捕获器功能、执行器功能、 转发器功能或路由功能。当 MGR 启动捕获器功能时,MGR 会调度 CPT 模块和 NET 模块 (发送子模块);当启动执行器功能时,会调度 NET 模块(接收子模块)和 EXEC 模块; 当启动转发器或路由器功能时,会调度 NET 模块(接收子模块和发送子模块)。 MGR 模块主要组成部分如下图(蓝色虚线为可选):
MGR 模块在配置文件中对应的 XML 元素为 base,MGR 模块必须在配置文件中设置站点号和管理端口号,并给出正确的参数值,否则 MGR 模块无法正常启动。
要启动 DMHS 数据实时同步服务,首先要启动 MGR 模块的管理调度功能,然后 MGR 模块作为启动框架再进行日志捕获、数据执行等功能的调度及使用。在启动 MGR 启动框架运行之前,必须完成配置文件的参数设置。配置文件位于 DMHS 安装程序目录的 bin 文件
夹中,是以 dmhs.hs 命名的 XML 文件,遵循 XML 标准格式。创建或添加配置文件的方法如下:
在使用 DMHS 软件时,必须先启动 MGR。在软件中对应的程序在安装目录的 bin 文件 夹下,名为 dmhs_server,启动命令:./dmhs_server。在停止所有的捕获器模块、执行器模块、路由器模块、转发器模块之后,才能停止 DMHS 管理模块 MGR,在运行的 dmhs_server 程序中,执行以下 DMHS 命令:exit。
确保 DMHS 配置文件中已有该捕获器配置参数,如果并非首次启动该捕获器,可直接启动该捕获器。首次启动该捕获器,请先确保以下准备工作是否完成:
当以控制台方式启动 dmhs_server 时,用户可以在服务器控制台输入服务器命令:start cpt。
如果要启动 DMHS 执行器功能,那么就需要已启动的 MGR 管理模块根据数据实时同步系统的需求去调度 EXEC 模块和 NET 接收子模块。当以控制台方式启动 dmhs_server 时,用户可以在服务器控制台输入服务器命令:start exec。
DMHS 数据实时同步系统中的路由器适用于捕获器和执行器被网关隔断的环境,捕获器和执行器无法通过 NET 实现网络直连,需要经过第三台机器中转的情况。DMHS 的路由功能一般配置在除捕获器、执行器之外的第三台机器上,它负责把源端的 CPT 模块和执行端的 EXEC 模块进行映射,从而实现跨网关同步,并且一个 DMHS 的路由器可以实现 N 对 N 的映射。
路由器由 DMHS 的 MGR 模块、NET 接收子模块和 NET 发送子模块组成,如下所示。
当以控制台方式启动 dmhs_server 时,用户可以在服务器控制台输入服务器命令:start recv。
DMHS 数据实时同步系统中的转发器器适用在数据转发适用在一个捕获器需要对应多个执行器的环境,或者捕获器和执行器之间存在物理隔离网闸,无法通过网络直连需要通过文件中转的情况。转发和路由的不同在于,路由是 N 对 N 网络链路的映射,它不能对链路中的数据进行修改,而转发功能则可以针对每个下一级配置不同的过滤和映射。
当以控制台方式启动 dmhs_server 时,用户可以在服务器控制台输入服务器命令:start recv。
双向同步适用于“双活”数据库场景,即一个系统中存在 2 个数据库实例,并且 2 个数据库实例不存在主备关系,每个数据库实例都对应用系统提供服务,应用系统可能对 2 个数 据库实例进行数据修改。双向同步方案中,需对 2 个数据库实例分别部署一套 DMHS,每套 DMHS 包含日志捕获模块、数据入库模块及数据传输模块,如下图所示:
双向同步中,数据库 A 的增量数据会同步到数据库 B,数据库 B 的增量操作会同步到数据库 A。为避免同一个事务在数据库 A、B 上重复执行,进入死循环状态,DMHS 必须对接收到的增量数据进行判断,对未执行过的事务,执行模块将增量数据入库;对已经执行过的事务,执行模块将增量数据丢弃。
级联同步是多个一对一同步的组合,整个同步系统中,不存在同步环路,数据流向为树状结构,除根节点外,每个同步节点都有唯一的数据来源,同步子节点中的数据,为上层节点数据的超集。级联同步适用于以下两种情况:
配置级联同步时,根节点不包含数据入库模块,叶子节点不包含日志捕获模块,其他的节点则必须包含日志捕获模块及数据入库模块。如果系统中数据有层次或有包含关系,装载时,需从树状结构的底层开始装载,A->B->C 的同步,需首先装载 B->C, 再装载 A->B。
环状同步是对双向同步的扩展。环状同步系统中,至少存在三个同步节点,每个同步节点涉及的数据库完全独立,其中任意一个节点数据库的数据修改,都会同步到其他数据库中。
环状同步中,需对已经执行过的事务进行过滤,避免事务的重复执行。具体过程如下: 数据接收节点在接收到事务时,首先解析消息包中的事务标记信息,然后根据事务标记信息 判断事务是否已经执行,如果事务已经在本节点执行,则将事务丢弃,否则将事务入库,并 在事务标记中添加本节点信息。
一对多同步适用于向多个目标分发数据的场景,同时,可根据需要,对源端数据进行过滤或有选择发送。一对多中,每一个执行模块都有一个日志捕获模块与其对应,源端各个日志捕获模块互不干扰。进行日志分析时,各个日志捕获模块都需要进行日志读取、日志分析。
多对一同步方案,适用于从多个数据库到单个目标库进行数据汇总。多对一同步中,需首先在每个源端执行数据装载操作,该操作与一对一同步相同,需保证不同源端数据库中的数据映射到目的库中,没有数据冲突。
DMHS 支持源端为 RAC 环境的数据库同步,在 RAC 环境中,源端数据库同样需要进行开启附加日志、开启归档的操作。
文章
阅读量
获赞