2021-04-22

DMHS双向同步搭建(DM7-DM7)

达梦数据实时同步软件 DMHS 是达梦公司推出的一款支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。该产品基于成熟的关系数据模型和标准接口,跨越多种软硬件平台实现秒级数据实时同步。该产品可广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发和多业务中心等业务领域

达梦数据实时同步软件 DMHS, 通过秒级数据实时同步可以有效避免传统备份系统导致的无法完全满足企业对于信息系统不中断服务的问题;通过变化日志捕捉可以有效降低传统 ETL工具因创建触发器、影子表等对业务系统带来的性能影响;通过可读写的备机数据库系统可以解决传统备机系统仅作为后备而无法对外提供数据服务的问题。 DMHS 简易实现原理如下图所示。

一、 搭建软件准备

源端为DM7,需要申请对应操作系统的同步源为DM7的DMHS版本。目的端为DM7,需要申请对应操作系统的执行端为DM7的DMHS版本。若源端和目的端的操作系统环境相同,可以使用同一版本。

二、 环境检查

1、源端及目的端环境检查

1.1、运行用户检查

对于Windows平台,执行DMHS的用户必须是管理员身份。

对于Linux平台,执行用户必须有权限读写DMHS安装目录。

1.2、归档日志检查

在搭建DMHS前,源端数据库需要开启联机归档日志,并且打开逻辑追加日志。

通过如下命令检查DM7是否启用归档:

注:ARCH_MODE 为“Y”,表示启用归档;为“N”,表示未启用。    

通过如下命令查看DM7归档相关信息:

通过如下命令检查逻辑追加日志是否打开:

注:RLOG_APPEND_LOGIC为“1”,表示逻辑追加日志启用;为“0”表示未启用。

2、归档开启方法

2.1、如果源端数据库没有开启归档,按照如下操作开启归档:将DM7数据库配置文件“dm.ini”中的ARCH_INI参数值设置为1。在数据库数据文件目录下,增加配置文件“dmarch.ini”,设置归档类型、路径,归档文件单个大小及归档目录存放的总大小,如单个文件2G,归档目录总大小为200G,配置参数示例如下:

[ ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dbdata/dmarch

ARCH_FILE_SIZE = 2048

ARCH_SPACE_LIMIT = 204800

2.2、添加逻辑追加日志,使用如下操作进行开启:

将DM7数据库dm.ini文件中的RLOG_APPEND_LOGIC参数的值设置为1。进行上述配置调整后,重启数据库服务,使数据库调整配置生效。

2.3、DDL同步管理检查

DDL同步操作功能默认是启用的,需要在源端数据库进行开启才能使用。开启DDL同步,需要将DMHS对应DM7的SQL脚本在源端数据库进行执行,并且需要对DMHS配置文件中的DDL_MASK选项进行配置。DDL同步SQL脚本会在源端数据库的SYSDBA模式下建立相关辅助表和触发器,如图所示:

3、源端数据库是否通过HA管理

如果源端数据库是通过HA进行管理的,则配置DMHS的时候需要将整个DMHS部署到HA管理的阵列上或者将DMHS配置<DICT_DIR>中字典存放目录指定为HA管理阵列,防止切机后找不到字典等相关数据。

3.1、源端是否为主备环境

如果在主备环境上搭建DMHS,在进行数据装载的时候指定的IP必须是主机的IP,不能为备机IP。

3.2、环境变量检查

LINUX平台:echo $LD_LIBRARY_PATH

WINDOWS平台: echo %PATH%

三、DMHS软件的安装

DMHS软件的安装参照用户手册。在Windows系统下安装时,安装用户须为管理员身份;在Linux系统下安装时,安装用户须有权限读写DMHS按装目录。

装目录。

测试环境(虚拟机)

操作系统

2.6.32-642.kb5.ky3.x86_64

CPU

Intel(R) Core(TM) i7-10710U CPU @ 1.10GHz

数据库版本

V7.6.1.74-Build(2020.10.22-128627)ENT

Dmhs版本

V3.1.3-Build(2020.12.30-97131trunc)

架构

DM7单机-DM7单机

一区IP

192.168.1.5

三区IP

192.168.1.6

1、DDL语句执行

DDL句存放在dmhs/scripts目录中。

2、源端dmhs.hs配置文件

Dmhs.hs配置文件分为4部分:MGR、CPT、EXEC、NET。

MGR配置:MGR 配置在 dmhs.hs 配置文件中对应 base 元素,配置同步服务的 DMHS 服务器管理模块,如同客户端通讯的监听端口、 语言项、 站点号等。

CPT配置:CPT 模块是日志分析、数据发送模块,CPT 中配置源数据库连接相关的信息,包括连接数据库的用户名和口令。

EXEC配置:EXEC 模块用来进行数据入库的,需要配置的参数有数据库连接信息、事务缓存信息以及事务入库的方式等。

NET配置:NET 模块在同步中承担节点之间数据的收发任务, CPT 模块需要通过它来发送数据,EXEC 模块则需要通过它来接收数据。NET 模块还具有消息转发和消息路由的功能。

注:DMHS_TRXID_TABLE表不可以过滤掉,双向死循环多数是由于 DMHS_TRXID_TABLE 表的字典没有装载导致的,防止出现双向死循环,注意先把两个节点的 EXEC 模块起动,然后在两个节点上装载字典,这样子可以保证 EXEC模块初始化建的辅助表DMHS_TRXID_TABLE的字典能够被装载。

3、源端配置文件

<?xml version="1.0" encoding="GB2312" standalone="no"?>

<dmhs>

    <base>

        <lang>en</lang>

        <mgr_port>5345</mgr_port>

        <chk_interval>3</chk_interval>

        <ckpt_interval>60</ckpt_interval>

        <siteid>1</siteid>

        <group>0</group><!—主备机需修改参数为1-- >

    </base>

    <recv>

        <data_port>5346</data_port>

        <exec>

            <db_type>DM7</db_type>

            <db_server>127.0.0.1</db_server><!--主备机需按照etc/dm_svc.conf中数据别名配置-- >

            <db_user>SYSDBA</db_user>

            <db_pwd>SYSDBA</db_pwd>

            <db_port>5236</db_port>

            <level>0</level>

            <exec_thr>4</exec_thr>

            <exec_sql>1024</exec_sql>

            <exec_trx>5000</exec_trx>

            <exec_rows>250</exec_rows>

            <case_sensitive>1</case_sensitive>

            <toggle_case>0</toggle_case>

            <exec_policy>2</exec_policy>

            <commit_policy>1</commit_policy>

            <enable_merge>1</enable_merge>

            <affect_row>0</affect_row>

        </exec>

    </recv>

<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>1</clear_flag>

        </arch>

        <send>

            <ip>隔离IP</ip>

            <mgr_port>5345</mgr_port>

            <data_port>5346</data_port>

<--双隔离添加:

            <standby>

                <ip>隔离IP</ip>

                <mgr_port>5345</mgr_port>

                <data_port>5346</data_port>

            </standby>

-->

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

 <!-- 配置过滤时,支持使用*号模糊匹配,例如: -->                                       <!-- <item>SYS*.*</item> 所有模式名为sys打头的表允许同步-->         

 <!-- <item>SYSDBA.S*</item> 模式SYSDBA下以S打头的表才允许同步-->                                            

 <!-- <item>SYSDBA.TEST</item> 模式SYSDBA下表TEST才允许同步-->                 

  <item>EMS.*</item>

                </enable>

                <disable/>

            </filter>

            <map>

            </map>

        </send>

    </cpt>

</dmhs>

4、目的端配置

<?xml version="1.0" encoding="GB2312" standalone="no"?>

<dmhs>

    <base>

        <lang>en</lang>

        <mgr_port>5345</mgr_port>

        <chk_interval>3</chk_interval>

        <ckpt_interval>60</ckpt_interval>

        <siteid>2</siteid>

        <group>0</group>

    </base>

    <recv>

        <data_port>5346</data_port>

        <exec>

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

            <level>0</level>

            <exec_thr>4</exec_thr>

            <exec_sql>1024</exec_sql>

            <exec_trx>5000</exec_trx>

            <exec_rows>250</exec_rows>

            <case_sensitive>1</case_sensitive>

            <toggle_case>0</toggle_case>

            <exec_policy>2</exec_policy>

            <commit_policy>1</commit_policy>

            <enable_merge>1</enable_merge>

            <affect_row>0</affect_row>

        </exec>

    </recv>

    <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>1</clear_flag>

        </arch>

        <send>

            <ip>隔离IP</ip>

            <mgr_port>5345</mgr_port>

            <data_port>5346</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>SYSDBA.DMHS_TRXID_TABLE</item>

                </enable>

                <disable/>

            </filter>

            <map>

            </map>

        </send>

    </cpt>

</dmhs>

四、启动DMHS服务及数据装载

1、数据装载

检查DMHS安装目录下是否存在dmhs_cpt.tmp文件,如果存在则将该文件删除

1、1、启动两端dmhs服务:

cd /home/dmdba/dm/dmhs/bin 

./dmhs_serverd start 

1.2、 启动两端执行服务

此处一定要用exec和cpt分别启动,不能用start命令,start命令不接cpt或exec默认根据配置文件即会启动cpt也会启动exec

1.3、同步数据装载

将有数据的一端将数据装载到另外一端 (测试:192.168.1.5上执行)

装载完成后在另外一端需要装载字典(测试:192.168.1.6上执行)

1.4、启动两端的cpt服务

五、同步测试

1、一区数据库创建表插入数据

2、三区端数据库查看数据

返回结果数据为1条,则同步正常。

3、三区数据库插入数据

4、一区端数据库查看数据

返回结果数据为2条,则同步正常。

六、总结

通过DMHS双向同步的搭建,可以让用户在主、备环境之间灵活的切换,轻松实现异地双活,实现主、备环境之间的数据一致,降低用户的项目建设成本。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值