1. 达梦数据库主备架构概述
达梦数据库作为国产数据库的代表产品,在企业级应用中越来越受到重视。主备架构是保障数据库高可用的基础方案,通过实时数据同步实现故障自动切换。在CentOS 7.9环境下部署达梦主备集群,需要重点关注以下几个技术要点:
主备部署的核心在于DMWatcher监控进程和DMRMAN备份恢复工具的组合使用。主库(Primary)通过归档日志(ARCHIVELOG)将操作记录同步到备库(Standby),备库持续应用这些日志保持数据一致。当主库故障时,监控服务会自动触发备库接管服务。
注意:达梦7与达梦8在主备配置上存在差异,本文以达梦8为例进行说明。若使用达梦7,需注意dm.ini参数配置的不同。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 系统环境要求
建议使用CentOS 7.9 minimal安装,确保系统干净无冲突服务。基础配置要求:
- 内存:主备节点均建议16GB以上
- 磁盘:/opt目录预留100GB空间(数据文件默认路径)
- 防火墙:开放5236(数据库端口)、5237(监控端口)
- SELinux:建议设置为permissive模式
bash复制# 关闭防火墙(生产环境建议配置规则而非直接关闭)
systemctl stop firewalld
systemctl disable firewalld
# SELinux设置
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
2.2 达梦数据库安装
从官网下载DM8安装包(本文使用dm8_20230104_x86_rh7_64.iso),挂载后执行:
bash复制mkdir /mnt/dm
mount -o loop dm8_20230104_x86_rh7_64.iso /mnt/dm
cd /mnt/dm
./DMInstall.bin -i
安装过程中需注意:
- 选择"典型安装"模式
- 设置dmdba用户密码(建议复杂密码)
- 安装路径保持默认/opt/dmdbms
- 最后执行初始化脚本:
bash复制/opt/dmdbms/script/root/root_installer.sh
3. 主库配置详解
3.1 初始化主库实例
使用dminit工具初始化实例,关键参数说明:
- PAGE_SIZE:页大小,OLTP建议32K
- EXTENT_SIZE:簇大小,默认16
- CASE_SENSITIVE:大小写敏感,建议设为N
- CHARSET:字符集,推荐GB18030
bash复制cd /opt/dmdbms/bin
./dminit PATH=/opt/dmdbms/data PAGE_SIZE=32 EXTENT_SIZE=16 CASE_SENSITIVE=N CHARSET=1
3.2 配置dm.ini关键参数
编辑/opt/dmdbms/data/DAMENG/dm.ini,主要修改以下参数:
ini复制[SYSTEM]
INSTANCE_NAME = DAMENG_PRIMARY # 实例名标识
PORT_NUM = 5236 # 服务端口
DW_PORT = 5237 # 监控端口
ALTER_MODE_STATUS = 0 # 禁止普通用户修改系统表
ENABLE_OFFLINE_TS = 2 # 禁止备库修改表空间
[ARCHIVE]
ARCH_INI = 1 # 启用归档
ARCH_DEST = /opt/dmdbms/arch # 归档路径
ARCH_TYPE = LOCAL # 本地归档
ARCH_FILE_SIZE = 1024 # 单个归档文件大小(MB)
ARCH_SPACE_LIMIT = 0 # 不限制总大小
3.3 启动主库服务
bash复制# 注册服务
/opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DAMENG -dm_ini /opt/dmdbms/data/DAMENG/dm.ini
# 启动服务
systemctl start DmServiceDAMENG
4. 备库部署与同步配置
4.1 备库初始数据准备
在主库执行全量备份:
bash复制./disql SYSDBA/SYSDBA@localhost:5236
SQL> BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/backup/full_bak';
将备份文件拷贝到备库:
bash复制scp -r /opt/dmdbms/backup/full_bak root@standby_ip:/opt/dmdbms/backup/
4.2 备库还原与恢复
在备库执行:
bash复制./dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_bak'"
./dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/full_bak'"
./dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
4.3 备库dm.ini特殊配置
备库需要修改以下参数:
ini复制[SYSTEM]
INSTANCE_NAME = DAMENG_STANDBY
DW_PORT = 5237
ALTER_MODE_STATUS = 1 # 备库允许修改系统表
ENABLE_OFFLINE_TS = 1 # 备库允许表空间离线
[MAL]
MAL_INI = 1 # 启用MAL系统
MAL_HOST = standby_ip # 备库自身IP
MAL_PORT = 5269 # MAL通信端口
MAL_INST_HOST = primary_ip # 主库IP
MAL_INST_PORT = 5269 # 主库MAL端口
MAL_DW_PORT = 5237 # 监控端口
5. 主备监控服务配置
5.1 配置dmwatcher.ini
主备节点均需配置,示例主库配置:
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 = /opt/dmdbms/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1 # 允许自动重启实例
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver
5.2 配置dmmonitor.ini
监控节点配置(可单独部署):
ini复制[MONITOR]
MON_DW_CONFIRM = 1 # 自动确认切换
MON_LOG_PATH = /opt/dmdbms/log # 监控日志路径
MON_LOG_INTERVAL = 60 # 日志记录间隔
[GRP1]
MON_INST_OGUID = 453331 # 与守护组一致
MON_DW_IP = primary_ip:5237
MON_DW_IP = standby_ip:5237
5.3 启动守护进程
主备节点分别执行:
bash复制/opt/dmdbms/bin/dmwatcher /opt/dmdbms/data/DAMENG/dmwatcher.ini
监控节点执行:
bash复制/opt/dmdbms/bin/dmmonitor /opt/dmdbms/data/DAMENG/dmmonitor.ini
6. 主备切换验证与故障处理
6.1 手动切换测试
通过monitor控制台执行:
bash复制./dmmonitor /opt/dmdbms/data/DAMENG/dmmonitor.ini
MON> switchover GRP1
观察输出应包含:
code复制switchover successfully
6.2 自动故障转移测试
模拟主库故障:
bash复制systemctl stop DmServiceDAMENG
30秒内监控日志应出现:
code复制begin to process dw failover...
failover successfully
6.3 常见问题排查
-
归档不同步问题:
- 检查主库arch目录权限
- 验证网络连通性(telnet standby_ip 5269)
- 查看dmmal.ini配置是否正确
-
备库处于MOUNT状态:
sql复制SELECT STATUS$ FROM V$INSTANCE;若不为OPEN,检查:
- 主备OGUID是否一致
- 归档日志是否连续
-
监控服务无法启动:
- 检查端口冲突(netstat -tunlp|grep 5237)
- 查看/opt/dmdbms/log/dmwatcher.log错误信息
7. 性能优化与生产建议
7.1 主备延迟优化
-
调整MAL缓冲区:
ini复制[MAL] MAL_BUF_SIZE = 512 # 默认64MB可适当增大 MAL_COMPRESS_LEVEL = 1 # 启用压缩 -
优化归档传输:
ini复制[ARCHIVE] ARCH_SEND_BUF_SIZE = 1024 # 发送缓冲区大小(KB) ARCH_RECV_BUF_SIZE = 1024 # 接收缓冲区大小
7.2 监控增强配置
-
配置邮件告警:
ini复制[MONITOR] MON_MAIL_FLAG = 1 MON_MAIL_SERVER = smtp.xxx.com MON_MAIL_USER = monitor@xxx.com MON_MAIL_PASS = password MON_MAIL_SENDER = monitor@xxx.com MON_MAIL_RECV = admin@xxx.com -
设置心跳检测:
ini复制[GRP1] MON_HEART_INTERVAL = 10 # 心跳间隔(秒) MON_HEART_DEAD = 30 # 超时时间
7.3 生产环境注意事项
-
定期检查归档空间:
bash复制df -h /opt/dmdbms/arch -
监控主备延迟:
sql复制SELECT ARCH_LAG FROM V$ARCH_STATUS; -
重要配置变更流程:
- 先在备库执行
- 验证无误后再在主库执行
- 避免同时修改主备配置
-
备份策略建议:
- 每日全备+每小时增量备份
- 使用DMRMAN验证备份有效性
- 异地保存至少一份备份
我在实际部署中发现,达梦主备对网络抖动较为敏感。建议生产环境使用专用网络连接主备节点,并通过bonding技术实现网卡冗余。当主备延迟超过5分钟时,建议人工介入检查,避免自动切换导致数据不一致。
