注册
达梦数据库(DM8)主备集群搭建实战手记​
培训园地/ 文章详情 /

达梦数据库(DM8)主备集群搭建实战手记​

Error!! 2025/09/13 55 0 0

引言
数据库的高可用性是保障业务连续性的关键。达梦数据库(DM8)提供了完善的数据守护(DM Data Watch)功能,可以实现主备架构的实时数据同步与故障自动切换。本文将详细记录一次基于三节点(实际主备各一节点,监视器节点)的达梦数据库主备集群搭建过程,操作步骤清晰,适合需要快速部署高可用环境的DBA或运维人员参考。请注意,文中涉及的IP地址和路径需根据实际环境修改。
环境准备

节点规划:

主库节点:192.168.140.100 (DMSVR01)
备库节点:192.168.140.101 (DMSVR02)
监视器节点:192.168.140.102 (可选,也可部署在主或备节点,但建议独立)
基础环境配置(所有节点执行):
关闭防火墙: 确保主备及监视器节点间的网络通信畅通。
systemctl stop firewalld && systemctl disable firewalld
禁用 SELinux: 修改配置文件并永久生效。
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
注意:执行此命令后建议重启服务器使 SELinux 状态生效。
主库节点配置 (192.168.140.100)
停止数据库服务:
以 root用户执行:
systemctl stop DmServiceDMSVR01.service
修改主库参数文件 (dm.ini):
使用 dmdba用户启动达梦控制台工具 (console):
cd /dm8/tool/
./console
在图形界面中找到并修改 /dm8/data/DM01/dm.ini文件,确保以下关键参数设置正确:
INSTANCE_NAME = DMSVR01 # 实例名,标识主库
MAL_INI = 1 # 启用 MAL 系统配置
ARCH_INI = 1 # 启用归档配置
ALTER_MODE_STATUS = 0 # 不允许用户直接修改数据库模式
ENABLE_OFFLINE_TS = 2 # 启用离线表空间
保存修改。
创建守护相关配置文件:
在 /dm8/data/DM01/目录下创建并编辑以下文件:
dmmal.ini(MAL 系统配置)

[MAL_INST]
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5

[MAL_INST1] # 主库自身配置
MAL_INST_NAME = DMSVR01
MAL_HOST = 192.168.140.100
MAL_PORT = 55101
MAL_INST_HOST = 192.168.140.100
MAL_INST_PORT = 5236
MAL_DW_PORT = 65101
MAL_INST_DW_PORT = 45101

[MAL_INST2] # 指向备库
MAL_INST_NAME = DMSVR02
MAL_HOST = 192.168.140.101
MAL_PORT = 55121
MAL_INST_HOST = 192.168.140.101
MAL_INST_PORT = 5236
MAL_DW_PORT = 65121
MAL_INST_DW_PORT = 45121

dmarch.ini(归档配置)

[ARCHIVE_REALTIME] # 实时归档到备库
ARCH_TYPE = REALTIME
ARCH_DEST = DMSVR02 # 目标实例名为备库 DMSVR02

[ARCHIVE_LOCAL1] # 本地归档
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0

dmwatcher.ini(守护进程配置)

[GRP1] # 守护组1配置
DW_TYPE = GLOBAL # 全局守护类型
DW_MODE = AUTO # 自动切换模式
DW_ERROR_TIME = 10 # 远程守护进程故障认定时间
INST_RECOVER_TIME = 60 # 实例恢复时间
INST_ERROR_TIME = 10 # 实例故障认定时间
INST_OGUID = 888888 # 守护组唯一标识,主备必须相同!
INST_INI = /dm8/data/DM01/dm.ini # 实例配置文件路径
INST_AUTO_RESTART = 1 # 允许守护进程启动实例
INST_STARTUP_CMD = /dm8/bin/dmserver # 实例启动命令
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

重要提示:确保配置文件中的 IP、端口、路径、实例名与实际环境一致。
执行数据库全库备份:
在 console工具中,对主库执行一次全库备份。
设置备份集名称为 FULLDB。
设置备份路径为 /dm8/backup/FULLDB。
迁移备份文件到备库节点:
使用 scp命令将备份文件传输到备库节点:
scp -r /dm8/backup/FULLDB/ dmdba@192.168.140.101:/dm8/backup/
备库节点配置 (192.168.140.101)
创建数据库目录:
使用 dmdba用户创建数据库数据目录并确保权限正确:
mkdir -p /dm8/data/DM01
还原数据库:
使用 console工具,选择“库级还原”。
指定源备份文件路径为 /dm8/backup/FULLDB。
指定目标数据库路径为 /dm8/data/DM01。
注意:选择“库文件还原”,不要使用“INI文件还原”。
获取主库配置文件:

从主库节点复制关键的守护配置文件到备库节点:

scp dmdba@192.168.140.100:/dm8/data/DM01/dmarch.ini /dm8/data/DM01/
scp dmdba@192.168.140.100:/dm8/data/DM01/dmmal.ini /dm8/data/DM01/
scp dmdba@192.168.140.100:/dm8/data/DM01/dmwatcher.ini /dm8/data/DM01/

创建必要目录:

创建归档目录和备份目录:

mkdir /dm8/arch
mkdir /dm8/data/DM01/bak

修改备库配置文件:

修改 dm.ini: 将实例名改为备库标识。

INSTANCE_NAME = DMSVR02 # 关键修改!标识此为备库

修改 dmarch.ini: 确保实时归档的目标指向主库。

[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DMSVR01 # 目标实例名改为主库 DMSVR01

(dmmal.ini和 dmwatcher.ini通常无需修改,内容应与主库对应部分一致)

更新模数: 在 console工具中,对备库的 dm.ini文件执行“更新 DB Magic”操作。这是还原后必须的步骤,使备库识别新的配置。

启动主备数据库集群

启动主库到 MOUNT 状态并设置:

以 dmdba用户执行:

/dm8/bin/dmserver /dm8/data/DM01/dm.ini mount

保持此命令行窗口运行,新开一个窗口使用 disql连接主库:

cd /dm8/bin
./disql SYSDBA/DMsysdba01@localhost:5236

执行 SQL 命令设置守护组唯一标识 (OGUID) 并将数据库置为主库模式:

sp_set_oguid(888888); -- 必须与 dmwatcher.ini 中的 INST_OGUID 一致
alter database primary;

验证状态:

select mode$, oguid from v$instance;
-- 应返回 PRIMARY 和 888888

启动备库到 MOUNT 状态并设置:

以 dmdba用户执行:

/dm8/bin/dmserver /dm8/data/DM01/dm.ini mount

新开窗口使用 disql连接备库:

cd /dm8/bin
./disql SYSDBA/DMsysdba01@localhost:5236

执行 SQL 命令设置相同的 OGUID 并将数据库置为备库模式:

sp_set_oguid(888888); -- 必须与主库及 dmwatcher.ini 一致
alter database standby;

验证状态:

select mode$, oguid from v$instance;
-- 应返回 STANDBY 和 888888

启动主库守护进程 (dmwatcher):

在主库节点,新开一个命令行窗口(保持数据库 MOUNT 状态的窗口和 disql 窗口),以 dmdba用户执行:

/dm8/bin/dmwatcher /dm8/data/DM01/dmwatcher.ini

在守护进程命令行中输入 show查看状态。关键检查 SYS_STATUS是否变为 OPEN。如果未成功打开,需检查日志、配置,必要时重启守护进程或重新将数据库启动到 MOUNT 状态。

启动备库守护进程 (dmwatcher):

在备库节点,同样新开命令行窗口,以 dmdba用户执行:

/dm8/bin/dmwatcher /dm8/data/DM01/dmwatcher.ini

输入 show查看状态,确保 SYS_STATUS变为 OPEN。

验证数据同步:

在主库的 disql窗口中,查询归档状态:

select * from v$arch_status;

正常情况下,应能看到指向备库的实时归档状态为 VALID。此时主库的修改应能实时同步到备库。

配置与启动监视器 (可选但推荐)

创建监视器配置文件 (dmmonitor.ini):

在监视器节点(或选定的节点)的 /dm8/data/DM01/目录下创建文件:

[MONITOR]
MON_DW_CONFIRM = 1 # 确认模式监视器
MON_LOG_PATH = /dm8/log # 监视器日志路径
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0

[GRP1] # 监控的守护组
MON_INST_OGUID = 888888 # 守护组 OGUID
MON_DW_IP = 192.168.140.100:65101 # 主库守护进程 IP:Port
MON_DW_IP = 192.168.140.101:65121 # 备库守护进程 IP:Port

启动监视器:

在监视器节点,以 dmdba用户执行:

/dm8/bin/dmmonitor /dm8/data/DM01/dmmonitor.ini

在监视器命令行中输入 show,应能看到主备库实例的状态信息。

注册系统服务 (确保开机自启)

主库节点:

注册数据库实例服务: 通常安装时已注册 (DmServiceDMSVR01),确保开机自启:

systemctl enable DmServiceDMSVR01.service

注册守护进程服务:

使用达梦提供的脚本(通常位于 /dm8/bin或 /dm8/script/root)或图形工具“DM 服务查看器”注册守护服务。

例如,在 /dm8/script/root下(需 root权限):

./dm_service_installer.sh -t dmserver -p DMSVR -watcher_ini /dm8/data/DM01/dmwatcher.ini

(具体参数和脚本位置可能因版本略有差异,请参考官方文档)

注册成功后启用自启:

systemctl enable DmWatcherServiceDMSVR.service # 服务名根据注册时指定

备库节点:

注册数据库实例服务: 如果安装时未注册或注册失败,使用 dbca(达梦数据库配置助手) 图形界面或命令行工具注册备库实例服务 (例如 DmServiceDMSVR02)。

注册守护进程服务: 方法同主库,注册备库的守护服务并启用自启。

监视器节点:

注册监视器服务:

cd /dm8/script/root
./dm_service_installer.sh -t dmmonitor -p DMMON -monitor_ini /dm8/data/DM01/dmmonitor.ini

注册成功后启用自启:

systemctl enable DmMonitorServiceDMMON.service # 服务名根据注册时指定

关闭集群顺序 (重要!)
为避免意外切换或数据不一致,关闭集群应遵循特定顺序:
停止确认监视器 (如果运行): 防止其在关闭过程中触发自动切换。
停止备库守护进程: 防止备库守护尝试重启备库实例。
停止主库守护进程: 防止主库守护尝试重启主库实例。
停止主库数据库实例。
停止备库数据库实例。
结语
至此,一个基本的达梦数据库(DM8)主备实时同步集群已经搭建完成。通过配置 MAL 系统、归档、守护进程和监视器,实现了数据的实时同步和高可用保障。在实际生产环境中,务必进行详尽的测试,包括数据同步验证、故障切换测试等,并定期检查守护进程和监视器的状态日志。文中步骤较多,需仔细操作,尤其注意配置文件中的 IP、端口、实例名、OGUID 等关键参数的一致性。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服