DM 数据守护提供多种解决方案,可以配置成实时主备、MPP 主备读写分离集群

  • 实时主备由一个主库以及一个或者多个配置了实时 (Realtime) 归档的备库组成,其主要目的是保障数据库可用性,提高数据安全性。

实时主备系统中,主库提供完整的数据库功能,备库提供只读服务。

  • MPP 主备是在 MPP 集群的基础上,为每一个 MPP 节点配置一套实时主备系统,这些实时主备系统一起构成了 MPP 主备系统。

我们将一个 MPP 节点对应的主备系统称为一个数据守护组 (Group),

MPP 主备系统中各个数据守护组保持相对独立,当某个 MPP 主节点出现故障时,在其对应的数据守护组内挑选一个备库切换为主库后,就可以确保整个 MPP 集群的正常使用。

  • 读写分离集群由一个主库以及一个或者多个配置了即时 (Timely) 归档或实时 (Realtime) 归档的备库组成。

读写分离集群由一个主库, 以及一个或者多个配置了即时归档的备库组成,

配置读写分离集群,

有以下几种配置方案,可以根据实际情况部署:

               1.只配置主库和最多8个即时备库。
               2.只配置主库和最多8个异步备库。
               3.   配置主库、最多8个即时备库和最多8个异步备库。

配置 MAL系统,各主备库的 dmmal.ini配置必须完全一致

主备库之间的 REDO 日志传输,以日志包 RLOG_PKG 为单位,主库通过 MAL 系统发送 REDO 日志到备库。

根据是否满足读提交事务隔离级特性,读写分离集群可以配置为事务一致模式和高性能两种模式。简单的说,事务一致模式下,不论一个 Select 语句是在备库执行、还是在主库执行,其查询结果集都是一样的。高性能模式则不能保证查询是一致的,备库的数据与主库的数据同步存在一定的延迟,当 Select 语句发送到备库执行时,返回的有可能是主库上一个时间点的数据。

./dmserver /dm7/data/DAMENG/dm.ini mount

读写分离与实时主备搭建:搭建过程和实时主备一致,只需要修改dmarch.ini文件。

编辑DM_svc.conf文件

TIME_ZONE=(+8:00)
 LANGUAGE=(en)
 DM_DW=(192.168.14.128:32141,192.168.14.129:32142)
 LOGIN_MODE=(1)
 [DM_DW]
 LOGIN_MODE=(1)
 SWITCH_TIME=2000
 SWITCH_INTERVAL=10


 

达梦数据库读写分离:可以通过在应用服务器上修改dm_svc.cof

应用服务器配置

客户端主机上需要配置 dm_svc.conf 文件,文件路径:
Linux 平台下,此文件位于/etc 目录
dm_svc.conf:
全局配置区

DMRW=(192.168.10.1:5236,192.168.10.2:5236)
 TIME_ZONE=(+480) #表示+8:00 时区
 LOGIN_ENCRYPT=(0)
 DIRECT=(Y)


服务配置区

[DMRW]
 TIME_ZONE=(+540) #表示+9:00 时区
 LOGIN_MODE=(0)
 SWITCH_TIME=(3) #在服务器之间切换的次数
 SWITCH_INTERVAL=(10) #在服务器之间切换的时间间隔,单位为毫秒
 RW_SEPARATE=(1) #是否启用读写分离,0是关闭,1是开启读写分离
 RW_PERCENT=(25) #读写分离分发比例


客户端程序连接数据库时,需要指定 ip 端口处替换为服务名即可,例如:
disql SYSDBA/SYSDBA@DMRW
注:当修改了 dm_svc.conf 内容后,需要重启客户端程序,修改的配置才能生效
LOGIN_MODE
服务名方式登录,始终会优先登录主库;LOGIN_MODE 表示是否仅登录主库或者备库, 可以配置为 0、1 或 2。
0 表示优先登录主库,没有可用主库情况下登录备库;
1 表示不登 录 Standby 模式的库,如果系统中只有 Standby 模式的库,登录失败并报错;
2 表示仅 登录 Standby 模式的库。
默认值为 0。

异步备库配置

本部署流程是在已有2节点数据守护集群的前提下添加一台异步备库

(主库)进行联机备份操作

(异步备库)进行脱机恢复。拷贝备份文件到备库所在机器, 并执行脱机数据库还原与恢复。

配置主库

dm.ini #配置有异步归档时,打开定时器,定时同步归档到异备库

TIMER_INI= 1

配置dmtimer.ini,用于定时触发实例发送归档日志到异步备库。

[RT_TIMER] #和dmarch.ini中的ARCH_TIMER_NAME一致
TYPE                 = 2
FREQ_MONTH_WEEK_INTERVAL      = 1
FREQ_SUB_INTERVAL     = 0
FREQ_MINUTE_INTERVAL = 0
START_TIME            = 14:00:00
END_TIME           = 15:00:00
DURING_START_DATE   = 2021-08-05 13:00:00
DURING_END_DATE     = 9999-12-31 23:59:59
NO_END_DATE_FLAG    = 1
DESCRIBE             = RT TIMER
IS_VALID            = 1
dmarch.ini添加如下增加异步归档配置
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = DMOA_ST #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER  #定时器名称,和dmtimer.ini中的名称

dmmal.ini 增加异步备库DMOA_ST的配置项如下

[MAL_INST3]
MAL_INST_NAME       = DMOA_ST  #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST              =  192.168.43.131  #MAL系统监听TCP连接的IP地址
MAL_PORT         =  61141  #MAL系统监听TCP连接的端口
MAL_INST_HOST         =  192.168.43.131 #实例的对外服务IP地址
MAL_INST_PORT         =  5234  #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52141    #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33141 #实例监听守护进程TCP连接的端

配置备库

dm.ini
#配置有异步归档时,打开定时器,定时同步归档到异备库
TIMER_INI= 1
dmmal.ini 增加异步备库DMOA_ST的配置项如下
[MAL_INST3]
MAL_INST_NAME       = DMOA_ST  #实例名,和dm.ini中的INSTANCE_NAME一致
MAL_HOST              =  192.168.43.131  #MAL系统监听TCP连接的IP地址
MAL_PORT         =  61141  #MAL系统监听TCP连接的端口
MAL_INST_HOST         =  192.168.43.131 #实例的对外服务IP地址
MAL_INST_PORT         =  5234  #实例的对外服务端口,和dm.ini中的PORT_NUM一致
MAL_DW_PORT = 52141    #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 33141 #实例监听守护进程TCP连接的端
dmarch.ini添加如下增加异步归档配置
[ARCHIVE_ASYNC]
ARCH_TYPE = ASYNC #异步归档类型
ARCH_DEST = DMOA_ST #异步归档目标实例名
ARCH_TIMER_NAME = RT_TIMER  #定时器名称,和dmtimer.ini中的名称

配置dmtimer.ini,用于定时触发实例发送归档日志到异步备库。

[RT_TIMER] #和dmarch.ini中的ARCH_TIMER_NAME一致
TYPE                 = 2
FREQ_MONTH_WEEK_INTERVAL      = 1
FREQ_SUB_INTERVAL     = 0
FREQ_MINUTE_INTERVAL = 0
START_TIME            = 14:00:00
END_TIME           = 15:00:00
DURING_START_DATE   = 2021-08-05 13:00:00
DURING_END_DATE     = 9999-12-31 23:59:59
NO_END_DATE_FLAG    = 1
DESCRIBE             = RT TIMER
IS_VALID            = 1

5.配置异步备库

dm.ini修改如下
#实例名,建议使用―组名_守护环境_序号的命名方式,总长度不能超过16
INSTANCE_NAME= DMOA_ST
PORT_NUM= 5234 #数据库实例监听端口
DW_INACTIVE_INTERVAL= 60     #接收守护进程消息超时时间
ALTER_MODE_STATUS= 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS= 2 #不允许备库OFFLINE表空间
MAL_INI= 1 #打开MAL系统
ARCH_INI= 1 #打开归档配置
RLOG_SEND_APPLY_MON= 64    #统计最近64

将主库dmmal.ini复制到异步备库上

dmarch.ini如下(异步备库只需要本地归档)

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL
        ARCH_DEST            = /home/dmdba/dmdbms/DMOA/arch_DMOA
        ARCH_FILE_SIZE       = 256
        ARCH_SPACE_LIMIT     = 10240
        ARCH_FLUSH_BUF_SIZE  = 0

dmwatcher.ini

[GRP1]
DW_TYPE = GLOBAL       #全局守护类型
DW_MODE = MANUAL #自动切换模式
DW_ERROR_TIME    = 10    #远程守护进程故障认定时间
INST_ERROR_TIME  =10#本地实例故障认定时间
INST_OGUID        = 453331     #守护系统唯一OGUID值
INST_INI  = /home/dmdba/dmdbms/DMOA/dm.ini   #dm.ini配置文件路径
INST_AUTO_RESTART  = 1   #打开实例的自动启动功能
INST_STARTUP_CMD  = /home/dmdba/dmdbms/bin/dmserver    #命令行方式启动