达梦实时同步软件DMHS搭建(DM6到DM6)

1 DMHS简介

达梦自主可控柔性替代方案关键在于达梦实时同步工具(DMHS)。DMHS是一个支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。可以在不同的关系数据库之间,完成近乎实时的数据同步功能,保证目的端数据库与源端数据库的数据一致。主要有两种功能:数据装载(copy)和数据实时同步。copy功能可以做类似DTS工具的事情,可以迁移表结构、外键约束、check约束、索引。在部署DMHS时,如果源端数据库一直运行,则需要用DMHS进行初始数据迁移。至于表结构迁移可以使用 DMHS、DTS或者直接使用脚本在目的库创建。

2 环境说明

配置环境说明:

类型IP地址DM版本DMHS版本
源端192.168.1.201isql V6.0.2.80-Build(2019.10.25)V3.1.2-Build(2018.08.27-79390trunc)_64
目的端192.168.1.202isql V6.0.2.80-Build(2019.10.25)V3.1.2-Build(2018.08.27-79390trunc)_64

端口规划:

类型管理端口(mgr_port)数据库端口(db_port)目的端数据接收端口(data_port)
源端5345123455346
目的端5345123455346

2.1 源端数据库的配置

1)开启逻辑附加日志
修改DM6中“dm.ini”中的ENABLE_LOGICAL_DML_LOG参数的值设置为1。
2)开始归档日志

2.2 DMHS安装

3)安装目录为/dmdb/dmhs,DMHS源端和目的端都需要进行安装dmhs软件。
[root@Kylin1 ]# mkdir -p /dmdb/dmhs
[root@Kylin1 ]# chmod -R 775 /dmdb/dmhs
[root@Kylin1 ]# 上传dmhs安装包dm6_kyling_dmhs0827.tar至/dmdb目录下,解压缩后利用执行码进行安装:
[root@Kylin1 ]# cd /dmdb
[root@Kylin1 dmdb]# tar –xvf dm6_kyling_dmhs0827.tar
4)修改启动HS后台脚本:
[root@Kylin1 ]# cd /dmdb/dmhs/bin
[root@Kylin1 bin]# vim dmhs_serverd
[root@Kylin1 bin]# cp /dmdb/dmhs/bin/dmhs_serverd /etc/rc.d/init.d

3 配置同步文件

3.1 DDL同步配置(源端执行)

[root@Kylin1 ]# cd /dmdb/dmhs/scripts/
**使用SYSDBA用户执行ddl_sql_dm6_v2.sql(建议使用manager客户端执行脚本),建立DDL同步的触发器和辅助表。**
**注意:有2处需要手动修改成对应数据库名,无论有多少库就要执行多少次。**

3.2 DM6源端DMHS配置文件

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
		<siteid>1</siteid>
		<mgr_port>5345</mgr_port>
		<chk_interval>3</chk_interval>
		<lang>ch</lang>
    </base>

    <cpt>
		<db_type>dm6</db_type><!-- 数据库类型,默认为dm7,限定值Oracle10g,Oracle11g,dm6,dm7 -->
		<db_server>127.0.0.1</db_server><!-- 数据库服务名或IP,默认为127.0.0.1 -->
		<db_user>SYSDBA</db_user><!-- 数据库用户名,默认为SYSDBA -->
		<db_pwd>SYSDBA</db_pwd><!-- 数据库口令,默认为SYSDBA -->
		<db_port>12345</db_port><!-- 数据库端口号,默认为12345 -->
		<db_name>SYSTEM</db_name><!-- 数据库名称 -->
		<idle_time>300</idle_time><!-- 分析线程空闲睡眠时间,默认值为300ms,最小值0ms,最大值65536ms -->
		<ddl_mask>TABLE:INDEX:TRUNCATE:CREATE:DROP:ALTER</ddl_mask><!-- 分析端DDL同步支持的对象和操作,可选项参见手册4.2.1 CPT,需要将安装脚本中对应的DDL脚本在源端执行 --><parse_thr>1</parse_thr><!-- 分析线程个数,默认为1,最小值1,最大值32,多线程分析时,不支持ALTER TABLE操作同步 -->
		<dict_dir>/dmdb/dmhs/dict/SYSTEM</dict_dir>
 	<arch>
		<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
		<clear_flag>1</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
		<bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录,如果未配置这项,则转移到归档路径的log_bak目录下 -->
	</arch>
	<send><!-- 发送模块配置 -->
		<ip>192.168.1.202</ip><!-- 目的端IP,默认127.0.0.1 -->
    	<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
		<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
		<level>0</level><!-- 复制级别,默认为0,最小值0,最大值65535 -->
		<trigger>1</trigger><!-- 是否忽略触发器,默认为0,限定值0,1 -->
		<constraint>1</constraint><!-- 是否忽略约束,默认为0,限定值0,1 -->
		<identity>0</identity><!-- 是否忽略自增列,默认为0,限定值0(不忽略,插入同步过来的值),1(忽略,插入自增列自身的值)-->
		<net_turns>0</net_turns><!-- 是否开启网闸模式,默认为0,限定值0(关闭),1(开启),网匝模式下,主机看不到备机的统计信息 -->      
		<crc_check>1</crc_check>
           <filter>
              <enable>
                  <item>*.*</item>
              </enable>
           </filter>
	</send>
    </cpt>

</dmhs>

3.3 检查DM6目的端DMHS运行环境

同源端部署dmhs软件的流程一致部署目的端dmhs软件,目的端数据库不需要开启逻辑追加日志,归档日志可选开启。通过echo $LD_LIBRARY_PATH检查目的端数据库服务器的动态库路径是否包含dm动态库路径,若没有,则执行如下命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

3.4 DM6目的端配置文件

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
		<siteid>2</siteid>
		<mgr_port>5345</mgr_port>
		<chk_interval>3</chk_interval>
		<ckpt_interval>60</ckpt_interval>
		<lang>ch</lang>
    </base>
    
	<recv><!-- 接收模块的基本配置,如果该节点只作为分析端,该节点需要删除 -->
		<data_port>5346</data_port><!-- 数据接收端口号,默认为5346,最小值1000,最大值65535 -->
		<exec><!-- 执行模块的基本配置 -->
		<db_type>dm6</db_type><!-- 数据库类型,默认为dm7,限定值Oracle10g,Oracle11g,dm6,dm7 -->
		<db_server>127.0.0.1</db_server><!-- 数据库服务名或IP -->
		<db_user>SYSDBA</db_user><!-- 数据库用户名,默认为SYSDBA -->
		<db_pwd>SYSDBA</db_pwd><!-- 数据库口令,默认为SYSDBA -->
		<db_port>12345</db_port><!-- 数据库端口号,默认为12345 -->
		<db_name>SYSTEM</db_name><!-- 默认数据库名,默认为空串(只针对dm6有用) -->
		<exec_thr>8</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 -->
		<exec_policy>2</exec_policy>
		<case_sensitive>0</case_sensitive>
		<toggle_case>0</toggle_case>
		<affect_row>0</affect_row>
		<disable_lob_interval>1800</disable_lob_interval>
		<err_msg_policy>1</err_msg_policy>
		<trx_split>1</trx_split>
		<enable_merge>1</enable_merge>
		<commit_policy>1</commit_policy>
		<commit_mode>1</commit_mode>
		<save_point_times>20</save_point_times>
	</exec>
	</recv>

</dmhs>

4 启动DMHS服务

1)首先,启动目的端服务
启动目的端DMHS进程:
[root@Kylin2 ]# cd /etc/init.d/
[root@Kylin2 init.d]# ./dmhs_serverd start
执行如下命令,开启目的端DMHS的执行模块:
[root@Kylin2 ]# cd /dmdb/dmhs/bin
[root@Kylin2 bin]# ./dmhs_console
DMHS> connect 目的端服务器IP:管理端口号
DMHS> start exec
**connect连接的是目的端DMHS服务的地址以及目的端DMHS配置文件中的管理端口号(BASE中的MGR_PORT)。**

**start exec后会在dmhs/bin目录下生成dmhs_exec.tmp文件。下次启动dmhs服务会根据该文件判断是否需要启动执行服务,如果存在该文件,则直接启动dmhs执行器;如果该文件不存在,则需要执行start exec命令启动执行器。**
2)启动源端DMHS服务
启动源端DMHS进程:
[root@Kylin1 ]# cd /etc/init.d/
[root@Kylin1 init.d]# ./dmhs_serverd start
第一次搭建DMHS时源端需要进行字典装载,然后再启动DMHS捕获模块:
[root@Kylin1 ]# cd /dmdb/dmhs/bin
[root@Kylin1 bin]# ./dmhs_console
DMHS>connect 源端服务器IP:管理端口号
DMHS>copy 0 "sch.name='SYSDBA'" CREATE|INSERT|DICT|LSN
DMHS>start cpt
**start cpt后会在dmhs/bin目录下生成dmhs_cpt.tmp文件。下次启动dmhs服务会根据该文件判断是否需要启动捕获服务,如果存在该文件,则直接启动dmhs捕获器;如果该文件不存在,则需要执行start cpt命令启动捕获器。**

**装载字典或者装载数据只能在cpt停止的时候进行,因此,hs同步过程中如果需要进行字典或者数据的装载,要先执行stop cpt后再进行copy装载。**

5 总结

DMHS是一个很神奇的同步工具,搭建部署的过程中无法正常启动,会觉得很乏味很烦躁,但是当我们成功搭建起来整个环境并实现了同步,也会从中获得喜悦和收获,所以无论是数据库还是dmhs或者公司其他的产品,都需要多动手实践。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值