数据复制

25.1 概述

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

25.2 重要概念

  1. 数据库状态

服务器的状态,在不同的状态下,对能够进行的操作有不同的限制。详见数据守护部分。

  1. 主服务器

发起复制操作的服务器,称为主服务器。

  1. 从服务器

接收主服务器发送的数据并进行复制的服务器,称为从服务器。

  1. 复制节点

涉及到复制的服务器,主服务和从服务的统称。一个节点既可以是主服务器也可以是从服务器。

  1. 复制服务器(RPS)

在数据复制环境中,负责配置复制环境,定义复制关系的服务器。RPS 有且仅有一台,它只负责配置和监控,并不参与到复制过程中。

  1. 复制关系

复制关系指明主服务器和从服务器以何种方式进行复制。按照复制的方式,复制关系分为同步复制和异步复制。

  1. 同步复制关系

主服务器数据更新立即复制到从服务器。

  1. 异步复制关系

主服务器和从服务器在某段时间内数据可能是不同的,主服务器数据更新不会立刻同步到从服务器,而是在经过一段时间后才进行复制。异步复制的同步时机由指定的定时器确定。

  1. 逻辑日志

记录产生数据变化的逻辑操作的日志。记录的逻辑操作包括 INSERT、UPDATE、DELETE、TRUNCATE、ROLLBACK 和 COMMIT 等。

  1. 复制源对象

主服务器上作为复制数据源的对象,可以是库、模式或表。在该对象上的操作都会被记录成逻辑日志,发送给从服务器进行复制操作。

  1. 复制目标对象

从服务器上作为复制数据目标的对象。从服务器接收到逻辑日志后,将复制源对象的变化复制到复制目标对象中。

  1. 复制对象映射

一对复制源对象和复制目标对象构成一个复制对象映射。构成映射的源对象和目标对象必须是同一类型的对象。根据对象的类型,复制映射分为库级、模式级和表级三个级别。其中表级要求源表和目标表结构完全一致,库级和模式级没有要求。库级和模式级复制映射会将其 DDL 也进行复制。复制映射包括只读模式和非只读模式。对于只读模式的映射,映射的目的表禁止用户更新。

  1. 复制组

一组逻辑相关的复制关系可以构造成为复制组。通过复制组,可以构造出一对多复制、多对一复制、级联复制、对称复制、循环复制等复杂的逻辑复制环境。

25.3 体系构架

数据复制系统由以下部件构成:

  1. 复制服务器;
  2. 复制节点;
  3. 各实例站点间通讯的 MAL 系统。

除了系统管理员通过复制服务器定义复制和处理异常外,其他部分的处理及主从服务器之间复制操作对于用户是透明的。

整个复制环境的配置境况如下图所示。

复制环境结构图

图25.1 复制环境结构图

在整个环境中有且仅有一台复制服务器(RPS),用户通过 RPS 定义复制及复制环境,但 RPS 并不参与到复制过程中。

DM 中,将复制逻辑日志按照配置归档到本站点指定目录称为本地归档,将日志的发送称为日志的远程归档。

复制节点上,与复制相关的配置文件有 dmtimer.ini、dmllog.ini、dmrep.ini。各个配置文件在复制中的功能如下表所示。

表25.1 复制中各配置文件的作用
名称 简介 有效节点 功能
dmtimer.ini 定时器配置文件 主服务器 记录异步复制的定时器信息
dmllog.ini 逻辑日志配置文件 主服务器 记录复制源对象及其逻辑日志相关的信息(包括逻辑本地归档信息和远程归档信息)
dmrep.ini 复制信息配置文件 主服务器/从服务器 主服务器上记录复制相关逻辑日志的编号; 从服务器上记录复制关系的主服务器信息以及复制对象映射的信息

这些配置文件内的信息意义见第 2 章。这些文件均是 RPS 依据用户配置通过 MAL 系统自动生成或修改的,管理员不需要手动进行管理。

在数据复制过程中,除了配置文件,其他的重要文件如下表。

表25.2 复制中的重要文件
名称 有效 节点 功能
逻辑日志文件 主服 务器 在数据文件夹内的 llog_01.log 和 llog_02.log 两个文件,记录在执行过程中所有的逻辑日志。
逻辑日志归档文件 主服 务器 根据配置,生成在指定的逻辑日志归档路径中,名称为 llog 生成时间.log,是特定逻辑日志下所有记录的本地归档文件,也是发送给复制从服务器的数据来源
复制数据文件 从服 务器 在数据文件夹下的 repx(x 为复制关系的 id)下,以 repx_y.rep(x,y 为该文件内记录的编号)为文件名,是从服务器接收到复制数据之后的临时缓存文件,也是复制执行的依据。

这些文件都是流式文件,主服务器在执行过程中,逻辑日志先记录到逻辑日志文件中,并根据配置的信息,将逻辑日志分别分发归档到不同的逻辑日志归档文件中,并在恰当的时机将逻辑日志归档文件的内容发送给从服务器。

从服务器接收到一批数据就产生一个复制数据文件将数据存储其中,防止从服务器复制速度低导致复制数据的丢失。

逻辑日志文件大小限制为 32M,两个文件交替使用。

归档路径内每个逻辑日志归档文件大小限制为 32M,文件写满后增加新文件来存放新的记录。在 dmllog.ini 中有配置归档路径内所有文件总的空间限制,若达到限制的空间,则会删除之前的文件;若配置为无空间限制,则管理员可根据复制情况进行删除。

复制数据文件是从服务器一次接收的复制数据的临时文件,其大小不会超过 32K;在其数据复制结束后会被自动删除。

25.4 配置数据复制

配置数据复制在 RPS 上进行,所有的配置接口见《DM8_SQL 语言使用手册》附录 3 的“5)数据复制管理”章节。在配置数据复制之前,需要保证复制服务器和所有待配置节点的实例名各不相同,配置好其 MAL 系统并保证网络环境正常。按照复制组、复制关系、复制表映射的顺序配置复制环境。

下面举一个简单的例子来说明数据复制的配置。

  1. 准备工作

参与复制的复制实例的信息如下表所示。

表25.3 参与复制的实例信息
服务器 实例名 IP 地址 服务器端口号 MAL 端口号 文件目录
复制服务器 A 192.168.0.11 5236 5241 C:\data\DAMENG
主服务器 B 192.168.0.12 5236 5242 C:\data\DAMENG
从服务器 C 192.168.0.13 5236 5243 C:\data\DAMENG

假设 B 上存在 USER1.T1 表,C 上存在与 B 上 USER1.T1 表结构完全相同的 USER2.T2 表,现需要创建一个 B 上 USER1.T1 表到 C 上 USER2.T2 表的同步复制关系,其名称为 REPB2C。

  1. 参数设置

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

表25.4 复制中dm.ini的配置
服务器 dm.ini 设置
复制服务器 INSTANCE_NAME = A PORT_NUM = 5236 MAL_INI = 1
主服务器 INSTANCE_NAME = B PORT_NUM = 5236 MAL_INI = 1
从服务器 INSTANCE_NAME = C PORT_NUM = 5236 MAL_INI = 1

dmmal.ini 配置,用户实际配置时需根据情况更改对应项。

    MAL_CHECK_INTERVAL  = 5
    MAL_CONN_FAIL_INTERVAL = 5
    [MAL_INST1]
      MAL_INST_NAME		= A
      MAL_HOST			= 192.168.0.11
      MAL_PORT			= 5241
    MAL_INST_PORT      = 5236 
    MAL_INST_HOST		= 192.168.0.11

    [MAL_INST2]
      MAL_INST_NAME		= B
      MAL_HOST			= 192.168.0.12
      MAL_PORT			= 5242
    MAL_INST_PORT      = 5236 
    MAL_INST_HOST		= 192.168.0.12

    [MAL_INST3] 
      MAL_INST_NAME		= C
      MAL_HOST			= 192.168.0.13
      MAL_PORT			= 5243
    MAL_INST_PORT      = 5236 
    MAL_INST_HOST		= 192.168.0.13

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

  1. 复制服务器初始化

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

  1. 环境的配置

以上工作完成后,即可进行复制环境的配置了。

  1. 启动 3 台服务器,启动的顺序不分先后。
  2. 登录 RPS A,保证服务器状态为 OPEN,开始复制配置。
  3. 创建复制组 REP_GRP_B2C
  SP_RPS_ADD_GROUP('REP_GRP_B2C', '主从同步复制');
  1. 开始设置
  SP_RPS_SET_BEGIN('REP_GRP_B2C');
  1. 添加复制关系
  SP_RPS_ADD_REPLICATION ('REP_GRP_B2C', 'REPB2C', 'B到C的同步复制', 'B', 'C', NULL, 'D:\REPB2C');
  1. 添加复制映射
  SP_RPS_ADD_TAB_MAP('REPB2C', 'USER1', 'T1', 'USER2', 'T2', 0);
  1. 提交设置
  SP_RPS_SET_APPLY();

至此,复制环境配置完成。以上的例子只是一个最简单的复制环境。复制的配置灵活,在同一个复制组内,一个主服务器可以有多个从服务器,一个复制节点可以既是主服务器又是从服务器。管理员可以根据实际需要,配置出对称、一对多、多对一、级联、循环的复制环境。

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

删除复制映射

  SP_RPS_DROP_TAB_MAP('REPB2C', 'USER1', 'T1', 'USER2', 'T2');

添加一个定时器,将同步复制修改为异步复制

  SP_RPS_ADD_TIMER('B2C_TIMER','',1,0,0,0,'19:50:33',NULL,'2011-08-24 19:50:33',NULL,1);
  SP_RPS_REP_RESET_TIMER('REPB2C','B2C_TIMER');

修改复制的错误超时时间,超时的时间单位是秒

  SP_RPS_SET_ROUTE_FAULT_TIMEOUT('REPB2C', 60);

删除复制关系

  SP_RPS_DROP_REPLICATION('REPB2C');

删除整个复制组

  SP_RPS_DROP_GROUP('REP_GRP_B2C');

另外,在配置或修改配置时想要取消操作,可以使用如下系统过程结束配置。

  SP_RPS_SET_CANCEL();

25.5 监控数据复制

25.5.1 复制故障监控

配置完成后复制服务器 RPS 虽然不参与复制的具体执行,但是在复制过程中,还是建议保持 RPS 的运行来对复制进行监控。

复制系统内,状态分为复制节点的状态和复制关系的状态。具体内容见下表。

表25.5 节点状态和复制关系状态
类型 子类型 意义
节点实例 系统状态 正常 0
恢复 1
系统异常 2
网络状态 正常 0
连接异常 4
复制关系 复制关系状态 正常 0
连接异常 1
待删除 512
已在主服务器删除 528
已在从服务器删除 513

上表复制节点的系统状态在 SYSREP.RPS_INSTANCES 中的 VALID_FLAG 字段表示;网络状态在 SYSREP.RPS_INSTANCES 表中 NET_VALID_FLAG 的字段表示。

复制关系的状态在 SYSREP.RPS_REPLICATIONS 中的 VALID_FLAG 字段表示。

复制系统的配置信息可以通过在复制 RPS 上查询系统表来实现。在 RPS 上,复制相关的信息都在 SYSREP 模式中,相关的表及其各字段的意义见附录 5 数据复制的系统表

复制的监视按复制组为单位进行,RPS 每隔 1 分钟轮询探查所有的复制组,在每个复制组内,依次探测各个复制节点,要求其返回复制节点本身的状态和其所涉及的复制的状态。

这里需要特别说明的是节点的系统异常状态是指该节点在复制环境中的状态,是一个推测值。当 RPS 无法得到节点的返回消息,其他节点的返回消息中所有涉及到该节点的复制关系都是异常时,RPS 就认为该节点系统异常。

若复制结点或复制关系发生异常,这些异常都会记录在 SYSREP.RPS_FAULT_HISTORY 表中。若其 END_TIME 字段为 NULL,表示该故障还没有结束,管理员需尽快检查复制节点的状态及其网络连接。

DM8 并没有特意设置对错误历史的管理接口,管理员可以通过对 SYSREP.RPS_FAULT_HISTORY 表的删除和查询来实现错误记录的管理。

25.5.2 复制故障处理

  1. 故障超时设置和处理

在配置阶段,管理员可以配置复制关系和复制节点的故障超时时间。复制运行时当复制关系出现异常或节点出现系统异常时,RPS 会计算故障持续时间,在设置的超时时间以内,RPS 都会尝试进行故障恢复;若发现故障时间超过了设置的超时时间,则会删除该复制关系或节点,当然,删除节点时,该节点涉及的所有复制关系都会被删除。

删除复制关系时,若复制关系的主服务器或从服务器是异常状态,该复制关系不会立刻被清除,它会处于删除状态,在仍正常运行的服务器上删除;等待异常的服务器恢复后,将其从该服务器的复制配置中删除后,RPS 才会彻底的清理该复制关系;这也是复制关系状态中“待删除”、“已从主服务器上删除”和“已在从服务器上删除”状态的原因。

  1. 复制关系异常修复

当 RPS 发现某复制关系异常时,RPS 会通知该复制关系的主服务器,要求其重新建立彼此间的网络连接,修复复制关系。

如果修复成功,重置 RPS 上复制关系的状态,并将复制关系的异常计时设为无效;若修复失败,则判断异常时间是否超时,若超时,则进入删除流程,否则等待到下一个监控修复时间进行恢复。

修复成功后,如果是同步复制,则修复后立刻将异常期间的逻辑日志发送给从服务器,若是异步复制,则会等待定时器触发复制。

  1. 复制节点网络故障恢复

RPS 在每次探查阶段中探查节点之前都会检查与节点间的网络连接;发现某结点无法通讯,则会跳过本轮的故障恢复阶段,直到 RPS 能够与之建立连接。

在网络故障期间,管理员可以通过查询 SYSREP.RPS_FAULT_HISTORY 表中实例网络异常的记录,尽快修复网络异常。

  1. 复制节点系统异常恢复

当 RPS 在探查阶段中认定发现某节点系统异常,则会将所有该节点涉及到的复制关系置为异常状态,记录在 SYSREP.RPS_FAULT_HISTORY 中,等待管理员恢复节点系统。

复制节点系统异常恢复的过程是执行故障超时处理和修复剩余的复制关系两者统一执行的过程。节点系统恢复后,RPS 会根据故障期间故障处理的结果,删除因超时而被删除的复制关系;修复节点内剩余的所有复制关系。

  1. 复制错误监控

在复制过程中,特别是在多对一或多对多的复制环境中,可能出现数据冲突。数据冲突发生后,从服务器会将其记录在相应的日志中,RPS 每隔固定时间会轮询所有结点,收集其间产生的数据冲突记录并将其插入到 SYSREP.RPS_CONFLICTS 表中,管理员可以通过查询该表来查看。

DM 并没有特意设置对复制冲突记录的管理接口,管理员可以通过对 SYSREP.RPS_CONFLICTS 表的删除和查询来实现错误记录的管理。

25.6 复制用户和系统表

执行系统函数 SP_INIT_REP_SYS(1)创建的复制用户和系统表如下:

一 复制用户,被授予 RESOURCE 角色

用户名:SYSREP

密码:SYSREP

二 复制系统表。包含复制组表、复制节点实例表、复制关系表、复制映射表、故障历史表、冲突历史表和复制定时器表,共 7 张表。

微信扫码
分享文档
扫一扫
联系客服