DMHS搭建之实时主备到DM8

在这里插入图片描述

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

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

图像化搭建可参考这篇博客教程:https://blog.csdn.net/Pipipipiyu/article/details/119965355

1、系统组成

在这里插入图片描述

DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行 。

(1) 捕获模块(CPT)
对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。

CPT 日志分析模块通常还需要结合数据字典信息才能正确的解析同步数据,因此在启动日志分析模块时,首先要进行数据字典装载操作,生成同步表的字典目录,保存完字典信息后才能启动日志捕获分析模块。

(2)装载模块(LOAD)

DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。表字典装载将所有同步表的数据字典信息从源库中抽取出来,保存为本地的数据字典文件,用于数据同步过程中提供准确表定义信息。数据初始装载用于将源端数据库的初始数据同步至目标数据库,使得源库和目标库的初始数据保持一致 。

  • 数据初始装载的有两种方式:直接的数据装载方式和备份文件装载方式

    1. 直接的数据装载方式基于源数据库数据的直接查询抽取装载;
    2. 备份文件装载方式则是基于数据库自身的数据备份还原,将源库初始数据备份后在目标库进行还原达到初始数据一致。

    注:备份文件装载方式要求源库和目标库为同一类型的数据库系统

  • 初始装载使用 LOAD/COPY 控制台命令

    初始装载模块不能跟日志分析模块同时运行,在执行 COPY 命令时,必须首先使用 STOP CPT 命令停止日志捕获分析模块的运行。

(3)传输模块(NET)

除了作为 CPT 模块和 EXEC 模块的传输媒介外,NET 模块还能够单独实现转发和路由功能,

  1. NET 消息发送子模块

    经过 CPT 捕获到的日志操作,在这里进行分发,分发前可以对操作进行过滤,或者对表进行过滤和映射,还可以对消息中的列进行映射(改名、剔除和函数计算)。经过处理的消息通过网络(TCP/IP)发送给下一级,或者保存到本地文件。

  2. NET 消息接收子模块

    经上一级 NET 消息发送子模块通过网络传输的消息,在这里由 NET 消息接收子模块通过网络(TCP/IP)接收并发送给 EXEC 模块。

(4)执行模块(EXEC)

DMHS 目标端通过 NET 模块接收源端发送过来的日志消息,然后把这些消息按事务分类,如果某个事务上收到了提交消息,则通过 SQL 逆向生成的技术构造还原相应的事务 SQL语句,使用 ODBC 驱动接口对这些数据进行入库执行,完成数据同步;如果某个事务在源端回滚,则直接丢弃不执行 。

EXEC 模块使用多线程并行执行的方式,对多个提交事务同时进行入库执行

2、系统架构
  • 采用并行处理体系,能够实时捕捉主机源数据库变化日志,以较低的资源占用实现大批量的数据实时同步。
  • 在源端,DMHS 采用优化的日志扫描算法实现目标数据的快速抽取;
  • 在目的端,DMHS 使用数据库本地 ODBC 接口访问备机数据库系统。
  • 传输过程中,DMHS 可直接通过 TCP/IP 进行网络传输,无需依赖于数据库自身的传递方式。
  • DMHS 还提供基于WEB的管理工具,提供远程管理支持。

在这里插入图片描述

3、功能

细分DMHS功能可以将DMHS提供的功能可以细分为捕获器功能、执行器功能、路由器功能、转发器功能。

(1)捕获器

捕获器将源端数据库日志读取解析后发送出去,它必须与源端数据库在同一台机器上。捕获器由 MGR 模块、CPT 模块、NET 发送子模块组成,XML 配置文件中对应元素为 base、cpt、send。NET 发送子模块不能单独存在,必须由 CPT 模块调用;在 XML 配置文件中也是一样的,send 元素为 cpt 元素的子元素。

捕获器中包含日志分析模块 CPT,由于日志分析需要用到数据库中的表信息,所以捕获器在首次启动时,要进行初始化加载需要同步的表的字典信息,把这些信息存放到本地。即使源数据库中断了服务,也不会影响日志分析。因此需要在捕获器中配置源数据库连接相关的信息,包括连接数据库的用户名和口令。

(2)执行器

执行器将接收到的数据入库执行,它可以与目标端数据库处于不同机器。执行器由 MGR模块、EXEC 模块、NET 接收子模块组成,XML 配置文件中对应元素为 base、exec、recv。NET 接收子模块不能单独存在,必须由 EXEC 模块调用;在 XML 配置文件中也是一样的,recv 元素为 exec 元素的子元素。 执行器中的主要模块 EXEC 模块,主要用来进行数据入库,为了兼容大多数的数据库,它采用了标准的 ODBC 驱动接口和符合 SQL92 标准的 SQL 语句来访问数据库。此处需要配置的参数有数据库连接信息、事务缓存信息以及事务入库的方式等。数据入库往往是DMHS 数据同步的性能瓶颈所在,所以这块参数配置非常的重要,需要结合实际的运行环境,源端应用事务的特点来针对性的配置,实现入库性能的最大化。

(3)路由器

路由器一般配置在第三台机器上,对捕获器中 CPT 模块和执行器中的 EXEC 模块进行映射,从而实现跨网关同步,并且一个路由服务可以实现 N 对 N 的映射。路由器由 MGR模块、NET 接收子模块、NET 发送子模块组成,XML 配置文件中对应元素为 base、route、recv、send。NET 接收子模块和 NET 发送子模块由 MGR 模块调度,从而实现路由功能;在XML 配置文件中 recv 元素和 send 元素均为 route 元素的子元素。 路由器适用在捕获器和执行器被网关隔断的环境,捕获器中的 CPT 模块和执行器中的EXEC 模块无法通过 NET(捕获器的 NET 发送子模块及执行器的 NET 接收子模块)实现网络直连,需要经过第三台机器中转的情况。

(4)转发器

转发器将接收到的数据通过网络进行转发或是直接落地成本地文件。网络转发可以实现异步的一对多的需求,而落地成本地文件可以实现 FTP 的同步模式或者穿透网闸的需求。转发器由 MGR 模块、NET 接收子模块、NET 发送子模块组成,XML 配置文件中对应元素为 base、transfer、recv、send。NET 接收子模块和 NET 发送子模块由 MGR 模块调度,从而实现转发功能;在 XML 配置文件中 recv 元素和 send 元素均为 transfer 元素的子元素。
转发器适用在一个捕获器需要对应多个执行器的环境,或者捕获器和执行器之间存在物理隔离网闸,无法通过网络直连需要通过文件中转的情况。 转发和路由的不同在于,路由是 N 对 N 网络链路的映射,它不能对链路中的数据进行修改,而转发功能则可以针对每个下一级配置不同的过滤和映射。

4、系统部分特性

(1)支持多种数据库同步

支持异构数据库(如 DM、MySQL、PostgreSQL、SQL Server、DB2、ORACLE)之间的数据同步,也支持上述数据库的数据向消息中间件(如 HIVE、KAFKA)或 DMETL 流转。

(2)体系结构高可扩展

可以根据用户需求采用非常灵活的方式配置出各种拓扑结构,包括一对一同步、一对多广播型同步、多对一聚合型同步、多对多同步以及级联同步等多种数据同步形式,满足用户的各种复杂数据同步需求。

(3)对业务系统无影响

采用基于日志的结构化数据同步技术,实时数据同步不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响。

(4)多重数据传输保障

DMHS 的数据复制严格按照事务顺序,支持断点续传、数据校验,确保数据的完整性、一致性。

5、搭建(实时主备——>DM8)
5.1 准备工作
1、环境准备
  • DMHS 支持的操作系统平台: Windows 系列(包括 XP、 Win2003、 Win7/8/10、WinServer2008 等), Linux(Redhat、 Ubuntu、 CentOS、 Kylin、 Rocky 等)、 Aix、 Solaris 等。

  • 内存要求: DMHS 需要的内存总量取决于执行的分析线程以及执行线程的并发数,最少需要 1G 内存。

  • 磁盘需求: DMHS 安装文件占用 277M,包括了管理工具以及管理界面占用的空间,另外需要一些额外的空间存储 DMHS 运行的日志文件。

  • 操作系统权限:在 Windows 安装时,安装和执行 DMHS 的用户必须是管理员身份;在 Linux 平台下安装,安装用户必须有权限读写 DMHS 安装目录,将涉及的数据库接口动态库添加到系统共享库环境变量中。

  • TCP/IP:配置系统支持 TCP/IP 服务(DMHS 安装的所有机器必须配置主机名或者 IP地址)。 DMHS 需要使用以下 TCP/IP 端口:管理进程间通信的默认端口 5345;发送和执行子系统之间通信的默认端口 5346;用户可以自行定义这些端口。

1、实时主备搭建

在配置 DMHS 同步之前,需要安装完成相应的 DM8 数据库,包括 DM8 单机以及 DM8集群环境。本次实验搭建DM8实时主备环境,详细的·搭建教程详见博客:https://blog.csdn.net/qq_44619675/article/details/126032148

2、DMHS软件安装

在主备机和执行端安装DMHS软件。

5.2 执行端配置
1、配置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>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5237</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>
2、开启执行DMHS服务

作为系统服务启动,在dmhs_serverd配置完成的情况下,可以使用如下命令启动:

  • 方式一
./dmhs_serverd start
  • 方式二

    进入DMHS安装程序的bin目录文件夹,执行如下命令:

./dmhs_server dmhs.hs

注:在DMHS搭建过程中,目的端都会是优先启动并执行start exec。

5.3 实时主备配置

每个主机节点都单独配置一套DMHS服务,这样每个节点类似于单机。

1、开启归档和逻辑日志

(1)设置归档标记和逻辑日志标记。打开DM8服务器配置文件“dm.ini”,设置如下值:

ARCH_INI=1

RLOG_APPEND_LOGIC=1

注:dm.ini配置参数中"FAST_COMMIT"必须为0,否则会导致逻辑日志不全而影响同步。

FAST_COMMIT 默认值为0——控制批量日志刷盘,超过设定值次的刷盘请求后再触发刷盘。0表示每次刷盘请求都会触发刷盘。

(2)重启DM8数据库,使配置参数生效

  • 方式一

    进入DM8安装目录的bin目录下,执行:

    ./DmServiceSERVER restart
    
  • 方式二

    切换至root用户下,执行:

    systemctl restart DmServiceSERVER.service
    

(3)验证配置的正确性

① 检查归档配置的正确性,执行以下SQL命令:

SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL'AND ARCH_IS_VALID='Y';

查询结果若是有前面配置的归档文件,则表示是正确的。

② 检查逻辑日志配置的正确性,执行以下SQL命令:

SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';

查询结果PARA_VALUE的值若是为1则表示逻辑日志参数配置成功。

③ 检查在线日志,执行以下SQL命令:

SELECT PATH FROM SYS.V$RLOGFILE;

查询结果若是为src_db01.log 和src_db02.log则表示在线日志正常。

④ 检查 FAST_COMMIT 参数是否为 0 ,执行以下SQL命令:

select para_value from v$dm_ini where para_name = 'FAST_COMMIT';

查询的值若是为 0 表示正常 。

2、配置DDL(辅助表方式)

如果要求 DDL 同步,那么需要创建 DDL 触发器和辅助表。创建的脚本参见 DMHS 安装目录下 scripts 子目录中“ddl_sql_dm8.sql”。注意创建时需要使用 SYSDBA 用户。

  • 检查创建的触发器和辅助表是否有效,检查辅助表的语句:
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';
3、配置dm_svc.conf

dm_svc.conf 是 DM8 的配置文件之一,用于配置和客户端相关的参数 。

在主机和备机所在节点上修改/etc/dm_svc.conf,添加:

SERVER=(192.168.217.133:5236,192.168.217.131:5236)
4、配置dmhs.hs

主备同步的配置需要添加标签1,目的端为主备时同单机 DM8 。

(1)一般主机源端的配置如下:

在dmhs安装目录的bin目录下创建dmhs.hs配置文件。

vi /安装目录/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>  <!--设置中文容易出现乱码问题-->
<version>2.0</version>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>2</siteid>
<group>1</group>
</base>
<cpt>
<name>cpt</name>
<enable>1</enable>
<db_type>DM8</db_type>
<db_server>SERVER</db_server> <!--数据库服务名-->
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>32141</db_port>
<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>223.254.17.109</ip>
<mgr_port>5445</mgr_port>
<data_port>5446</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>
</dmhs>

(2)备机源端的配置如下:

在安装目录的bin目录下,创建dmhs.hs配置文件:

vi /安装目录/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<version>2.0</version>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>2</siteid>
<group>1</group>
</base>
<cpt>
<name>cpt</name>
<enable>1</enable>
<db_type>DM8</db_type>
<db_server>HSDM8</db_server> <!--数据库服务名-->
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>32141</db_port>
<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>223.254.17.109</ip>
<mgr_port>5445</mgr_port>
<data_port>5446</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>
</dmhs>
5、初始装载

初始装载是将源端数据库中的初始数据装载到目的端数据库,使 DMHS 同步的时刻源和目的端的同步表数据一致。

装载前源端 DMHS 服务和目的端 DMHS 服务都需要开启。

(1)开启目的端DMHS服务

进入到安装目录的bin目录中,执行以下命令:

./dmhs_server dmhs.hs

(2)开启主、备机源端DMHS服务

./dmhs_server dmhs.hs

(3)start 目的端DMHS

//进入到安装目录的tool目录下,执行:
./dmhs_console

//启动之后输入:
DMHS>connect 192.168.217.131:5345

(4)start源端DMHS

./dmhs_console

DMHS>connect 192.168.217.133:5345

(5)目的端执行

DMHS>start exec

(4)采主机进行初始装载,在源端执行:

DMHS>copy 0 "sch.name='SYSDBA'" DICT|LSN|CREATE|INSERT|INDEX

该命令解释在《DMHS管理员手册》中8.3.1 捕获器启动前置条件 处详细解释

6、开启同步

初始装载完成后,则可以开启同步。

(1)先开启备机同步

./dmhs_console

DMHS>start

(2)再开启主机同步

./dmhs_console

DMHS>start
  • DMHS DM8 主备搭建过程中,需要注意初始装载之后保证源库和目的库的 待同步的表数据一致,这样才可以开启 DMHS 同步,否则会导致数据同步失败。
  • 主备启动顺序: 主机 copy, 备机 start cpt, 然后主机 start cpt。
  • 一主多备:主机 copy, 再启动备机 cpt(多备机不分先后), 最后启动主机 cpt。
5.4 测试
  • 创建DMDBA.TEST,在192.168.217.131(源端)中创建模式DMDBA,创建TEST表:
CREATE TABLE DMDBA.TEST(id int,name varchar(10));

INSERT INTO DMDBA.TSET VALUES(1,xxx);

  • 然后再192.168.217.133(目的端)登录,查询刚才源端建的表:
SELECT * FROM DMDBA.TEST;

查询结果正确则意味搭建成功。

6、常见错误
6.1 启动目的端时报错

在这里插入图片描述

解决方法 :该报错是找不到依赖的路径文件,找到缺少的文件,复制到dmhs安装下的bin目录

在dmdba用户下寻找,发现有个路径文件找不到

ldd libdmhs_exec.so

在这里插入图片描述

切换用户到root用户下在根目录下用ldd命令寻找:find -name (要找的文件名)

find -name libdmoci.so

找到之后复制到安装dmhs的bin路径下

cp /上面找的的路径  /dmhs安装目录/bin/libdmoci.so

复制之后重新查看依赖:

ldd libdmhs_exec.so

再次启动dmhs,启动成功。

6.2 启动目的端或者源端报错,加上路径仍报错

若是按照上面添加依赖之后仍然报找不到文件的错,则可能是dmoci文件是有问题的,需要更新现有依赖文件,导入之后重启即可成功登录。

6.3 初次装载,加载日志文件失败

解决方法:检查dmhs.hs文件,修改里面ip,端口号等配置,防止出现冲突。

6.4 创建SOCKET连接失败,连接不上数据库

解决方法:找到dmhs配置的数据库,开启即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值