DMHS简介
达梦数据实时同步软件 DMHS, 通过秒级数据实时同步可以有效避免传统备份系统导致的无法完全满足企业对于信息系统不中断服务的问题; 通过变化日志捕捉可以有效降低传统 ETL 工具因创建触发器、 影子表等对业务系统带来的性能影响; 通过可读写的备机数据库系统可以解决传统备机系统仅作为后备而无法对外提供数据服务的问题。
达梦DMHS 共分为四个大模块:
1、调度管理模块:负责同步服务的启动框架, 根据配置文件加载并启动 CPT、 EXEC 或NET 模块。
2、日志捕获模块:负责通过解析源端数据库的交易日志, 获取数据的增量变化, 并将增量变化封装为 DMHS 消息。主要组成部分, 包含 NET 模块发送子模块, 并由 MGR 模块调用。
3、数据传输模块:用于捕获器 CPT、 路由器 ROUTE、 转发器 TRANSFER、 执行器EXEC, 分为接收子模块(RECV) 与发送子模块(SEND) , 在同步中承担节点之间数据的收发任务。
4、数据入库:供 MGR 模块调度 NET 接收子模块进行数据接收, 并将数据供给 EXEC 模块进行事务入库。
各个模块的协作模式
1、调度管理模块最先启动,通过调度管理模块对其他各个模块进行统一管理,
2、源端的采集器进行日志的采集,通过数据传输模块将数据发送到下一个环节,通过源端可以将数据发送到目标端的执行器,对于某些情况数据不会直接发送到目标端需要通过路由器进行网络层面的跳转,或者通过转换器对传输过程进行数据的加工和转换,这里就涉及到路由器和转换器。
3、目标端通过数据传输模块的接收到数据可以直接对日志进行重演。
4、路由器和转换器接收到数据后经过一系列的转发和数据过滤转换后再次将数据发送到目标端进行日志的重演。
配置文件配置案例
<?xml version="1.0" encoding="GB2312" ?>
<dmhs>
<base>
<siteid>91</siteid> <!-- 站点 ID, 这个 ID 配置时要注意, 全局唯一, 最小值 0, 最大值 65535 -->
<lang>ch</lang> <!-- 范围 ch 或者 en -->
<mgr_port>6445</mgr_port> <!-- 管理端口号, 默认为 5345, 最小值 1, 最大值 65535 -->
<ckpt_interval>60</ckpt_interval> <!-- 执行端检查点间隔, 默认为 60s, 最小值 1s, 最大值 60s -->
<mem_chek>0</mem_chek> <!--是否开启内存检测, 0 表示不开启, 1 代表开启, 注意开启该项对性能有影响, 主要是用户调试检测-->
<version>2.0</version>
</base>
<cpt><!-- 这项配置可以配置多个 -->
<db_type>ORACLE11g</db_type><!-- 数据库类型, 默认为 dm7 -->
<db_server>orcl</db_server><!-- 数据库服务名, DM7 和 ORACLE 为 OCI 连接的服务名, DM6为连接的服务器 IP-->
<db_user>test</db_user><!-- 数据库用户名, 默认为 SYSDBA -->
<db_pwd>test</db_pwd><!-- 数据库口令, 默认为 SYSDBA -->
<arch><!--归档信息配置, 该标签是一个功能标签, 需要配置它的子项-->
<clear_flag>0</clear_flag><!--归档日志清理选项, 选配 0(不操作), 默认为 0 -->
<clear_interval>600</clear_interval> <!-- 归档日志清理间隔, 取值范围在 60-65535, 单位秒-->
</arch>
<send><!--此处仅以发送到网络为例, 其他配置详见本手册 4.2NET 发送子模块 -->
<ip>223.254.19.144</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<filter><!-- 过滤, 必须指定 -->
<enable>
<item>TEST.*</item>
</enable>
</filter>
<map>
<item>TEST.*==DMHS.*</item>
</map>
</send>
</cpt>
<exec><!-- 执行模块的基本配置 -->
<recv>
<data_port>5565</data_port>
</recv>
<db_type>dm7</db_type><!-- 数据库类型, 默认为 dm7 -->
<db_server>127.0.0.1</db_server><!-- 数据库服务名或 IP-->
<db_user>SYSDBA</db_user><!-- 数据库用户名, 默认为 SYSDBA -->
<db_pwd>SYSDBA</db_pwd><!-- 数据库口令, 默认为 SYSDBA -->
<db_port>5236</db_port><!-- 数据库端口号, 默认为 5236 -->
<db_name></db_name><!-- 默认数据库名, 默认为空串(只针对 dm6 有用) -->
<exec_thr>1</exec_thr><!-- 执行线程个数, 只有当 exec_mode 为 1 时才会生效!默认为 1, 最小值 1, 最大值 64-->
<exec_sql>512</exec_sql><!-- SQL 缓存大小, 默认为 512M, 最小值 32M, 最大值 4096M -->
<exec_trx> 5000 </exec_trx><!-- 事务缓存个数, 默认为 5000, 最小值,1000, 最大值 10000 -->
<exec_rows>250</exec_rows><!-- 批量绑定行数, 默认为 250, 最小值 1, 最大值 2000 -->
<msg_col_size>8000</msg_col_size><!-- 保存缓存消息列的大小, 这取决于目的库的块大小, 默认为 8000, 最小值 1000, 最大值 8000 -->
<level>0</level><!-- 复制级别, 默认为 0, 最小值 0, 最大值 65535 -->
</exec>
<route><!-- 消息路由可以实现 N==>1==>N 的功能, 主要是用来跨网关, 路由是不会对消息进行拆解的, 实现的是消息实现源和目的的映射关系 -->
<recv>
<mgr_port>5566</mgr_port>
<data_port>5565</data_port>
</recv>
<send><!-- 发送模块配置 -->
<siteid>101</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>127.0.0.1</ip><!-- 目的端 IP, 默认 127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口, 默认为 5345, 最小 1000, 最大 65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号, 默认为 5346, 最小值 1000, 最大值 65535 -->
</send>
<send><!-- 发送模块配置 -->
<siteid>3</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>223.254.16.77</ip><!-- 目的端 IP, 默认 127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口, 默认为 5345, 最小 1000, 最大 65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号, 默认为 5346, 最小值 1000, 最大值 65535 -->
</send>
</route>
<transfer><!-- 文件转发可以实现远程 FTP 服务器数据, 串行的同步到多个目的, 消息会被拆包, 可以实现消息过滤 -->
<recv>
<ftp_server>
<path>c:\file</path>
<mgr_server>127.0.0.1</mgr_server> <!-- HS 数据的来源 IP -->
<mgr_port>5345</mgr_port><!-- 数据服务器 HS 的管理端口号 -->
<src_siteid>4</src_siteid> <!-- 数据缓存目录下的文件所属的站点编号 -->
</ftp_server>
</recv>
<send><!-- 发送模块配置 -->
<ip>127.0.0.1</ip><!-- 目的端 IP, 默认 127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口, 默认为 5345, 最小 1000, 最大 65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号, 默认为 5346, 最小值 1000, 最大值 65535 -->
</send>
<send><!-- 发送模块配置 -->
<ip>223.254.16.77</ip><!-- 目的端 IP, 默认 127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口, 默认为 5345, 最小 1000, 最大 65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号, 默认为 5346, 最小值 1000, 最大值 65535 -->
</send>
</transfer>
</dmhs>
达梦技术社区地址:https://eco.dameng.com