注册
达梦高可用简介
技术分享/ 文章详情 /

达梦高可用简介

气可鼓不可泄 2025/12/26 238 0 0

达梦高可用简介

达梦高可用体系通过服务端主备集群与客户端驱动适配的协同机制实现,二者联动保障应用系统的业务连续性,从根本上避免因数据库节点故障导致的业务中断。其中,服务端需部署 DMDataWatch 主备集群,通过主备架构提供稳定的数据库服务节点;客户端则在驱动层配置包含集群所有节点 IP 的数据源,由驱动自动选择目标连接节点。

image.png

服务端:达梦集群高可用(DMDataWatch)

DMDataWatch 作为达梦高可用的核心服务端组件,通过多模块协同实现主备数据同步与故障自动切换,其核心构成与运行机制如下:

1. 核心组成部件

DMDataWatch 体系包含九大关键部件,各部件分工明确、协同运作:

• 主数据库:对外提供核心业务读写服务,生成业务操作对应的 REDO 日志。
• 备数据库:接收主库同步的 REDO 日志并重演,保持与主库数据一致性,作为故障时的接管节点。
• 联机 REDO 日志系统:实时记录主库的事务操作,为数据同步和故障恢复提供基础。
• 本地 REDO 日志归档服务:将主库联机 REDO 日志定期归档至本地存储,用于数据备份与历史恢复。
• 实时 REDO 日志归档服务:将主库联机 REDO 日志实时传输至备库,是主备数据一致性的关键保障。
• REDO 日志重做服务:运行于备库,对接收的主库 REDO 日志进行重演,确保备库数据与主库完全一致。
• MAL 系统:即管理与应用层通信系统,负责集群内部节点(主备库、监视器等)的信息交互与指令传输。
• 守护进程(Dmwatch):部署于各数据库节点,负责监控本节点数据库实例状态,与其他节点守护进程相互检测,并执行故障切换相关操作。
• 监视器(Dmmonitor):集中监控集群整体状态,接收各节点状态反馈,可手动或自动触发故障切换指令。

2. 高可用实现原理

实时 REDO 归档服务将主数据库生成的 REDO 日志持续发送至备数据库,备库的 REDO 日志重做服务即时重演这些日志,确保主备库数据完全同步。当主数据库发生实例崩溃、存储故障等异常时,守护进程与监视器快速检测到故障,触发备库接管流程,备库升级为主库并对外提供服务,整个过程实现业务无感知切换,满足高可用需求。

3. 典型架构示例

(1)双节点基础集群架构

以下为两节点集群的高可用架构示意图,清晰展现各组件间的交互逻辑:
image.png

(2)两地三中心集群架构

针对高等级可用性需求,可部署两地三中心架构,通过多节点冗余进一步提升系统可靠性,架构如下:
image.png
其中,甲地 A 中心部署主库 DM1 与备库 DM2,通过实时同步保障本地数据一致性;甲地 B 中心部署备库 DM3,与主库实时同步;乙地 C 中心部署备库 DM4、DM5,分别通过实时与异步方式同步主库数据。监视器集群跨中心部署,确保对整个架构的有效监控。

客户端:达梦驱动高可用

1. 核心实现逻辑

驱动高可用的核心思路是:在数据源中预配置集群所有节点信息,驱动启动后自动遍历节点,记录各节点的状态(mount / open/suspend)与角色(Primary / Standby / Normal模式),结合login_mode配置的连接策略,通过自动 “测试连接” 的方式选择符合条件的节点建立连接。其中,“测试连接” 由接口层自动执行,应用程序无需感知底层节点选择过程。

2. 连接创建流程

以应用发起连接请求为起点,驱动层连接创建流程如下:

  1. 用户通过应用程序发起数据库连接请求。
  2. 应用接口(如 JDBC、DPI 等)读取服务名配置(配置位置为连接串或dm_svc.conf文件)。
  3. 接口向配置中的节点依次发起连接请求,并接收节点返回的实例信息(含角色、状态等)。
  4. 接口根据实例信息与预设连接策略判断是否符合连接条件:若符合则创建连接;若不符合或连接失败,则重复步骤 2-3,直至找到目标节点或遍历完所有节点。

3. 多备库连接流程示例

以下为包含一个主库、两个备库的集群连接创建流程示意图:
image.png

4. 关键配置说明

以应用最常用的 JDBC 驱动为例,其高可用配置主要分为本地文件配置与连接串配置两种方式:

(1)本地dm_svc.conf文件配置

在应用服务器的/etc目录下创建或修改dm_svc.conf文件,通过配置服务名关联集群节点及连接策略,可实现故障自动重连。典型配置如下:

配置内容 说明
dw_svc=(192.168.100.136:32141,192.168.100.137:32142) 定义服务名dw_svc,关联集群两个节点的 IP 与端口
LOGIN_MODE=(1) 连接模式:1 表示仅连接主库
SWITCH_TIME=(3) 连接重试次数:为寻找目标节点最多尝试 3 次
SWITCH_INTERVAL=(1000) 连接间隔:两次连接尝试之间间隔 1000 毫秒

login_mode参数取值说明:
• 0:优先连接 Primary(主库)模式,其次 Normal 模式,最后 Standby(备库)模式
• 1:仅连接主库
• 2:仅连接备库
• 3:优先连接 Standby 模式,其次 Primary 模式,最后 Normal 模式
• 4:优先连接 Normal 模式,其次 Primary 模式,最后 Standby 模式

(2)JDBC 连接串配置

在云环境等无法配置/etc/dm_svc.conf文件的场景下,可直接在 JDBC 连接串中指定服务名属性及相关配置,示例如下:
jdbc:dm://test?test=(192.168.137.101:5236,192.168.137.102:5236)&loginMode=1&SWITCH_TIME=3&SWITCH_INTERVAL=1000

该配置与上述dm_svc.conf文件中的dw_svc服务配置效果一致。

典型高可用方案案例

同城高可用方案(物理复制)

(1)方案适用场景
适用于对数据一致性要求极高、灾备距离较近的场景,通过 DMDataWatch 物理复制实现同城两机房的主备同步。
(2)架构部署
在同城 A、B 两个机房分别部署主节点与从节点,通过业务网络对外提供服务,通过独立心跳网络实现主备节点状态检测,利用 DataWatch 技术实现 REDO 日志实时同步。架构示意图如下:
image.png
(3)连接配置
采用如下 JDBC 连接串配置,确保应用优先连接主库,故障时自动切换至同城备库:
jdbc:dm://test?test=(生产主:5236,生产备:5236) & loginMode=1& SWITCH_TIME=(3)& SWITCH_INTERVAL=(1000)

达梦异地高可用(逻辑复制)

(1)方案适用场景
适用于需应对区域级灾难的场景,通过逻辑复制工具实现跨地域的数据同步,在本地集群故障时可切换至异地节点。
image.png
(2)核心配置策略
• 连接串中同时配置本地生产主库、生产备库及异地单实例节点信息。
• 正常状态下,将异地单实例设置为只读或锁定状态,禁止应用连接。
• 当本地集群发生异常时,修改异地单实例配置(解除只读 / 锁定),驱动将自动检测节点状态变化并连接至异地节点。
(3)连接配置
对应的 JDBC 连接串配置如下:
jdbc:dm://test?test=(生产主:5236,生产备:5236,异地单实例:5236) & loginMode=0& SWITCH_TIME=(3)& SWITCH_INTERVAL=(1000)

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服