实战指南:单机部署达梦DM8数据库主备集群,实现高可用与自动切换 一、 引言为什么需要数据库主备集群在当今企业级应用中数据库的高可用性High Availability和数据可靠性是业务连续性的基石。单点故障可能导致服务中断、数据丢失进而造成巨大的经济损失和声誉损害。达梦数据库DM8作为国产数据库的佼佼者其数据守护Data Watch技术提供了成熟的主备集群解决方案能够在主库故障时实现秒级自动切换保障业务不中断。本文将以单台Linux服务器为环境手把手带你完成达梦DM8双实例主备集群的搭建。你将学到从规划、配置、部署到验证切换的完整流程理解其背后的核心原理并掌握关键的排错技巧。二、集群规划数据库实例A数据库实例B业务 IP192.168.200.115192.168.200.115心跳IP192.168.200.115192.168.200.115实例名GRP1_RT_01GRP1_RT_02实例端口52365237MAL 端口53365337MAL守护进程端口54365437守护进程端口55365537OGUID4533145331守护组GRP1GRP2安装目录/home/dmdba/dmdbms/home/dmdba/dmdbms实例目录/home/dmdba/dmdbms/data/home/dmdba/dmdbms/data归档上限5120051200三 、数据库实例配置实例A配置初始化实例如果在此之前没有创建DM数据库管理用户, 需要使用root权限创建一个专属的dmdba管理用户# 1. 创建达梦专属用户组 dinstall groupadd dinstall 2. 创建 dmdba 用户归属 dinstall 组自动生成家目录 /home/dmdba useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba 3. 设置 dmdba 用户登录密码执行后手动输入密码 passwd dmdba将实例对象GRP1_RT_01存放在/home/dmdba/dmdbms/DAMENG文件目录下:[dmdba~]$ /home/dmdba/dmdbms/bin/dminit PATH/home/dmdba/dmdbms/data/ INSTANCE_NAMEGRP1_RT_01 PAGE_SIZE32 EXTENT_SIZE32 LOG_SIZE2048 SYSDBA_PWD设置你的密码 SYSAUDITOR_PWD设置你的密码2.启动服务/home/dadba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG/dm.iniSTART(启动实例): 读取dm.ini--申请共享内存--启动后台线程--初始化缓存--启动日志线程à启动事务线程--实例运行MOUNT(装载数据): 找到控制文件(有数据文件,redo日志, 表空间,数据库ID,归档信息,角色)à数据库信息Recovery(恢复):数据库异常断开 - 读取Redo日志 -回 访事务 -恢复一致性Open状态: 主库正常运行,应用访问.(数据文件,redo日志,undo,系统表)全部打开- 启动监听,事务,锁管理,SQL执行,缓存3.修改配置文件打开SQL进行语句修改/home/dmdba/dmdbms/bin/disql SYSDBA/你的密码127.0.0.1:5236写SQL语句,修改dm.ini配置文件:SQL SP_SET_PARA_VALUE (2,PORT_NUM,5236); 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);修改dmarch.ini配置文件[dmdba~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmarch.ini配置文件内容:ARCH_WAIT_APPLY 0 #0高性能 1事务一致 [ARCHIVE_LOCAL] ARCH_TYPE LOCAL #本地归档类型 ARCH_DEST /home/dmdba/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文件:[dmdba~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmmal.ini配置参数如下:MAL_CHECK_INTERVAL 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH /home/dmdbs/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 127.0.0.1 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT 5336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST 127.0.0.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.0.0.1 MAL_PORT 5337 MAL_INST_HOST 127.0.0.1 MAL_INST_PORT 5237 MAL_DW_PORT 5437 MAL_INST_DW_PORT 5537创建dmwatcher.ini[dmdba~]$ vi /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini具体配置参数:[GRP1] DW_TYPE GLOBAL DW_MODE AUTO DW_ERROR_TIME 20 INST_ERROR_TIME 20 INST_RECOVER_TIME 60 INST_OGUID 45331 INST_INI /home/dmdba/dmdbms/data/DAMENG/dm.ini INST_AUTO_RESTART 1 INST_STARTUP_CMD /home/dmdba/dmdbms/bin/dmserver RLOG_SEND_THRESHOLD 0 RLOG_APPLY_THRESHOLD 03.进行文件备份拷贝前切换到root权限先给目标实例创建 bak 文件夹创建备份文件夹,并提供文件夹读写权限# 1.创建文件夹 mkdir -p /home/dmdba/dmdbms/data/DAMENG2/bak #2.给权限 chown dmdba:dinstall /home/dmdba/dmdbms/data/DAMENG2/bak拷贝主库备份集到备份文件夹DAMENG2scp -r /home/dmdba/dmdbms/data/DAMENG/bak/BACKUP_FILE dmdba127.0.0.1:/home/dmdba/dmdbms/data/DAMENG2/bak4. 注册服务实例主库注册(以root权限注册)/home/dmdba/dmdbms/script/root/dm_service_installer.sh - t dmserver -p GRP1_RT_01 -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini -m mount创建服务完成,表明注册后生成系统服务DmServiceGRP1_RT_01守护进程服务注册,注册完成后生成守护系统服务: DmWatcherServiceWatcher/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t d mwatcher -p Watcher -watcher_ini /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini到这里实例A配置完成了实例B配置1.实例创建,以dmdba身份创建/home/dmdba/dmdbms/bin/dminit PATH/home/dmdba/dmdbms/data INSTANCE_NAMEGRP1_RT_02 DB_NAMEDAMENG2 SYSDBA_PWDDm123456 SYSAUDITOR_PWDAudit1234562.备库数据恢复启动DMAP# 1.启动DMAP su - dmdba cd /dm8/bin # nohup后台挂起日志输出到nohup.out nohup ./dmap #2.查看dmap是否启动 ps -ef | grep dmap可以看到的结果# 递归修改实例目录归属 chown -R dmdba:dinstall /home/dmdba/dmdbms/data/DAMENG2 # 同步修改备份目录权限 chown -R dmdba:dinstall /home/dmdba/dmdbms/data/DAMENG2/bak # 赋予读写权限 chmod -R 755 /home/dmdba/dmdbms/data/DAMENG2进行数据恢复数据: RESTORE → RECOVER归档 → UPDATE DB_MAGIC# 1.还原所有数据文件、控制文件、重做日志文件 /home/dmdba/dmdbms/bin/dmrman CTLSTMTRESTORE DATABASE /home/dmdba/dmdbms/data/DAMENG2/dm.ini FROM BACKUPSET /home/dmdba/dmdbms/data/DAMENG2/bak/BACKUP_FILE 2.归档日志: /home/dmdba/dmdbms/bin/dmrman CTLSTMTRECOVER DATABASE /home/dmdba/dmdbms/data/DAMENG2/dm.ini FROM BACKUPSET /home/dmdba/dmdbms/data/DAMENG2/bak/BACKUP_FILE #归档日志 3. 修改数据库魔数, 否则主备不能同时启动 /home/dmdba/dmdbms/bin/dmrman CTLSTMTRECOVER DATABASE /home/dmdba/dmdbms/data/DAMENG2/dm.ini UPDATE DB_MAGIC #魔数4.配置文件参数替换 dmarch.iniARCH_WAIT_APPLY 0 #0高性能 1事务一致 [ARCHIVE_LOCAL] ARCH_TYPE LOCAL #本地归档类型 ARCH_DEST /opt/dmdbms/data/DAMENG2/arch/ #本地归档存放路径 ARCH_FILE_SIZE 1024 #单个归档大小单位 MB ARCH_SPACE_LIMIT 51200 #归档上限单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE REALTIME #实时归档类型 ARCH_DEST GRP1_RT_01 #实时归档目标实例名对配置文件中的文件夹手动创建并授权:mkdir -p /home/dmdba/dmdbms/data/DAMENG2/arch chown -R dmdba:dinstall /home/dmdba/dmdbms/data/DAMENG2/arch/ chmod 755 /home/dmdba/dmdbms/data/DAMENG2/arch配置 dmmal.ini 和 dmwatcher.ini5.注册服务# 1.切换权限 su -root 运行成功表明 创建服务(DmServiceGRP1_RT_02)完成 /home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /home/dmdba/dmdbms/data/DAMENG2/dm.ini -m mount 创建守护DmWatcherServiceWatcher2 /home/dmdba//dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher2 -watcher_ini /home/dmdba/dmdbms/data/DAMENG2/dmwatcher.ini启动服务及查看信息1.DmServiceGRP1_RT_01启动服务并查看状态# 1.启动服务 /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_01 start 2. 查看是否启动 /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_01 status 3. 使用SQL进行权限修改 /home/dmdba/dmdbms/bin/disql SYSDBA/你的密码127.0.0.1:52362.开启修改权限,将达梦数据库实例GRP1_RT_01转成主备架构的PRIMARY 主库SQLSP_SET_PARA_VALUE(1, ALTER_MODE_STATUS, 1); SQL SP_SET_OGUID(45331); SQL ALTER DATABASE PRIMARY; SQLSP_SET_PARA_VALUE(1, ALTER_MODE_STATUS, 0);3.DmServiceGRP1_RT_02启动服务,同样的将其修改为备库# 1.启动服务 /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_02 start 2. 查看是否启动,启动成功后将输出running状态 /home/dmdba/dmdbms/bin/DmServiceGRP1_RT_02 status 3. 使用SQL进行权限修改 /home/dmdba/dmdbms/bin/disql SYSDBA/你的密码127.0.0.1:5237开启修改权限,将达梦数据库实例GRP1_RT_01转成主备架构的PRIMARY 主库SQLSP_SET_PARA_VALUE(1, ALTER_MODE_STATUS, 1); SQL SP_SET_OGUID(45331); SQL ALTER DATABASE STANDBY; SQLSP_SET_PARA_VALUE(1, ALTER_MODE_STATUS, 0);4.启动守护进程1和守护进程21. 启动守护1进程 /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start 2.查看守护1进程状态 /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher status 3.启动守护2进程 /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher2 start 4.查看守护2进程状态 /home/dmdba/dmdbms/bin/DmWatcherServiceWatcher2 status如果这里守护进程没有启动,可能是配置文件dm.ini中两个参数ARCH_INI0,MAL_INI0.需要自己去设置为1.可以先查看一下这连个参数是否设置为0了,我这里查到的是为0,默认关闭了归档,不能进行主备同步# 打开配置文件, 找到这两个参数,进行参数更改 vi /home/dmdba/dmdbms/data/DAMENG2/dm.ini配置监视器1.首先创建监视器# 创建dmmonitor.ini vi /home/dmdba/dmdbms/bin/dmmonitor.ini进行参数配置:MON_DW_CONFIRM 1 #0非确认故障手切 1确认故障自切 MON_LOG_PATH /home/dmdba/dmdbms/bin/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.200.115:5436 #IP 对应 MAL_HOSTPORT 对应 MAL_DW_PORT MON_DW_IP 192.168.200.115:54372.注册监视器(使用root权限)/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini3.配置非监视器(可选)vi /home/dmdba/dmdbms/bin/dmmonitor_manual.ini参数配置和上面一样4.启动监视器# 启动监视器 /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start #查看监视器状态 /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor status5.查看监听端口ss -lntp | grep dm可以看到相关服务的端口号6.启动监视器##后台启动 /home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start ##前台启动 (这里测试最好是前台启动) /home/dmdba/dmdbms/bin/dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini进入前台启动后,输入login进行登录,输入SYSDBA账号和密码输入 :showe 可以查看具体的信息,里面有主库与备库的相关信息输入switchover GRP1_RT_02,可以主备切换这是可以看到主库已经换成了GRP1_RT_02四、总结与关键要点通过本文的详细步骤我们成功在单台 Linux 服务器上完成了达梦 DM8 双实例主备集群的搭建。整个过程涵盖了从规划、配置、部署到验证切换的完整流程以下是整个搭建过程的核心总结4.1 搭建流程回顾环境规划明确主备实例的网络规划、端口分配、实例命名和目录结构这是后续所有配置的基础。实例 A 配置创建专用用户和实例初始化启动服务并理解实例启动的四个阶段START、MOUNT、Recovery、Open配置关键参数文件dm.ini、dmarch.ini、dmmal.ini、dmwatcher.ini创建备份并注册主库服务实例 B 配置创建备库实例通过 DMAP 进行数据恢复RESTORE → RECOVER → UPDATE DB_MAGIC同步配置文件并注册备库服务服务启动与角色转换分别启动主备实例服务通过 SQL 命令将实例转换为 PRIMARY主库和 STANDBY备库角色启动守护进程并验证状态监视器配置与验证创建和配置监视器启动监视器并登录验证执行主备切换测试验证集群高可用性4.2 关键配置要点网络配置确保 MAL 端口、守护进程端口等网络配置正确且无冲突归档配置dmarch.ini 中的归档路径和类型必须正确配置否则无法同步数据MAL 配置dmmal.ini 中的实例名、IP 地址和端口必须与实际情况一致守护进程配置dmwatcher.ini 中的 OGUID 必须一致确保主备属于同一守护组参数调整特别注意 ARCH_INI 和 MAL_INI 参数必须设置为 1 才能启用归档和集群通信4.3 常见问题与排查守护进程无法启动检查 dm.ini 中的 ARCH_INI 和 MAL_INI 参数是否已设置为 1主备同步失败验证网络连通性、归档配置和 MAL 链路配置服务注册失败确保使用 root 权限执行注册脚本检查路径和参数是否正确切换失败通过监视器查看实例状态确认主备角色是否正确配置4.4 最佳实践建议测试环境先行在生产环境部署前务必在测试环境完整演练整个流程文档记录详细记录所有配置参数和操作步骤便于后续维护和故障排查定期验证定期进行主备切换测试确保故障切换机制始终有效监控告警配置完善的监控系统实时监控集群状态和性能指标备份策略除了主备同步仍需建立定期物理备份和逻辑备份机制达梦数据库的主备集群方案为企业级应用提供了可靠的高可用保障。通过本文的实践您不仅掌握了具体的搭建步骤更重要的是理解了每个配置项的作用和整个架构的工作原理。在实际生产环境中建议根据业务需求和硬件资源进行适当的调优并建立完善的监控和维护流程。希望本文能为您在达梦数据库高可用架构的实践中提供有价值的参考。如果在实施过程中遇到问题欢迎查阅达梦官方文档或寻求专业技术支持。