引言
数据库的高可用性是保障业务连续性的关键。达梦数据库(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 等关键参数的一致性。
文章
阅读量
获赞