达梦DM8主从复制配置实战

概述

达梦数据复制(DATA REPLICATION)是一个分担系统访问压力、加快异地访问响应速度、提高数据可靠性的解决方案。将一个服务器实例上的数据变更复制到另外的服务器实例。可以用于解决大、中型应用中出现的因来自不同地域、不同部门、不同类型的数据访问请求导致数据库服务器超负荷运行、网络阻塞、远程用户的数据响应迟缓的问题。

说明

搭建达梦DM8主从复制需要至少三台服务器(主服务器从服务器复制服务器(RPS))。
主服务器为发起复制操作的服务器,从服务器为接收主服务器发送的数据并进行复制的服务器。复制服务器(RPS)在数据复制环境中,负责配置复制环境,定义复制关系的服务器。RPS 有且仅有一台,它只负责配置和监控,并不参与到复制过程中。

准备工作

参与复制的实例信息:

服务器 实例名 IP 地址 服务器端口号 MAL 端口号 文件目录
复制服务器 TESTA 172.16.143.102 5236 5241 E:\server\dmdbms\data\TEST
主服务器 TESTB 172.16.143.103 5236 5242 /www/dm8/data/TEST/arch
从服务器 TESTC 172.16.143.104 5236 5243 /www/dm8/data/TEST/arch

参数设置

配置dm.ini

配置dm.ini,分别修改dm.ini中对应项如下表所示。

服务器 dm.ini 设置
复制服务器 INSTANCE_NAME = TESTA
PORT_NUM = 5236
MAL_INI = 1
主服务器 INSTANCE_NAME = TESTB
PORT_NUM = 5236
MAL_INI = 1
从服务器 INSTANCE_NAME = TESTC
PORT_NUM = 5236
MAL_INI = 1

配置dmmal.ini

在数据库文件目录,找到dmmal_example.ini,复制一份为dmmal.ini
在文件末尾添加内容:

MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME       =   TESTA
MAL_HOST        =   172.16.143.102
MAL_PORT        =   5241
MAL_INST_PORT       =   5236
MAL_INST_HOST       =   172.16.143.102

[MAL_INST2]
MAL_INST_NAME       =   TESTB
MAL_HOST        =   172.16.143.103
MAL_PORT        =   5242
MAL_INST_PORT       =   5236
MAL_INST_HOST       =   172.16.143.103

[MAL_INST3]
MAL_INST_NAME       =   TESTC
MAL_HOST        =   172.16.143.104
MAL_PORT        =   5243
MAL_INST_PORT       =   5236
MAL_INST_HOST       =   172.16.143.104

每个节点的 dmmal.ini 配置必须一致,一个节点配置好后可直接拷贝到另外两个节点。

复制服务器初始化

第一次使用复制服务器,需要对复制服务器执行初始化操作。通过执行系统函数SP_INIT_REP_SYS(create_flag)来初始化复制服务器。其主要作用是创建复制用户(SYSREP/SYSREP)和创建复制服务器上需要的系统表。SP_INIT_REP_SYS 的参数create_flag1 时表示创建用户和系统表,为 0 时表示删除用户和系统表。

复制环境的配置

  • 1) 启动 3 台服务器,启动的顺序不分先后。
  • 2) 登录 RPS A,保证服务器状态为 OPEN,开始复制配置。
    查看数据库状态:select name,instance_name,start_time,status$ from v$instance;
  • 3) 创建复制组 TESTB_TO_TESTC

SP_RPS_ADD_GROUP('TESTB_TO_TESTC', '主从同步复制');

注:第一个参数为创建的复制组名称,第二个参数为复制组描述

  • 4) 开始复制设置
SP_RPS_SET_BEGIN('TESTB_TO_TESTC');

注:第一个参数为复制组名称

  • 5) 添加复制关系
SP_RPS_ADD_REPLICATION ('TESTB_TO_TESTC', 'REPB2C', 'B 到 C 的同步复制', 'TESTB', 'TESTC', NULL, '/www/dm8/data/TEST/arch');

注:第一个参数为复制组名,第二个参数为复制名(必须在 RPS 上唯一),第三个参数为复制描述,第四个参数为主服务器实例名,第五个参数为从服务器实例名,第六个参数为复制定时器名(借助定时器,可以设置复制数据的同步时机。如果是同步复制则为 NULL),第7个参数为主服务器上逻辑日志的完整归档路径。

  • 6) 添加复制映射
    复制映射分为库级模式级表级三个级别。
    其中表级要求源表和目标表结构完全一致,库级和模式级没有要求。库级和模式级复制映射会将其 DDL 也进行复制。复制映射包括只读模式和非只读模式。对于只读模式的映射,映射的目的表禁止用户更新。
  • 6-1) 模式级复制映射

SP_RPS_ADD_SCH_MAP('REPB2C', 'TEST', 'TEST', 0);

注:模式级复制映射。第一个参数为复制关系名,第二个参数为主服务器模式名,第三个参数为从服务器模式名,第四个参数为只读复制模式(1 表示只读模式,从服务器只接受复制更新,0 表示非只读模式)

  • 6-2) 表级复制映射
SP_RPS_ADD_TAB_MAP('REPB2C', 'TEST', 'articles', 'TEST', 'articles', 0);

注:添加表级复制映射。第一个参数为复制关系名,第二个参数为主服务器模式名,第三个参数为主服务器表名,第四个参数为从服务器模式名,第五个参数为从服务器表名,第六个参数为只读复制模式(1 表示只读模式,从服务器只接受复制更新,0 表示非只读模式)

  • 7) 提交设置
SP_RPS_SET_APPLY();

至此,复制环境配置完成。

在配置过程中或配置完成后,可以对复制的配置进行修改。修改包括复制组、复制关系、复制对象的删除和复制关系属性的修改。这些修改操作都必须在开始复制SP_RPS_SET_BEGIN 和提交复制 SP_RPS_SET_APPLY 之间进行。若需要删除复制组,则该复制组不能处于配置阶段,即该组的配置已经提交或取消。

其他

  • 删除复制映射
SP_RPS_DROP_TAB_MAP('REPB2C', 'TEST', 'articles', 'TEST', 'articles');

注:删除表级复制映射。第一个参数为复制关系名,第二个参数为主表模式名,第三个参数为主表名,第四个参数为从表模式名,第五个参数为从表名

  • 添加一个定时器,将同步复制修改为异步复制
SP_RPS_ADD_TIMER('B2C_TIMER','',1,0,0,0,'19:50:33',NULL,'2011-08-2419:50:33',NULL,1);
SP_RPS_REP_RESET_TIMER('REPB2C','B2C_TIMER');

具体参数说明请看DM8 SQL.pdf

  • 删除复制关系
SP_RPS_DROP_REPLICATION('REPB2C');
  • 删除整个复制组
SP_RPS_DROP_GROUP('TESTB_TO_TESTC');
  • 在配置或修改配置时想要取消操作,可以使用如下系统过程结束配置
SP_RPS_SET_CANCEL();

遇到的坑

我在添加复制映射时,首先添加的是表级复制映射,当删除整个复制组,重新添加模式级复制映射时,发现之前添加过表级复制映射的表,不会自动复制,而其他表是可以的。后来通过将主从服务器的这张表删除后,重新导入就又可以自动复制了。

当修改了复制关系或复制映射时,可能会造成某些表不生效的情况,这时候只需要重启达梦数据库即可。

发表评论

邮箱地址不会被公开。 必填项已用*标注