达梦数据实时同步软件(以下简称 DMHS)是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统
该产品采用基于日志的结构化数据复制技术, 不依赖主机上源数据库的触发器或者规则, 对主机源数据库系统几乎无影响
能以极少的系统开销实现秒级数据实时同步复制
DMHS 基于成熟的关系数据模型和标准接口, 支持多种软硬件平台, 能够灵活的配置出一对一、一对多、多对一、多对多以及级联等多种形式的复制拓扑结构,
可以广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发、多业务中心等业务领域
特点
高通用性
跨平台软硬件支持: 面对日趋复杂的计算机环境具有极好的适应性
灵活可配置
体系结构高可扩展: 开放式的体系结构可以实现多种复制拓扑结构
数据同步内容可定制: 支持数据筛选、过滤、转换、压缩和加密
轻量级设计实现快捷部署: 能够在不中断业务的情况下, 将主机数据库中的当前数据平滑地装载到备机数据库中
性能良好
确保业务系统高可用: 复制对主机源数据库系统几乎无影响, 备机可实现业务系统快速切换和恢复
高效的数据实时同步: 采用并行处理技术实现大批量数据的实时复制
可读写的备机系统: 可以实现生产型业务与分析型业务相隔离的多业务中心
传输可靠
高可靠的数据传输: 严格按照主机业务系统事务顺序实施数据复制, 保障备机数据库与主机数据库的事务级完整性和一致性
系统架构
MDHS同步服务主要分为三大模块,分别是日志分析(CPT)、消息发送(NET)、数据入库(EXEC)。这三个模块由管理模块(MGR)统一调度执行。
日志分析(CPT)
负责对源数据库日志进行解析,联合字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),这些操作通过包装后投递给信息发送(NET)模块。
CPT分析日志时,需要从数据库中查询表的字典信息以及日志文件发生切换时需要访问日志文件信息,也就是说,日志分析过程中CPT会和源数据库创建链接进行交互,若是同步需要支持同步DDL,那么还需要在源数据库上创建事件触发器,用来捕获DDL操作,这些配置需要在搭建同步是完成。
消息发送(NET)
NET消息发送子模块
通过CPT捕获到的日志操作,进行分发,分发前能够对操作进行过滤,或者对表进行过滤和映射,还能够对消息中的列进行映射(更名、剔除和函数计算)。通过处理的消息经过网络(TCP/IP)发送给下一级,或者保存到本地文件。
NET消息接收子模块
经过上一级NET消息发送子模块经过网络传输的消息,由NET消息接收子模块经过网络(TCP/IP)接收并发送给EXEC模块。
数据入库(EXEC)
EXEC模块接收到NET接受子模块发来的信息,把这些消息按事务分类,若是某个事务上收到了提交消息,则构造相应的SQL,使用ODBC驱动接口对这些数据进行入库;若是某个事务在源端回滚,则直接丢弃不执行,同步中若是使用了中文表明或者字段名,要使用支持中文字符集的unixODBC,否则描述会出错。
EXEC模块在运行过程中需要不断的刷新检查点,以便推动入库的LSN。为适应不一样的应用场景,DMHS提供的功能能够细分为捕获器功能、执行器功能等。
DMHS 搭建
DM8 到 DM8 同步
环境说明
192.168.232.128 源库
192.168.232.129 目标库
一、源端和目标端安装数据库并初始化
1、源库
[dmdba@itsapp1 dm8]$ ./DMInstall.bin -i
[dmdba@itsapp1 bin]$ ./dminit path=/dmdata db_name=its INSTANCE_NAME=its1
2、目标库
[dmdba@itsapp2 dm8]$ ./DMInstall.bin -i
[dmdba@itsapp2 bin]$ ./dminit path=/dmdata db_name=its INSTANCE_NAME=its2
二、配置数据库参数
1、配置归档
ARCH_INI = 1
2、配置逻辑日志
RLOG_APPEND_LOGIC = 1
[dmdba@itsapp1 bin]$ vi /home/dmdba/dmdbms/data/its/dmarch.ini
[ARCH_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
三、在源库和目标库上安装DMHS软件
四、源库配置DDL
使用manager工具执行/opt/dmhs/scripts/ddl_sql_dm8.sql
五、配置dmhs.hs
1、源端
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
</base>
<cpt>
<db_type>dm8</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<parse_thr>1</parse_thr>
<ddl_mask>op:obj</ddl_mask> <!--DDL配置项-->
<arch> <!--归档清理配置项-->
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
<dir>/dmarch</dir>
</arch>
<send> <!-- 发送模块配置-->
<ip>192.168.232.129</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<trigger>1</trigger> <!-- 是否忽略触发器,默认为0,限定值0,1 -->
<constraint>1</constraint> <!-- 是否忽略约束,默认为0,限定值0,1 -->
<identity>1</identity>
<filter> <!--过滤配置项-->
<enable> <!-- 白名单,所有允许同步的表 -->
<item>SYSDBA.*</item>
</enable>
</filter>
<map> <!--映射配置项-->
</map>
</send>
</cpt>
</dmhs>
2、目标端
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<db_name></db_name>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>1000</exec_rows>
</exec>
</dmhs>
六、源端和目标端开启dmhs_server
[root@itsapp1 bin]# ./dmhs_server ./dmhs.hs
七、目标端初始装载
[root@itsapp2 bin]# ./dmhs_console
DMHS> start exec
八、源端
[root@itsapp1 bin]# ./dmhs_console
DMHS> clear exec lsn
九、在源端进行数据装载
DMHS> copy 0 "sch.name='SYSDBA'" dict|create|insert
十、源端执行开始同步
DMHS> start cpt
详细内容请参考官方文档:https://eco.dameng.com
更多详情请访问达梦在线服务平台 https://eco.dameng.com/