注册
达梦数据守护集群部署
专栏/技术分享/ 文章详情 /

达梦数据守护集群部署

wwwwww 2026/09/18 276 0 0
摘要

1.集群介绍
达梦数据守护集群是一种高可用架构,通过主备实时同步实现数据库故障自动切换,保障业务连续性。实现原理非常简单:将主库(生产库)产生的 REDO 日志传输到备库,备库接收并重新应用 REDO 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 REDO 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
主要有以下五个组件:
主库:对外提供读写服务
备库:接收并重演日志,故障时接管
DmWatcher:守护进程,监控状态、自动切换
DmMoniter:监视器,状态查看
MAL:主备之间的通信机制。

2.部署(正常需要两台以上的机器,以下为截图为单机部署,以接口区分不同机器)
集群规划
2.1 A机器配置
首先需要初始化数据库实例,以下为示例代码。
./dminit PATH=/opt/dmdbms/data/ INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=****** SYSAUDITOR_PWD=******
然后启动服务,进入数据库命令行界面,开启归档,输入以下命令
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG ‘DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200’;
ALTER DATABASE OPEN;
归档是指将数据库的重做日志(Redo Log)在覆盖前保存到指定存储位置的过程,是数据库高可用和数据保护的核心机制。开启归档是数据守护集群的前提条件,主库必须开启归档,备库才能通过应用归档日志实现同步。
ALTER DATABASE MOUNT是将数据库从OPEN状态切换到MOUNT状态,在MOUNT(挂载)状态下数据库已加载文件,但不对外提供服务,这时可以安全修改配置。
ALTER DATABASE ARCHIVELOG 将数据库切换为归档模式。
ALTER DATABASE ADD ARCHIVELOG 配置归档路径和参数。
ALTER DATABASE OPEN 将数据库从 MOUNT 状态恢复为 OPEN 状态,数据库重新对外提供正常的读写服务。

备份数据,用于备库同步,并将其拷贝至备库的对应目录下。
BACKUP DATABASE BACKUPSET ‘/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE’;

修改dm.ini
SP_SET_PARA_VALUE (2,‘PORT_NUM’,5236);
SP_SET_PARA_VALUE (2,‘DW_INACTIVE_INTERVAL’,60);
SP_SET_PARA_VALUE (2,‘ALTER_MODE_STATUS’,0);
SP_SET_PARA_VALUE (2,‘ENABLE_OFFLINE_TS’,2);
SP_SET_PARA_VALUE (2,‘MAL_INI’,1);
SP_SET_PARA_VALUE (2,‘RLOG_SEND_APPLY_MON’,64);
从上到下依次是:设置对应端口,按照实际情况进行设置;
守护进程超时检测,判定数据库实例不活跃的时间阈值,如果守护进程在60秒内未收到数据库实例的心跳,则认为实例故障,触发自动切换;
禁止手动修改数据库模式,防止误操作导致数据不一致;
表空间脱机策略,禁止所有表空间脱机;
启用MAL,读取 dmmal.ini 配置文件建立通信链路;
日志配置,保留最近 64 次日志发送/应用的性能统计。

修改dmarch.ini
将归档存放路径和实时归档目标实例名设置成对应路径
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_02 #实时归档目标实例名

创建 dmmal.ini
将目录、ip和端口设置成与实际一致
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /opt/dmdbms/data/malpath/ #临时文件目录
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.1.1 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 172.16.1.1 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.1.2
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536

创建 dmwatcher.ini
将目录设置成与实际一致
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

注册数据库和守护进程服务
路径要设置正确,要以root用户运行命令
./dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount

./dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini

2.2 B机器配置
创建实例,参考之前命令
恢复数据,注意路径要正确
./dmrman CTLSTMT=“RESTORE DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE’”
./dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ FROM BACKUPSET ‘/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE’”
./dmrman CTLSTMT=“RECOVER DATABASE ‘/opt/dmdbms/data/DAMENG/dm.ini’ UPDATE DB_MAGIC”
首先还原数据库将主库的备份集解压,还原出备库的数据文件(.DBF)、控制文件、日志文件等。然后恢复数据库,最后将备库的数据库DB_MAGIC修改为一个新值,使其与主库不同。
DB_MAGIC是达梦数据库的唯一标识符,每个数据库实例必须有不同的DB_MAGIC,主库和备库如果DB_MAGIC相同,会导致日志混乱、数据损坏。

创建 dmarch.ini
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_01 #实时归档目标实例名

配置 dm.ini
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236 #数据库实例监听端口
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、dmwatcher.ini配置和A机器相同,只需要修改路径、端口等信息即可。
最后注册数据库和守护进程服务。

3.修改参数
打开A机器数据库命令行界面,输入以下命令。
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1) 允许主动切换主备模式
SP_SET_OGUID(45331) 对象组唯一标识。同一个数据守护集群中,所有实例的OGUID必须相同。
ALTER DATABASE PRIMARY 设置成主库。

打开B机器数据库命令行界面,输入以下命令。
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, ‘ALTER_MODE_STATUS’, 0);

ALTER DATABASE STANDBY 设置成备库。

启动两个机器的守护进程
./DmWatcherServiceWatcher start

4.配置确认监视器
在bin目录下创建dmmonitor.ini
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = …/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB

[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.1.1:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.1.2:5436

注册服务
./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini

启动监视器
./DmMonitorServiceMonitor start

在配置监视器时,一般配置好确认监视器后,再配置一个非确认监视器的配置文件,在主备发生切换时,可以通过前台的方式启动非确认监视器进行手动切换。非确认监视器是通过将监视器配置文件中MON_DW_CONFIRM参数值修改为0来实现,其他和确认监视器的配置一致。

输入以下命令进入前台方式启动非确认监视器,并查看当前集群状态
./dmmonitor dmmonitor_manual.ini
top
show
图片1.png
图片2.png
图片3.png
图片4.png

从上图可以看到,主库和备库都数据同步正常。
图片5.png

主备库切换正常。

在部署时可能会遇到分裂的问题
图片6.png
这时需要把主库的数据备份,并拷贝到异常库中,到处命令为
BACKUP DATABASE BACKUPSET ‘/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE’;
然后停止异常库的watcher和server
执行恢复数据命令,与之前的命令一致。
删除dmwatcher.ctl(可以修改名称或移动到另外文件夹中)
之后再启动异常库服务,并将其改为STANDBY状态,操作与之前一致。
最后启动守护进程即可。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服