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 #命令行方式启动