注册
达梦数据库实时主备集群配置
技术分享/ 文章详情 /

达梦数据库实时主备集群配置

DM_336625 2026/07/02 35 0 0

一、概述

达梦实时主备集群是数据守护(Data Watch)的一种高可用解决方案,由一个主库和一个或多个配置了实时(REALTIME)归档的备库组成。其核心原理是:主库修改数据产生的Redo日志,在写入联机日志文件之前发送到备库,备库通过重演Redo日志与主库保持数据同步。

二、环境规划

本文以一主一备+确认监视器的架构为例进行配置:

角色 主机名 IP地址 心跳IP 实例名 端口
主库 dm4 192.168.163.130 192.168.163.133 dmprod1 5246
备库 dm5 192.168.163.132 192.168.163.134 dmprod2 5246
确认监视器 dm1 192.168.163.128 - -

端口规划

端口类型 主库值 备库值 说明
PORT_NUM 5246 5246 数据库服务端口
MAL_PORT 61141 61141 MAL系统通信端口
MAL_DW_PORT 52141 52141 守护进程通信端口
MAL_INST_DW_PORT 33141 33141 实例监听守护进程端口

三、数据准备

3.1 初始化实例

分别在主备库上初始化实例:

#安装略,目录保持一致,增加了以下环境变量 export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool # 主库 dminit path=/dmdata/data page_size=32 instance_name=dmprod1 extent_size=32 log_size=2048 PORT_NUM=5246 sysdba_pwd=Dameng123 SYSAUDITOR_PWD=Dameng123 # 备库 dminit path=/dmdata/data page_size=32 instance_name=dmprod2 extent_size=32 log_size=2048 PORT_NUM=5246 sysdba_pwd=Dameng123 SYSAUDITOR_PWD=Dameng123

3.2 主库配置

步骤1:初始化实例

#前台方式启动数据库 dmserver /dmdata/data/DAMENG/dm.ini #配置归档 [dmdba@~]$ disql sysdba/"Dameng123"@localhost:5236 SQL> ALTER DATABASE MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; SQL> ALTER DATABASE OPEN; SQL> checkpoint(100); #DM[603]:no log generates while the backupset [/dmdata/dmbak/fullbak0611] created #才开启归档,直接备份可能没有归档日志导致还原时失败,这里checkpoint下让归档落地 SQL> backup database backupset '/dmdata/dmbak/full_bak_0609' #修改数据库配置 SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5246); SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60); SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0); SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2); SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1); SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64); #关闭实例 退出前台即可

步骤2:修改dmarch.ini,主要增加实时归档配置

[dmdba@~]$ vi /dmdata/data/DAMENG/dmarch.ini ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdata/arch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = dmprod2 #实时归档目标实例名

步骤3:创建 dmmal.ini

[dmdba@~]$ vi /dmdata/data/DAMENG/dmmal.ini MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /dmdata/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 = dmprod1 #实例名,和 dm.ini 的 INSTANCE_NAME 一致 MAL_HOST = 192.168.163.133 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.163.131 #实例的对外服务 IP 地址 MAL_INST_PORT = 5246 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = dmprod2 MAL_HOST = 192.168.163.134 MAL_PORT = 61141 MAL_INST_HOST = 192.168.163.132 MAL_INST_PORT = 5246 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 33141 SF_MAL_INST_ADD('MAL_INST3','dmprod3','192.168.163.136',61141,'192.168.163.135',5246,54141,0,33141); ALTER DATABASE ADD ARCHIVELOG 'DEST=dmprod3, TYPE=REALTIME';

步骤4:创建dmwatcher.ini

[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/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 = /dmdata/data/DAMENG/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/DmServicedmprod1 start #服务名方式启动 #INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

步骤5:将备份配置传到备考

[dmdba@dm4 DAMENG]$ scp -r /dmdata/dmbak/full_bak_0609/ dmdba@192.168.163.132:/dmdata/dmbak/ #将dmserver和dmwatcher注册成systemd服务 /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p dmprod1 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

四、备库配置

4.1 从备份恢复数据

[dmdba@~]$ dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/full_bak_0609'" [dmdba@~]$ dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/full_bak_0609'" [dmdba@~]$ dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

4.2 配置 dmarch.ini

[dmdba@~]$ vi /dmdata/data/DAMENG/dmarch.ini ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致 [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdata/arch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = dmprod1 #实时归档目标实例名

4.3 配置 dm.ini参数

修改参数如下

INSTANCE_NAME  = dmprod2
PORT_NUM = 5246                               #数据库实例监听端口
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 次的日志重演信息

4.4 配置 dmmal.ini 和 dmwatcher.ini

#和主库配置一样即可

4.5 注册服务

#将dmserver和dmwatcher注册成systemd服务 /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p dmprod2 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

五、启动数据库修改参数,启动守护进程

5.1 前台方式启动主库及备库,注意mount启动

##A 机器 [dmdba@~]$ dmserver /dmdata/data/DAMENG/dm.ini mount #另开窗口 [dmdba@~]$ disql sysdba/"Dameng123"@localhost:5246 SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> SP_SET_OGUID(45331); SQL> ALTER DATABASE PRIMARY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); ##B 机器 [dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RT_02 start [dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/*****@172.16.1.2:5236 SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> SP_SET_OGUID(45331); SQL> ALTER DATABASE STANDBY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); ##A/B机器分别执行 dmwatcher /dmdata/data/DAMENG/dmwatcher.ini

六、配置确认监视器

由于守护进程配置为自动切换模式(DW_MODE = AUTO),必须部署确认监视器来实现自动故障切换。

6.1 创建监视器配置文件

vi /home/dmdba/dmdbms/bin/dmmonitor.ini MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /home/dmdba/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.163.133:52141 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 192.168.163.134:52141 #注册服务 /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini

6.2 创建非确认配置监视器

配置非确认监视器:集群各节点的 bin 目录中,存放非确认监视器配置文件。 在配置监视器时,一般配置好确认监视器后,建议再配置一个非确认监视器的配置文件,在主备发生切换时, 可以通过前台的方式启动非确认监视器进行手动切换。非确认监视器是通过将监视器配置文件中 MON_DW_CONFIRM 参数值修改为 0 来实现,示例如下: vi /home/dmdba/dmdbms/bin/dmmonitor_normal.ini MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /home/dmdba/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.163.133:52141 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 192.168.163.134:52141

6.3监视器常用命令

命令 含义
list 查看守护进程的配置信息
show global info 查看所有实例组的信息
tip 快速查看当前运行状态
login 登录(执行切换操作前必须登录)
logout 退出登录
choose switchover GDW1 主库正常时,查看可切换为主库的备库列表
switchover GDW1.实例名 主库正常时,将指定实例切换为主库
choose takeover GDW1 主库故障时,查看可接管的备库列表
takeover GDW1.实例名 主库故障时,让指定备库接管
takeover force GDW1.实例名 强制接管,不管数据是否完整(慎用)

七、启动集群

重要提醒:启动顺序有严格要求,必须先启动数据库实例,再启动守护进程,最后启动监视器。

7.1 先前台启动监视器查看集群是否正常

dmmonitor /home/dmdba/dmdbms/bin/dmmonitor #如果观察无问题,实例open,状态一主一备,则退出监视器 #上面命令行启动的守护进程先退出备在退出主,数据库实例也是先退出主,在退出备 #然后用systemd启动服务,先主后备启动数据库实例,再先主后备启动守护进程,最后启动监视器 systemctl start DmServicedmprod1.service systemctl start DmServicedmprod2.service systemctl start DmWatcherServiceWatcher.service systemctl start DmWatcherServiceWatcher.service systemctl start DmMonitorServiceMonitor.service

达梦社区技术 https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服