注册
达梦DM8读写分离集群搭建
专栏/技术分享/ 文章详情 /

达梦DM8读写分离集群搭建

文橘本可 2026/07/23 89 0 0
摘要

前言

达梦读写分离集群底层依赖数据守护机制,主库全权承担数据写入、修改事务操作,备库实时同步主库数据,同时分担业务查询压力,有效提升数据库整体吞吐量,适配读多写少业务场景。

本文记录单机双实例、两节点DM8读写分离集群完整搭建流程,重点标注读写分离集群与普通主备集群的核心配置差异,通用基础配置步骤精简处理,可直接复刻部署。

一、环境准备

1.1 集群整体规划

角色 IP地址 实例名 数据库端口 MAL端口 守护端口 监听守护端口
主库 192.168.200.208 GRP1_RT_01 5236 61141 52141 33141
备库 192.168.201.128 GRP1_RT_02 5237 61142 52142 33142
确认监视器 192.168.200.208

基础环境信息

  • 操作系统:CentOS 7 / Linux
  • 数据库版本:DM8 V8
  • 数据库安装目录:/home/dmdba/dmdbms
  • 主库数据目录:/data/dmdata/DAMENG/
  • 备库数据目录:/data/dmdata_STB/DAMENG_STB/
  • 数据库账号密码:SYSDBA / Wei050210
  • 集群OGUID:453331

二、核心配置文件(读写分离重点)

所有差异化核心配置如下,为集群搭建关键,需严格对照配置。

2.1 dmmal.ini(主备库完全一致)

MAL为集群节点日志传输、状态同步核心通道,读写分离集群必须配置,主备库文件内容需完全相同。

MAL_CHECK_INTERVAL = 10 MAL_CONN_FAIL_INTERVAL = 10 MAL_TEMP_PATH = /data/dmdata/malpath [MAL_INST1] MAL_INST_NAME = GRP1_RT_01 MAL_HOST = 192.168.200.208 MAL_PORT = 61141 MAL_INST_HOST = 192.168.200.208 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.201.128 MAL_PORT = 61142 MAL_INST_HOST = 192.168.201.128 MAL_INST_PORT = 5237 MAL_DW_PORT = 52142 MAL_INST_DW_PORT = 33142

端口说明:MAL_PORT=日志传输端口;MAL_DW_PORT=守护进程通信端口;MAL_INST_DW_PORT=监视器连接端口

2.2 dmarch.ini(强制TIMELY即时归档,核心差异)

读写分离集群禁止使用REALTIME实时归档,必须使用TIMELY即时归档,日志写入联机日志后立即同步至备库。

主库 dmarch.ini

ARCH_WAIT_APPLY = 0 # 0=高性能模式,1=事务强一致模式 [ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RT_02 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /data/dmdata/dmarch

备库 dmarch.ini(必须配置反向TIMELY归档,否则守护进程启动报错)

[ARCHIVE_TIMELY1] ARCH_TYPE = TIMELY ARCH_DEST = GRP1_RT_01 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /data/dmarch_STB/DAMENG_STB

2.3 dmwatcher.ini(守护进程 GLOBAL 模式)

读写分离集群守护进程类型必须为 GLOBAL,主备库配置基本一致,仅 INST_INI 路径不同。

主库 dmwatcher.ini

[GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO # AUTO自动切换/MANUAL手动切换 INST_OGUID = 453331 INST_INI = /data/dmdata/DAMENG/dm.ini INST_AUTO_RESTART = 1

备库 dmwatcher.ini

[GRP1] DW_TYPE = GLOBAL DW_MODE = AUTO INST_OGUID = 453331 INST_INI = /data/dmdata_STB/DAMENG_STB/dm.ini INST_AUTO_RESTART = 1

2.4 dm_svc.conf(客户端读写分离核心)

该文件控制客户端读写请求分流策略,存放于应用服务器,Linux默认路径:/etc/dm_svc.conf

TIME_ZONE=(480) LANGUAGE=(cn) RW_CLUSTER=(192.168.200.208:5236,192.168.201.128:5237) [RW_CLUSTER] LOGIN_MODE=(1) # 写请求仅连接主库 RW_SEPARATE=(1) # 开启读写分离功能 RW_PERCENT=(30) # 读请求分流比例:主库30%、备库70% SWITCH_TIMES=(3) SWITCH_INTERVAL=(200)

三、集群启动与验证

3.1 基础前置配置

修改主备库 dm.ini 核心参数:

ALTER_MODE_STATUS=0 ENABLE_OFFLINE_TS=2 MAL_INI=1 ARCH_INI=1

创建确认监视器配置 dmmonitor.ini(MON_DW_CONFIRM=1 开启确认监视器)

3.2 标准启动顺序(严格按序执行)

# 1. Mount方式启动主备数据库 dmserver /data/dmdata/DAMENG/dm.ini mount dmserver /data/dmdata_STB/DAMENG_STB/dm.ini mount # 2. 设置集群OGUID及数据库角色 ## 主库执行 SP_SET_OGUID(453331); ALTER DATABASE PRIMARY; ## 备库执行 SP_SET_OGUID(453331); ALTER DATABASE STANDBY; # 3. 启动主备库守护进程 dmwatcher /data/dmdata/DAMENG/dmwatcher.ini dmwatcher /data/dmdata_STB/DAMENG_STB/dmwatcher.ini # 4. 启动集群监视器 dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini

QQ20260716154543.png

3.3 数据同步验证

主库执行建表、插入数据

CREATE TABLE TEST_RW (ID INT, NAME VARCHAR(50)); INSERT INTO TEST_RW VALUES (1, 'PRIMARY_INSERT'); COMMIT;

备库执行查询验证

SELECT * FROM TEST_RW;

预期结果:备库可正常查询到主库新增数据,数据同步正常。
QQ20260716161950.png

3.4 读写分离效果验证

通过集群服务名 RW_CLUSTER 建立多个数据库连接,执行以下SQL查看当前连接实例:

SELECT SF_GET_PARA_STRING_VALUE(1, 'INSTANCE_NAME');

预期效果:多次新建连接查询,实例名交替出现 GRP1_RT_01(主库)、GRP1_RT_02(备库),符合 30%主库、70%备库的读请求分流比例。

四、读写分离集群 VS 普通实时主备集群(核心差异)

对比维度 实时主备集群 读写分离集群
归档类型 REALTIME 实时归档 TIMELY 即时归档(强制)
MAL配置 无需配置 必须配置dmmal.ini
备库角色 冷/温备,不承担查询 热备,分担读负载
备库状态 默认MOUNT 必须OPEN
客户端路由 手动指定IP连接 dm_svc.conf自动读写分流
数据一致性 强一致性 最终一致性(可参数调整)

五、常见问题排查

  • 问题1:备库守护启动报错 not configured TIMELY archive
    解决:检查备库dmarch.ini是否配置指向主库的TIMELY归档,缺失则补充配置。

  • 问题2:备库无法查询,始终为MOUNT状态
    解决:正常启动守护进程后会自动OPEN;可手动在监视器执行 open standby 唤醒备库。

  • 问题3:集群读写不分离
    解决:确认dm_svc.conf中 RW_SEPARATE=1,且配置文件被数据库驱动正常加载。

六、总结

DM8读写分离集群核心依赖三大配置:dmmal.ini节点通信、TIMELY即时归档、dm_svc.conf读写分流。相较于普通主备集群,可充分利用备库算力,分担查询压力,在保证集群高可用的同时,大幅提升读多写少业务的系统吞吐量。

搭建核心在于区分归档类型、开启全局守护模式、配置客户端分流策略,其余通用部署步骤与标准主备集群一致。

读写分离集群 vs 主备集群:核心差异

  1. 核心目标
    主备集群:高可用(HA),保障业务连续性

读写分离集群:高可用 + 高性能,提升并发吞吐量

  1. 备库角色
    主备集群:冷备/温备,一般不对外提供读服务

读写分离集群:热备,主动承担读查询负载

  1. 归档类型
    主备集群:REALTIME(实时归档),日志写入前发送备库

读写分离集群:TIMELY(即时归档),日志写入后发送备库

  1. 备库状态
    主备集群:通常为 MOUNT

读写分离集群:必须为 OPEN(才能提供读服务)

  1. MAL系统
    主备集群:不需要

七、读写分离集群:必须配置 dmmal.ini

  1. 客户端路由
    主备集群:手动指定IP,或依赖第三方中间件

读写分离集群:通过 dm_svc.conf 自动分发读写

  1. 事务一致性
    主备集群:天然强一致(读写都在主库)

读写分离集群:存在"写后读"延迟风险,通过 ARCH_WAIT_APPLY 控制(0=高性能/最终一致,1=强一致/性能衰减)

  1. 故障切换
    主备集群:支持手动/自动切换,切换后应用需更新连接

读写分离集群:同样支持切换,但切换后需更新路由或等待驱动自动感知

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服