DMHS路由功能体验

1 篇文章 0 订阅
1 篇文章 0 订阅

一、前言

近期遇到用户四台机器,两两相通,不存在三台之间互相联通的情况,并且数据只能在首尾节点进行同步,中间两个节点只作为转发器的作用,由此引申本次利用dmhs去同步两台达梦之间的数据需求。
架构:

二、具体架构步骤

在这里插入图片描述

2.1 首先介绍DMHS:

在这里插入图片描述
达梦的DMHS和oracl的OGG原理相似,都是由CPT模块从数据库的日志中捕获变化,然后进行压缩后SEND模块发送到目的端,再在目的端EXEC模块执行相同操作的一个过程实现数据的同步,目前DMHS不仅支持达梦之间的同步,也能支持常用的几个通用数据库的数据同步。

2.2 该项目具体的思路:

A段和B段的DMHS正常配置cpt和exec,C和D段的dmhs配置route模块;A的send 配置C,C的send 配置A和D,D的send配置C和B,B的send配置D,从而实现AB之间数据的双向同步,由CD进行消息的转发;

2.3 dmhs.hs配置(dmhs.hs为实现dmhs同步功能的具体模块参数配置文件)

A-192.168.216.137

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
        <lang>en</lang>
        <mgr_port>5345</mgr_port>
        <ckpt_interval>60</ckpt_interval>
        <siteid>1</siteid>
        <version>2.0</version>
</base>
        <exec>
<recv>
            <mgr_port>5345</mgr_port>
            <data_port>5346</data_port>
        </recv>
            <db_type>DM7</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>
            <exec_thr>4</exec_thr>
            <exec_sql>1024</exec_sql>
            <affect_row>0</affect_row>
            <enable_rowid>0</enable_rowid>
            <exec_trx>5000</exec_trx>
            <exec_rows>1000</exec_rows>
            <case_sensitive>1</case_sensitive>
            <toggle_case>0</toggle_case>
            <exec_policy>2</exec_policy>
        </exec>
    <cpt>
        <db_type>DM7</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>
        <idle_time>10</idle_time>
    <ddl_mask>op:obj:rec</ddl_mask>
        <arch>
            <clear_interval>600</clear_interval>
            <clear_flag>0</clear_flag>
        </arch>
        <send>
            <ip>192.168.216.138</ip>
            <mgr_port>5566</mgr_port>
            <data_port>5565</data_port>
            <net_pack_size>256</net_pack_size>
            <net_turns>0</net_turns>
            <crc_check>0</crc_check>
            <trigger>0</trigger>
            <constraint>0</constraint>
            <identity>0</identity>
            <filter>
                <enable>
		<item>*.*</item>
                </enable>
                <disable/>
            </filter>
            <map>
                <item>*.* == *.*</item>
            </map>
        </send>
    </cpt>
</dmhs>

C-192.168.216.138

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- 管理模块的基本配置 -->
<lang>ch</lang><!-- 语言选项,ch为中文,en为英文 -->
<version>2.0</version>
<mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
<chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->
<siteid>2</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
</base>
<route><!-- 消息路由可以实现N==>1==>N的功能,主要是用来跨网关,路由是不会对消息进行拆解的,实现的是消息实现源和目的的映射关系 -->
<recv>
<mgr_port>5566</mgr_port>
<data_port>5565</data_port>
</recv>
<send><!-- 发送模块配置 -->
<siteid>1</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>192.168.216.139</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5566</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5565</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
</send>
<send><!-- 发送模块配置 -->
<siteid>4</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>192.168.216.137</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
</send>
</route>
</dmhs>

D-192.168.216.139

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- 管理模块的基本配置 -->
<lang>ch</lang><!-- 语言选项,ch为中文,en为英文 -->
<version>2.0</version>
<mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
<chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->
<siteid>3</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
</base>
<route><!-- 消息路由可以实现N==>1==>N的功能,主要是用来跨网关,路由是不会对消息进行拆解的,实现的是消息实现源和目的的映射关系 -->
<recv>
<mgr_port>5566</mgr_port>
<data_port>5565</data_port>
</recv>
<send><!-- 发送模块配置 -->
<siteid>1</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>192.168.216.140</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>4</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>192.168.216.138</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5566</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5565</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
</send>
</route>
</dmhs>

B-192.168.216.140

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
        <lang>en</lang>
        <mgr_port>5345</mgr_port>
        <ckpt_interval>60</ckpt_interval>
        <siteid>4</siteid>
        <version>2.0</version>
</base>
        <exec>
<recv>
            <mgr_port>5345</mgr_port>
            <data_port>5346</data_port>
        </recv>
            <db_type>DM7</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>
            <exec_thr>4</exec_thr>
            <exec_sql>1024</exec_sql>
            <affect_row>0</affect_row>
            <enable_rowid>0</enable_rowid>
            <exec_trx>5000</exec_trx>
            <exec_rows>1000</exec_rows>
            <case_sensitive>1</case_sensitive>
            <toggle_case>0</toggle_case>
            <exec_policy>2</exec_policy>
        </exec>
    <cpt>
        <db_type>DM7</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>
        <idle_time>10</idle_time>
    <ddl_mask>op:obj:rec</ddl_mask>
        <arch>
            <clear_interval>600</clear_interval>
            <clear_flag>0</clear_flag>
        </arch>
        <send>
            <ip>192.168.216.139</ip>
            <mgr_port>5566</mgr_port>
            <data_port>5565</data_port>
            <net_pack_size>256</net_pack_size>
            <net_turns>0</net_turns>
            <crc_check>0</crc_check>
            <trigger>0</trigger>
            <constraint>0</constraint>
            <identity>0</identity>
            <filter>
                <enable>
		<item>*.*</item>
                </enable>
                <disable/>
            </filter>
            <map>
                <item>*.* == *.*</item>
            </map>
        </send>
    </cpt>
</dmhs>

说明:
上述dmhs.hs中A的siteid是1,它向C投递包含siteid为1的日志,C再向D投递siteid为1的日志,最后D向B投递siteid为1的日志并执行,反之亦然,从下面的C的dmhs.hs片段配置中看recv指的是转发路由自身接收数据使用的端口,所以A的dmhs.hs中send发送的端口应该就是这里C的recv的端口,5566和5565。
A

<send>
            <ip>192.168.216.138</ip>
            <mgr_port>5566</mgr_port>
            <data_port>5565</data_port>

另外1指的是把siteid=1也就是A的数据投递到D上,所以下方send中的端口应该是D的recv端口,5566和5565。
C

<recv>
<mgr_port>5566</mgr_port>
<data_port>5565</data_port>
</recv>
<send><!-- 发送模块配置 -->
<siteid>1</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>192.168.216.139</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5566</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5565</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
</send>

D再把siteid=1的数据投递到B上执行,所以D上1下方send中的端口号应该就是B上的exec模块的端口5345和5346
D

<recv>
<mgr_port>5566</mgr_port>
<data_port>5565</data_port>
</recv>
<send><!-- 发送模块配置 -->
<siteid>1</siteid><!-- 这个站点号跟源端的站点号要一致 -->
<ip>192.168.216.140</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
</send>

B

<exec>
<recv>
            <mgr_port>5345</mgr_port>
            <data_port>5346</data_port>
        </recv>

2.4 启动服务

启动每个节点的dmhs_server
1、ABCD正常安装dmhs
2、CD的console执行下面命令用于启动路由转发功能

connect
start recv

3、AB的console执行:启动捕获和执行模块

connect
start exec
clear exec lsn
copy 0 "sch.name is not null" dict
start cpt

下面就可以愉快的测试在A上插入数据B上是否能接受到数据啦。

三、结语

DMHS作为强大的同步工具,支持一对一,一对多,多对一,单向,双向,线型,环形同步,日常中能满足我们几乎大部分的同步需求。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值