达梦数据库主备集群部署最佳实践

一、部署前准备

1.1 硬件与环境要求

操作系统

  • 所有节点必须使用 相同版本的操作系统(含内核版本)。
  • 建议统一为 CentOS 7/8 或麒麟等国产化操作系统。

CPU 架构

  • 所有节点 CPU 架构必须一致(如均为 x86_64 或 ARM64)。

网络环境

  • 心跳网络建议:
    • 使用 千兆及以上网络
    • 配置 双网卡绑定(bond) 提升冗余;
    • 心跳 IP 与业务 IP 分离;
    • 推荐使用独立交换机构建心跳内网。

磁盘 IO

  • 推荐使用 高性能 SSD
  • 需提前测试磁盘读写性能是否满足业务并发需求。

1.2 集群规划(示例)

项目 A 节点(主) B 节点(备)
业务 IP 172.16.1.1 172.16.1.2
心跳 IP 192.168.1.1 192.168.1.2
实例名 GRP1_RT_01 GRP1_RT_02
数据库端口 5236 5236
MAL 端口 5336 5336
守护进程监听端口 5436 5436
实例守护端口 5536 5536
OGUID 45331 45331
守护组 GRP1 GRP1
安装目录 /dm /dm
实例目录 /dm/data/ /dm/data/

确认监视器部署在第三台机器:IP 10.10.10.10


二、主节点(A 机器)配置

2.1 初始化实例并备份

1
2
3
4
5
6
7
8
# 初始化主库实例
/dm/bin/dminit PATH=/dm/data/ INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

# 启动数据库
/dm/bin/dmserver /dm/data/DAMENG/dm.ini

# 连接数据库,开启归档
/dm/bin/disql SYSDBA/***@172.16.1.1:5236
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm/data/DAMENG/arch,TYPE=LOCAL,FILE_SIZE=1024,SPACE_LIMIT=51200';
ALTER DATABASE OPEN;

-- 备份
BACKUP DATABASE BACKUPSET '/dm/data/DAMENG/bak/BACKUP_FILE';

-- 修改关键参数
SP_SET_PARA_VALUE(2, 'PORT_NUM', 5236);
SP_SET_PARA_VALUE(2, 'DW_INACTIVE_INTERVAL', 60);
SP_SET_PARA_VALUE(2, 'ALTER_MODE_STATUS', 0);
SP_SET_PARA_VALUE(2, 'ENABLE_OFFLINE_TS', 2);
SP_SET_PARA_VALUE(2, 'MAL_INI', 1);
SP_SET_PARA_VALUE(2, 'RLOG_SEND_APPLY_MON', 64);

关闭前台 dmserver 进程(后续通过服务启动)


2.2 配置归档文件 dmarch.ini

1
2
3
4
5
6
7
8
9
10
11
ARCH_WAIT_APPLY = 0

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/data/DAMENG/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_02

2.3 创建 MAL 配置 dmmal.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
MAL_CHECK_INTERVAL = 10
MAL_CONN_FAIL_INTERVAL = 10
MAL_TEMP_PATH = /dm/data/malpath/
MAL_BUF_SIZE = 512
MAL_SYS_BUF_SIZE = 2048
MAL_COMPRESS_LEVEL = 0

[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01
MAL_HOST = 192.168.1.1
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536

[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.1.2
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536

2.4 创建守护进程配置 dmwatcher.ini

1
2
3
4
5
6
7
8
9
10
11
12
[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45331
INST_INI = /dm/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

2.5 拷贝备份到备机

1
scp -r /dm/data/DAMENG/bak/BACKUP_FILE dmdba@192.168.1.2:/dm/data/DAMENG/bak/

2.6 注册系统服务

1
2
3
4
5
# 注册数据库服务
/dm/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dm/data/DAMENG/dm.ini -m mount

# 注册守护进程服务
/dm/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm/data/DAMENG/dmwatcher.ini

三、备节点(B 机器)配置

3.1 初始化实例(仅结构)

1
/dm/bin/dminit PATH=/dm/data/ INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

3.2 恢复数据

1
2
3
/dm/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak/BACKUP_FILE'"
/dm/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak/BACKUP_FILE'"
/dm/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

3.3 配置 dmarch.ini

1
2
3
4
5
6
7
8
9
10
11
ARCH_WAIT_APPLY = 0

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/data/DAMENG/arch/
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 51200

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01

3.4 配置 dm.ini

确保以下参数正确:

1
2
3
4
5
6
7
8
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64

dmmal.inidmwatcher.ini 与主节点 完全一致,直接复制即可。

3.5 注册服务

1
2
/dm/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dm/data/DAMENG/dm.ini -m mount
/dm/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm/data/DAMENG/dmwatcher.ini

四、配置确认监视器(第三台机器)

4.1 创建 dmmonitor.ini

1
2
3
4
5
6
7
8
9
10
MON_DW_CONFIRM = 1
MON_LOG_PATH = ../log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 512
MON_LOG_SPACE_LIMIT = 2048

[GRP1]
MON_INST_OGUID = 45331
MON_DW_IP = 192.168.1.1:5436
MON_DW_IP = 192.168.1.2:5436

建议同时创建非确认监视器配置 dmmonitor_manual.iniMON_DW_CONFIRM = 0)用于手动切换。

4.2 注册监视器服务

1
/dm/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm/bin/dmmonitor.ini

非确认监视器 无需注册服务,仅用于前台手动操作。


五、启动集群

5.1 启动数据库实例

A 节点:

1
2
3
4
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE PRIMARY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

B 节点:

1
2
3
4
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_OGUID(45331);
ALTER DATABASE STANDBY;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

5.2 启动守护进程(A/B)

1
/dm/bin/DmWatcherServiceWatcher start

5.3 启动监视器(确认模式)

1
2
3
4
5
# 后台启动
/dm/bin/DmMonitorServiceMonitor start

# 或前台调试
/dm/bin/dmmonitor /dm/bin/dmmonitor.ini

六、常用监视器命令

命令 说明
list 查看守护进程配置
tip 查看当前运行状态
show global info 查看所有实例组信息
login / logout 登录/登出(需权限)
choose switchover GRP1 查看可切换为主库的实例
switchover GRP1.GRP1_RT_01 正常切换主备
choose takeover GRP1 主库故障时查看可接管实例
takeover GRP1.GRP1_RT_02 故障接管

主备切换回切建议使用非确认监视器前台执行。


七、客户端连接配置(dm_svc.conf

7.1 文件位置

  • Linux:/etc/dm_svc.conf(或用户有权限目录,如 /home/dmdba/dm_svc.conf

7.2 主备集群配置示例

1
2
3
4
5
6
7
8
TIME_ZONE=(480)
LANGUAGE=(cn)
DMHA=(172.16.1.1:5236,172.16.1.2:5236)

[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1) # 1=只连主库

7.3 应用连接方式

  • Disql:disql SYSDBA/***@DMHA
  • JDBC:jdbc:dm://DMHA

配置 LOGIN_MODE=1 可实现 自动连接当前主库,主备切换对应用透明。


八、启停集群标准流程

启动顺序

  1. 启动主、备数据库实例(DmServiceGRP1_RT_xx start
  2. 启动主、备守护进程(DmWatcherServiceWatcher start
  3. 启动确认监视器(DmMonitorServiceMonitor start

停止顺序

  1. 停止监视器(如有必要)
  2. 停止守护进程(DmWatcherServiceWatcher stop
  3. 停止数据库实例(DmServiceGRP1_RT_xx stop

达梦数据库主备集群部署最佳实践
https://www.xbdba.com/2025/11/25/dm-dmwatcher-install/
作者
xbdba
发布于
2025年11月25日
许可协议