注册
DM8 两节点数据守护主备集群搭建与功能测试技术文档
技术分享/ 文章详情 /

DM8 两节点数据守护主备集群搭建与功能测试技术文档

派仔 2026/07/31 173 0 0

1. 实验背景

  • 达梦数据库数据守护集群基于 REDO 日志实时同步实现高可用,分为主节点(Primary)、备节点(Standby)。主库提供读写服务,通过 MAL 心跳链路同步归档日志至备库,备库实时重演日志保证数据一致;主库故障时备机自动接管,故障主机修复后可增量同步重新入群,支持手动切换主备角色。
  • 本次实验环境:CentOS 7 + DM8 版本,两台 VMware NAT 虚拟机,一主一备自动切换数据守护集群,完整覆盖部署、同步验证、故障接管、节点恢复、手动切换全流程。

2. 实验内容与要求

  1. 部署 DM8 两节点主备数据守护集群,验证主库建表、插入数据可实时同步至备库。
  2. 模拟主节点故障,验证备节点自动接管,持续对外提供数据库服务。
  3. 恢复故障主节点,完成增量日志同步,重新加入集群。
  4. 手动切换主备,还原初始主(VM1)备(VM2)架构。

3. 集群规划

参数项 1号机(主节点) 2号机(备节点)
业务IP/心跳IP 192.168.10.138 192.168.10.139
数据库实例名 GRP1_RT_01 GRP1_RT_02
数据库端口 5236 5236
MAL通信端口 61141 61142
MAL_INST_DW_PORT(实例监听守护) 33141 33142
MAL_DW_PORT(守护进程监听) 52141 52142
集群角色 PRIMARY(主库) STANDBY(备库)
达梦安装路径 /home/dmdba/dmdbms /home/dmdba/dmdbms
操作系统用户 dmdba:dinstall dmdba:dinstall
数据库管理员账号 SYSDBA,密码 Dameng@123 SYSDBA,密码 Dameng@123
OGUID 453331 453331
守护组名 GRP1 GRP1

4. 集群前置准备(双节点统一操作)

4.1 配置主机名解析

双节点修改 /etc/hosts,实现IP与主机名互解析,保证集群MAL通信正常。

192.168.10.138 dm1
192.168.10.139 dm2
EOF

4.2 时间同步配置

集群要求双节点时间一致,防止日志同步、守护判定异常。

systemctl start chronyd
systemctl enable chronyd
chronyc tracking

4.3 关闭防火墙和 SELinux

systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

4.3 创建 dmdba 用户并授权

useradd -g dinstall -m -d /home/dmdba dmdba
echo "Dameng@123" | passwd --stdin dmdba
mkdir -p /home/dmdba/dmdbms/{data,backup}
chown -R dmdba:dinstall /home/dmdba/dmdbms

5. 主节点集群配置

5.1 安装DM8

/mnt/dm_iso/DMInstall.bin -i

将安装包(或 ISO)挂载后,以 dmdba 用户执行。安装完成后,以 root 执行

 /home/dmdba/dmdbms/script/root/root_installer.sh。

5.2 初始化主库实例

su - dmdba
dminit PATH=/home/dmdba/dmdbms/data INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=Dameng@123 SYSAUDITOR_PWD=Dameng@123

5.3 生成系统表

dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini

5.4 修改 dm.ini 集群参数

开启数据守护、MAL通信、归档同步相关参数,适配主备集群模式。

cp dm.ini dm.ini.bak
sed -i 's/^INSTANCE_NAME.*/INSTANCE_NAME = GRP1_RT_01/' dm.ini
sed -i 's/^PORT_NUM.*/PORT_NUM = 5236/' dm.ini
sed -i 's/^DW_INACTIVE_INTERVAL.*/DW_INACTIVE_INTERVAL = 60/' dm.ini
sed -i 's/^ALTER_MODE_STATUS.*/ALTER_MODE_STATUS = 0/' dm.ini
sed -i 's/^ENABLE_OFFLINE_TS.*/ENABLE_OFFLINE_TS = 2/' dm.ini
sed -i 's/^MAL_INI.*/MAL_INI = 1/' dm.ini
sed -i 's/^ARCH_INI.*/ARCH_INI = 1/' dm.ini
grep -q "^RLOG_SEND_APPLY_MON" dm.ini || echo "RLOG_SEND_APPLY_MON = 64" >> dm.ini

5.5 新建集群通信配置 dmmal.ini

MAL 为达梦集群心跳通信核心配置,双节点内容必须完全一致。

MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5

[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 192.168.10.138
MAL_PORT = 61141
MAL_INST_HOST = 192.168.10.138
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141

[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.10.139
MAL_PORT = 61142
MAL_INST_HOST = 192.168.10.139
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
EOF

5.6 新建守护进程配置 dmwatcher.ini

配置集群组、主库角色、自动故障切换模式、守护检测参数。

[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdbms/data/DAMENG/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
EOF

5.7 创建 dmwatcher.ini

[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
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 = 0
EOF

5.8 以 Mount 方式启动,设置 OGUID 和 PRIMARY 模式

另开终端连接:
disql SYSDBA/Dameng@123@192.168.10.138:5236
执行:
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(453331);
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=128, SPACE_LIMIT=0';
ALTER DATABASE ADD ARCHIVELOG 'DEST=GRP1_RT_02, TYPE=REALTIME';
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

然后 exit 退出,关闭 dmserver。

5.9 全量脱机备份数据库

通过 rman 对主库做全量备份,用于备库数据恢复,保证主备数据基线一致。

dmrman CTLSTMT="BACKUP DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dmdba/dmdbms/backup/BACKUP_FULL'"

image.png

5.10 传输备份文件至备节点

scp /home/dmdba/dmdbms/data/DAMENG/dm.ini dmdba@192.168.10.139:/home/dmdba/dmdbms/data/DAMENG/
scp /home/dmdba/dmdbms/data/DAMENG/dmmal.ini dmdba@192.168.10.139:/home/dmdba/dmdbms/data/DAMENG/
scp /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini dmdba@192.168.10.139:/home/dmdba/dmdbms/data/DAMENG/ 

image.png

6. 备节点(VMware虚拟机)集群配置

6.1 创建备库数据目录

mkdir -p /home/dmdba/dmdbms/data/DAMENG

6.2 RMAN 恢复主库全量备份

备库不初始化新实例,直接恢复主库备份,保证数据结构完全一致,并更新数据库魔数,适配备库角色。

dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FOR STANDBY FROM BACKUPSET '/home/dmdba/dmdbms/backup/BACKUP_FULL'"
dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

6.3 同步主库 dmmal.ini 文件

直接拷贝主库通信配置,保证双机 MAL 参数完全一致。

6.4 备库 dmwatcher.ini 配置

仅修改角色为 STANDBY,其余参数与主库保持一致。

6.5 以 Mount 方式启动,设置 OGUID 和 STANDBY 模式

dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount

#另开终端
disql SYSDBA/Dameng@123@192.168.10.139:5236

SP_SET_OGUID(453331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

7. 启动双机守护进程及监视器

7.1 主库以 Mount 方式启动

dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount &

7.2 备库以 Mount 方式启动

dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini mount &

7.3 在主机创建监视器配置文件

MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0

[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.10.138:52141
MON_DW_IP = 192.168.10.139:52142
EOF

7.4 启动主节点守护进程

dmwatcher /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini &

7.5 备节点启动守护进程

image.png

7.6 启动监视器

dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini

7.7 验证集群状态

在监视器执行 show,应看到主备库均为 OPEN,守护进程均为 OPEN。

8. 集群功能测试(四大实验要求)

8.1 实验一:主备数据实时同步测试

在主库新建测试表并插入数据,提交事务,验证备库可实时查询同步数据。
主库执行:

INSERT INTO TEST VALUES (1, '集群搭建成功');
COMMIT; 

image.png
备库查询:

SELECT * FROM TEST;

image.png
实验结论:备库成功查询主库新增数据,主备日志实时同步功能正常。

8.2 实验二:主机故障,备机自动接管测试

在主库终端 pkill -9 dmserver 模拟故障。监视器自动检测并执行接管流程(参见监视器日志),备库(139)自动切换为 PRIMARY 并 OPEN。验证新主库可写:
image.png

在监视器中持续观察输出,你会看到:

  • 检测到主库故障 → 启动自动接管
  • 通知备库守护进程进入 TAKEOVER 状态
  • 应用 KEEP_PKG(将主库尚未写入联机日志的 Redo 日志重演)
  • 备库切换为 PRIMARY 模式
  • 强制 OPEN 备库
  • 守护进程切换回 OPEN 状态
  • 清理原主库守护进程信息
    -image.png
    验证备机是否接管了数据库:
    image.png

数据插入成功,业务接管完成。

8.3 实验三:恢复故障主机并重新加入集群

重启原主节点数据库与守护进程,节点自动以备机身份接入集群,自动同步故障期间新主库产生的增量日志,修复数据差异。

/home/dmdba/dmdbms/bin/dmserver 
/home/dmdba/dmdbms/data/DAMENG/dm.ini mount
/home/dmdba/dmdbms/bin/dmwatcher
 /home/dmdba/dmdbms/data/DAMENG/dmwatcher.ini &

观察监视器状态,双节点恢复正常,数据完全一致。image.png

监视器显示原主库自动切换为 STANDBY,并同步增量数据,最终双节点恢复正常。

8.4 实验四:手动主备切换,还原原始集群架构

在当前主库执行手动切换命令,互换主备角色,恢复初始架构。

  • 在监视器中登录

  • 执行手动切换:
    image.png

  • 观察切换过程
    image.png

  • 监视器执行show验证切换结果
    • GRP1_RT_01(138):PRIMARY,OPEN
    • GRP1_RT_02(139):STANDBY,OPEN
    image.png

实验结论:手动主备切换功能正常,集群架构成功复原。

9. 实验总结

本次实验成功搭建达梦两节点自动切换数据守护集群,所有配置均基于真实环境(IP 192.168.10.138/139,实例 GRP1_RT_01/GRP1_RT_02)。通过四大核心实验验证了:
• 主备数据实时同步一致性
• 主机故障备机自动接管,业务不中断
• 故障节点增量恢复并重新加入集群
• 手动主备角色切换,集群架构可复原
实验过程完整,集群运行稳定,充分掌握了达梦数据守护集群的部署与运维技能。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服