注册
达梦 DM8 异步主备集群搭建全记录
专栏/技术分享/ 文章详情 /

达梦 DM8 异步主备集群搭建全记录

何处惹尘埃 2026/07/24 233 1 0
摘要

主题理解

在实际生产环境中,数据库的高可用性和数据安全性是架构设计的核心考量。达梦数据库提供了多种主备同步模式,其中异步主备适用于对数据实时性要求不严格、但需要分担主库读压力或做异地容灾的场景

环境信息

  • 操作系统:CentOS 7
  • 数据库:达梦 DM8
  • 主库 IP:192.168.200.18,端口 5236,实例名 GRP1_RT_01
  • 异步备库 IP:192.168.201.90,端口 5237,实例名 GRP1_RT_02

一、核心原理:什么是异步主备?

异步主备通过定时器触发机制,主库将 Redo 日志写入本地归档后,定时器按照设定的时间间隔(最小 1 分钟)将归档日志批量发送到备库,备库接收并重演日志

与实时主备的关键区别在于:

  • 实时主备:事务提交时立即发送日志,备库实时重演,延迟毫秒级
  • 异步主备:定时器触发批量发送,存在分钟级延迟

二、操作步骤

若无特别说明,以下操作均使用 dmdba 用户执行

2.1 环境准备与数据恢复

由于之前的2节点集群已经准备好了相同文件,本次操作在之前的基础上进行

即,/data/dmdata1/DAMENG/ 和 /data/dmdata2/DAMENG/ 目录下包含 SYSTEM.DBF、MAIN.DBF、dm.ini 等数据库文件。

2.2 主库配置

2.2.1 修改 dm.ini——开启定时器

主库需要启用定时器功能,才能触发异步归档发送

vi /data/dmdata1/DAMENG/dm.ini

找到 TIMER_INI 参数,将其修改为:

TIMER_INI = 1

说明:TIMER_INI=1 表示启用定时器,这是异步同步的核心开关

2.2.2 修改 dmarch.ini——配置异步归档

先备份原文件,再修改归档配置:

cp /data/dmdata1/DAMENG/dmarch.ini /data/dmdata1/DAMENG/dmarch.ini.bak vi /data/dmdata1/DAMENG/dmarch.ini

内容如下:

[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /data/dmarch1 ARCH_FILE_SIZE = 128 ARCH_SPACE_LIMIT = 0 [ARCHIVE_ASYNC] ARCH_TYPE = ASYNC # 异步归档类型 ARCH_DEST = GRP1_RT_02 # 异步备库实例名 ARCH_TIMER_NAME = RT_TIMER # 定时器名称,与 dmtimer.ini 一致

ARCH_TYPE = ASYNC 表示异步归档
ARCH_DEST 必须与备库 dm.ini 中的 INSTANCE_NAME 完全一致
ARCH_TIMER_NAME 与 dmtimer.ini 中的定时器名称必须匹配

2.2.3 创建 dmtimer.ini——配置定时调度

dmtimer.ini 用于配置定时器,控制异步归档的触发频率

vi /data/dmdata1/DAMENG/dmtimer.ini

内容如下:

[RT_TIMER] # 定时器名称,与 dmarch.ini 中的 ARCH_TIMER_NAME 一致 TYPE = 2 # 2: 按日执行[reference:16] FREQ_MONTH_WEEK_INTERVAL = 1 FREQ_SUB_INTERVAL = 0 FREQ_MINUTE_INTERVAL = 1 # 同步间隔 1 分钟(最小间隔)[reference:17] START_TIME = 00:00:00 END_TIME = 23:59:59 DURING_START_DATE = 2026-07-14 10:00:00 DURING_END_DATE = 9999-12-31 23:59:59 NO_END_DATE_FLAG = 1 DESCRIBE = RT TIMER IS_VALID = 1

FREQ_MINUTE_INTERVAL = 1 表示每 1 分钟触发一次同步
TYPE = 2 表示按日执行的定时器
必须包含 FREQ_MONTH_WEEK_INTERVAL 和 FREQ_SUB_INTERVAL 字段,否则启动时会报 -832 [Invalid month or week interval] 错误

2.3 备库配置

2.3.1 修改备库守护进程类型

一主一异步备库场景下,备库守护进程需要配置为 LOCAL 类型

vi /data/dmdata2/DAMENG/dmwatcher.ini

将 DW_TYPE 从 GLOBAL 改为 LOCAL:

DW_TYPE = LOCAL

说明:LOCAL 守护类型直接 Open 数据库实例;GLOBAL 守护类型需要与其他守护进程协调信息,自动切换实例状态

2.3.2 确认备库实例名

grep INSTANCE_NAME /data/dmdata2/DAMENG/dm.ini

输出应为: INSTANCE_NAME = GRP1_RT_02

2.4 启动集群

由于之前的系统服务可能已被卸载,本次采用直接启动 dmserver 的方式

终端 1——启动主库:

su - dmdba cd /home/dmdba/dmdbms/bin ./dmserver /data/dmdata1/DAMENG/dm.ini

终端 2——启动备库:

su - dmdba cd /home/dmdba/dmdbms/bin ./dmserver /data/dmdata2/DAMENG/dm.ini

预期输出:两个终端均显示 SYSTEM IS READY.,表示数据库已成功启动。

2.5 切换数据库为 OPEN 状态

启动后数据库默认处于 MOUNT 状态,需要切换为 OPEN 才能执行 DDL/DML 操作

主库操作:

disql SYSDBA/Admin2026@localhost:5236

执行:

ALTER SYSTEM SET 'ALTER_MODE_STATUS' = 1 BOTH; ALTER DATABASE OPEN FORCE;

备库操作:

disql SYSDBA/Admin2026@localhost:5237
ALTER SYSTEM SET 'ALTER_MODE_STATUS' = 1 BOTH; ALTER DATABASE OPEN FORCE;

2.6 验证同步

主库插入测试数据:

disql SYSDBA/Admin2026@localhost:5236
CREATE TABLE TEST_ASYNC (ID INT, NAME VARCHAR(30)); INSERT INTO TEST_ASYNC VALUES (1, '异步测试数据'); COMMIT;

等待约 1 分钟(定时器间隔),然后备库查询

disql SYSDBA/Admin2026@localhost:5237
SELECT * FROM TEST_ASYNC;

预期结果:备库能够查询到主库插入的数据,证明异步同步成功。

结果如图所示:
截屏20260714 11.23.22.png截屏20260714 11.24.33.png

可以看到相差一分钟是可以查询到插入的信息的

三、踩坑记录与解决方案

问题 1:启动时报 -832 [Invalid month or week interval]

dmserver startup failed, code = -832 [Invalid month or week interval]

原因:dmtimer.ini 文件缺少 FREQ_MONTH_WEEK_INTERVAL 或 FREQ_SUB_INTERVAL 字段。

解决方案:确保 dmtimer.ini 包含完整字段:

[RT_TIMER] TYPE = 2 FREQ_MONTH_WEEK_INTERVAL = 1 FREQ_SUB_INTERVAL = 0 FREQ_MINUTE_INTERVAL = 1 ...

问题 2:ALTER DATABASE OPEN 失败,提示 Dmwatcher is active

[-720]: Dmwatcher is active, or current configuration(ALTER_MODE_STATUS) not allowed to alter database.

原因:守护进程处于活动状态时,不允许通过 SQL 修改数据库模式。

解决方案:使用 ALTER DATABASE OPEN FORCE 强制切换:

ALTER SYSTEM SET 'ALTER_MODE_STATUS' = 1 BOTH; ALTER DATABASE OPEN FORCE;

问题 3:数据库始终处于 MOUNT 状态

现象:启动后 state is mount,无法执行建表操作。

原因:

  • 启动命令中误加了 mount 参数
  • dm.ini 中存在 MOUNT=1 配置
  • 数据库日志或控制文件状态异常

解决方案:

  1. 检查启动命令,确保没有 mount 参数
  2. 在 dm.ini 中添加 MOUNT = 0 强制以 OPEN 模式启动
  3. 执行 ALTER DATABASE OPEN FORCE 强制切换

四、异步主备 vs 实时主备:核心差异对比

对比维度 实时主备 异步主备(本次搭建)
同步方式 事务提交时实时发送 Redo 日志到备库 定时器触发,批量发送归档日志
数据延迟 毫秒级,业务层几乎无感知 分钟级(最小 1 分钟),存在可感知延迟
对主库性能影响 需等待备库确认,有一定性能开销 几乎无影响,主库提交无需等待备库
守护进程类型 GLOBAL(支持自动协调切换) LOCAL(仅本地管理)
是否需要定时器 不需要 必须配置 dmtimer.ini
归档类型 ARCH_TYPE = REALTIME ARCH_TYPE = ASYNC
故障切换 支持自动故障切换(配合监视器) 仅支持手动接管
适用场景 网络稳定、需强一致性的场景(如金融交易) 允许短时数据不一致、异地容灾分担读压力的场景

五、总结

5.1 核心配置要点

  1. 主库 dm.ini:TIMER_INI = 1 开启定时器
  2. 主库 dmarch.ini:增加 ARCH_TYPE = ASYNC 的异步归档配置
  3. 主库 dmtimer.ini:配置定时器,FREQ_MINUTE_INTERVAL 控制同步间隔
  4. 备库 dmwatcher.ini:一主一异步备库场景下,DW_TYPE = LOCAL
  5. 主备库 dmmal.ini:需保持一致,包含所有节点的 MAL 配置

5.2 关键注意事项

  • 修改配置文件前务必先备份
  • 异步归档的最小触发间隔是 1 分钟
  • 如果只需要一主一异步备库,主库守护进程需配置为 LOCAL
  • 主库配置了异步备库后,备库上也需要增加相同的异步备库配置,保证备库切换为主库后可继续同步
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服