DMHS路由功能体验

1、DMHS架构

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

DMHS路由功能体验

2、项目架构:

A段和B段的DMHS正常配置CPT和EXEC,C和D段的DMHS配置route模块;A的SEND 配置C,C的SEND配置A和D,D的SEND配置C和B,B的SEND配置D。

3、dmhs.hs配置:

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>0</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>0</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>

反向SITEID=4的时候一样的原理。

二、启动DMHS

启动每个节点的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

 

上一篇:python--包


下一篇:PyQt5基础学习-pyqSignal(object)(自定义信号) 1.pyqtSignal().emit(发送信号) 2.pyqtSignal().connect(连接槽函数)