达梦数据实时同步软件(以下简称 DMHS)是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术,不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响,能以极少的系统开销实现秒级数据实时同步复制。
DMHS 基于成熟的关系数据模型和标准接口,支持多种软硬件平台,能够灵活的配置出一对一、一对多、多对一、多对多以及级联等多种形式的复制拓扑结构,可以广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发、多业务中心等业务领域。
DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行。
捕获模块(CPT)
对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。
装载模块(LOAD)
DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。数据初始装载的有两种方式:直接的数据装载方式和备份文件装载方式。目前 DMHS 仅支持 DM 数据库的备份文件装载方式。
传输模块(NET)
源端:
192.168.25.101 CentOS 7.6 DSC集群节点1
192.168.25.102 CentOS 7.6 DSC集群节点2
目标端
192.168.25.11 Kylin V10 DW集群节点1
192.168.25.12 Kylin V10 DW集群节点2
源端和目标端都是DM8,DMHS版本使用dmhs_V4.3.34_dm8_rev178851_rh6_64_20241227_sp10.bin
只在节点1安装
[root@dsc1 ~]# mkdir /dm/dmhs
[root@dsc1 ~]# chown dmdba. /dm/dmhs/
[root@dsc1 ~]# su - dmdba
[dmdba@dsc1 ~]$ ./dmhs_V4.3.34_dm8_rev178851_rh6_64_20241227_sp10.bin -i
Extract install files..........
1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:499 MB
安装目录: [/home/dmdba/dmhs]/dm/dmhs
该路径不为空,是否继续安装?[Y or N]y
安装路径可能存在覆盖安装
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
hsca start ... hsca finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.122.1](192.168.122.1,10.10.10.1,192.168.25.101):192.168.25.101
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[]:
输入有误,请重新输入!
内置数据库IP[]:192.168.25.101
内置数据库端口[15236](1000-65535):
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:/dm/dmdbms/bin:/usr/local/lib
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/dm/dmhs/log/install.log
主备节点都要安装
[root@dw1 ~]# mkdir /opt/dmhs
[root@dw1 ~]# chown dmdba. /opt/dmhs/
[root@dw1 ~]# su - dmdba
[dmdba@dw1 ~]$ ./dmhs_V4.3.34_dm8_rev178851_rh6_64_20241227_sp10.bin -i
Extract install files..........
1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:499 MB
安装目录: [/home/dmdba/dmhs]/opt/dmhs
该路径不为空,是否继续安装?[Y or N]y
安装路径可能存在覆盖安装
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
hsca start ... hsca finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.25.11](192.168.25.11):
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[]:
输入有误,请重新输入!
内置数据库IP[]:192.168.25.11
内置数据库端口[15236](1000-65535):
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:/opt/dmdbms/bin:/usr/local/lib
远程控制服务
1.自动
2.手动
启动方式:[2.手动]
正在创建远程控制服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/opt/dmhs/log/install.log
DSC集群服务器上,DMHS安装目录是/dm/dmhs,数据库依赖库路径是/dm/dmdbms/bin:/dm/dmhs/bin
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=128, SPACE_LIMIT=20480';
ALTER DATABASE OPEN;
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
SELECT PATH FROM SYS.V$RLOGFILE;
select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
源端执行
disql执行ddl_sql_dm8.sql提示“输入 0X00000001的值:”
需要关闭变量定义提示
如果执行失败,需要先删除触发器,再删除表
[dmdba@dsc1 bin]$ ./disql SYSDBA/SYSDBA
SQL> set define off
SQL> `/dm/dmhs/scripts/ddl_sql_dm8.sql
检查创建的辅助表和触发器是否有效
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
如果存在以下的查询结果,表示 DMHS 辅助表和触发器创建有效。
DSC的2个节点配置如下
DM8DSC=(192.168.25.101:5236,192.168.25.102:5236)
DW的2个节点配置如下
DM8DW=(192.168.25.11:5236,192.168.25.12:5236)
只在节点1配置
[dmdba@dsc1 ~]$ vi /dm/dmhs/bin/dmhs.hs
<?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>4.3</version>
</base>
<cpt>
<enable>1</enable>
<name>cpt</name>
<db_type>DSC</db_type>
<db_server>DM8DSC</db_server>
<db_port>5236</db_port>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<char_code>PG_UTF8</char_code>
<ddl_mask>OBJECT:OPERATION</ddl_mask> <!--DDL配置项-->
<arch> <!--归档清理配置项-->
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<dm8_rac>
<nodes>2</nodes> <!--RAC节点数-->
<rac_type>1</rac_type>
<db_server>10.10.10.1</db_server> <!--ASM服务的IP地址-->
<db_port>11276</db_port> <!--ASM服务的端口号-->
<db_user>default</db_user>
<db_pwd>default</db_pwd>
<epoch>3</epoch>
<dir_replace> <!--归档文件路径替换配置-->
<item>0#+DMARCH/ARCH/DSC0/arch</item> <!--格式:节点线程编号#本节点路径-->
<item>1#+DMARCH/ARCH/DSC1/arch</item>
</dir_replace>
</dm8_rac>
<send> <!--发送模块配置-->
<ip>192.168.25.11</ip> <!--执行端IP-->
<mgr_port>5345</mgr_port> <!--执行端mgr_port-->
<data_port>5346</data_port> <!--执行端data_port-->
<standby>
<item>
<ip>192.168.25.12</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
</item>
</standby>
<filter> <!--过滤配置项-->
<enable> <!--白名单,所有允许同步的表-->
<item>SYSDBA.*</item>
</enable>
<disable/>
</filter>
<map> <!--映射配置项-->
<item>SYSDBA.*== SYSDBA.*</item>
</map>
</send>
</cpt>
</dmhs>
主备节点都要配置
[dmdba@dw1 ~]$ vi /opt/dmhs/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<group>1</group>
<version>4.3</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>DM8DW</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>
<exec_rows>1000</exec_rows>
</exec>
</dmhs>
主备节点都要执行
[dmdba@dw1 ~]$ cd /opt/dmhs/bin
[dmdba@dw1 bin]$ ./dmhs_console
DMHS console tool: V4.3.34-Build(2024.12.27-178851trunc)_D64_2410_sp10
Copyright (c) 2020, DMHS. All rights reserved.
Type ? or "help" for help, type "quit" to quit console.
Connected to DMHS: 127.0.0.1:5345
execute success
Dameng HS Server V4.3.34-Build(2024.12.27-178851trunc)_D64_2410_sp10
DMHS> start exec
execute success
只在节点1执行
前台启动DMHS服务
[dmdba@dsc1 ~]$ cd /dm/dmhs/bin
[dmdba@dsc1 bin]$ ./dmhs_server /dm/dmhs/bin/dmhs.hs
MGR[INFO]: DMHS start up, current version: V4.3.34-Build(2024.12.27-178851trunc)_D64_2410_sp10 (The beta)(Enterprise Edition)
MGR[WARN]: License will expire on 2025-03-27
MGR[INFO]: load config file successful,site no:1, manager port :5345, poll interval:3, max mem size:64(GB)
MGR[INFO]: manager listening port:5345
执行装载
[dmdba@dsc1 ~]$ cd /dm/dmhs/bin
[dmdba@dsc1 bin]$ ./dmhs_console
DMHS console tool: V4.3.34-Build(2024.12.27-178851trunc)_D64_2410_sp10
Copyright (c) 2020, DMHS. All rights reserved.
Type ? or "help" for help, type "quit" to quit console.
Connected to DMHS: 127.0.0.1:5345
execute success
Dameng HS Server V4.3.34-Build(2024.12.27-178851trunc)_D64_2410_sp10
DMHS> clear exec lsn
execute success
DMHS> copy 0 "sch.name='SYSDBA'" DICT|LSN|CREATE|INSERT|INDEX
CSL[WARN]: Detect the LSN mask, the mask will be ignored in the log is less than the current LSN all operations, please confirm whether to continue?(Y/N)
y
copy mask is : |CREATE|INSERT|INDEX|TABLE|DICT|LSN|PARTITION|OBJID|REP
execute finish, please look up log file of exec module to check data load result
CLEAR EXEC LSN: 表示清理所有 CPT 对应的目标端事务表,且设置日志起始 LSN
为当前源端数据库的最大 LSN
启动opt模块
DMHS> start cpt
源端只在节点1执行
[root@dsc1 ~]# /dm/dmhs/scripts/root/dmhs_service_installer.sh -t dmhs_server -x /dm/dmhs/bin/dmhs.hs -d /dm/dmhs/bin -p HS
[dmdba@dsc1 ~]$ cd /dm/dmhs/bin
[dmdba@dsc1 bin]$ ./DmhsServiceHS start
Starting DmhsServiceHS: [ OK ]
目标端主备节点都要执行
[root@dw1 ~]# /opt/dmhs/scripts/root/dmhs_service_installer.sh -t dmhs_server -x /opt/dmhs/bin/dmhs.hs -d /opt/dmhs/bin -p HS
[root@dw1 ~]# cd /opt/dmhs/bin/
[dmdba@dw1 bin]$ ./DmhsServiceHS start
Starting DmhsServiceHS: [ OK ]
测试1
在源端dsc节点1、节点2上分别插入数据,目标端主备上数据查询正常
测试2
目标端主备执行switchover操作,在源端dsc节点1、节点2上分别插入数据,目标端主备上数据查询正常
报错1:DMHS显示乱码
解决方案:
修改dmhs.hs的配置文件,将
报错2:缺少libdmoci.so动态库
目标端启动exec时模块报错
MGR[ERROR]: lib libdmhs_exec.so can not found,error code 0, libdmoci.so: cannot open shared object file: No such file or directory
MGR[ERROR]: log exec start fail
源端装载数据时报错
MGR[ERROR]: lib libcpt_dsc.so can not found,error code 0, errmsg:libdmoci.so: cannot open shared object file: No such file or directory
解决方案:
[dmdba@dw1 ~]$ cp -f /opt/dmhs/bin/stat/libdmoci.so /opt/dmhs/bin/
[dmdba@dsc1 ~]$ cp -f /dm/dmhs/bin/stat/libdmoci.so /dm/dmhs/bin/
拷贝库文件后重新启动DMHS服务
报错3:关于官方手册
在最新版本的DMHS官方手册中
《数据实时同步系统搭建手册-DM7》中提示
DMHS DM7 DSC 的配置和 DM7 单机相比多了一个“dm7_rac”配置项。DMHS DM7 DSC 的搭建和 DM7 单机是类似的,不同点主要体现在配置多个节点的归档和逻辑日志。
《数据实时同步系统搭建手册-DM8》中提示
DMHS DM8 DSC 的配置和 DM8 单机相比多了一个“dm8_rac”配置项,可以配置为单节点方式,但更建议配置为类似主备节点的模式。
文档中提供了两节点DSC集群dmhs.hs配置文件的不完整示例,同时省略了初始加载和同步启动的相关步骤。
在对dsc集群的两个节点进行测试,并在这两个节点上部署DMHS时,尽管第二个节点的CPT模块启动显示成功,但目标端日志中仍出现错误信息。经进一步确认,第二个节点的CPT模块实际上并未成功注册。
2025-01-18 00:09:57 REV[INFO]: the receiver thread for 192.168.25.102:5345 (1) register fail.
在目标端配置DDL,详细参见 2.4
只在节点1配置
[dmdba@dsc1 ~]$ vi /dm/dmhs/bin/dmhs.hs
<?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>4.3</version>
</base>
<cpt>
<enable>1</enable>
<name>cpt</name>
<db_type>DSC</db_type>
<db_server>DM8DSC</db_server>
<db_port>5236</db_port>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<char_code>PG_UTF8</char_code>
<ddl_mask>OBJECT:OPERATION</ddl_mask> <!--DDL配置项-->
<arch> <!--归档清理配置项-->
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<dm8_rac>
<nodes>2</nodes> <!--RAC节点数-->
<rac_type>1</rac_type>
<db_server>10.10.10.1</db_server> <!--ASM服务的IP地址-->
<db_port>11276</db_port> <!--ASM服务的端口号-->
<db_user>default</db_user>
<db_pwd>default</db_pwd>
<epoch>3</epoch>
<dir_replace> <!--归档文件路径替换配置-->
<item>0#+DMARCH/ARCH/DSC0/arch</item> <!--格式:节点线程编号#本节点路径-->
<item>1#+DMARCH/ARCH/DSC1/arch</item>
</dir_replace>
</dm8_rac>
<send> <!--发送模块配置-->
<ip>192.168.25.11</ip> <!--执行端IP-->
<mgr_port>5345</mgr_port> <!--执行端mgr_port-->
<data_port>5346</data_port> <!--执行端data_port-->
<standby>
<item>
<ip>192.168.25.12</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
</item>
</standby>
<filter> <!--过滤配置项-->
<enable> <!--白名单,所有允许同步的表-->
<item>SYSDBA.*</item>
</enable>
<disable/>
</filter>
<map> <!--映射配置项-->
<item>SYSDBA.*== SYSDBA.*</item>
</map>
</send>
</cpt>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>DM8DSC</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<level>0</level>
<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>
主备节点都要配置
[dmdba@dw1 ~]$ vi /opt/dmhs/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<group>1</group>
<version>4.3</version>
</base>
<cpt>
<name>cpt</name>
<enable>1</enable>
<db_type>DM8</db_type>
<db_server>DM8DW</db_server> <!--数据库服务名-->
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<char_code>PG_UTF8</char_code>
<idle_time>300</idle_time>
<ddl_mask>obj:op</ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>192.168.25.101</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<trigger>1</trigger>
<compress>1</compress>
<constraint>1</constraint>
<identity>1</identity>
<net_turns>0</net_turns>
<filter>
<enable>
<item>SYSDBA.*</item>
</enable>
</filter>
<map>
<item>SYSDBA.*==SYSDBA.*</item>
</map>
</send>
</cpt>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>DM8DW</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<level>0</level>
<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>
源端节点1和目标端主备节点都要执行
[dmdba@dsc1 bin]$ ./DmhsServiceHS restart
只在节点1执行
[dmdba@dw1 ~]$ cd /opt/dmhs/bin
[dmdba@dw1 bin]$ ./dmhs_console
DMHS> start exec
execute success
只在主库执行
[dmdba@dw1 bin]$ ./dmhs_console
DMHS console tool: V4.3.34-Build(2024.12.27-178851trunc)_D64_2410_sp10
Copyright (c) 2020, DMHS. All rights reserved.
Type ? or "help" for help, type "quit" to quit console.
Connected to DMHS: 127.0.0.1:5345
execute success
Dameng HS Server V4.3.34-Build(2024.12.27-178851trunc)_D64_2410_sp10
DMHS> clear exec lsn
execute success
DMHS> copy 0 "sch.name='SYSDBA'" DICT
copy mask is : |DICT|PARTITION|REP
execute finish, please look up log file of exec module to check data load result
启动opt模块
主备节点都要执行
DMHS> start cpt
测试1
在目标端主库上插入数据,源端dsc集群2个节点数据查询正常
测试2
目标端主备执行switchover操作,在新主库上插入数据,源端dsc集群2个节点数据查询正常
文章
阅读量
获赞