注册
达梦数据库数据守护与读写分离集群特性总结
技术分享/ 文章详情 /

达梦数据库数据守护与读写分离集群特性总结

DBA特工 2026/06/26 219 0 0

1 主备介绍

DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求。实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。DM 数据守护的核心思想是监控数据库状态,获取主、备库数据同步情况,为 Redo 日志传输与重演过程中出现的各种异常情况提供一系列的解决方案。
image.png

在DM 数据守护(Data Watch)基础之上通过调整配置变更为读写分离,读写分离集群不依赖额外的中间件,而是通过数据库接口与数据库之间的密切配合,实现读、写操作自动分离特性。DM 的 JDBC、DPI、DCI、ODBC、Provider、dmPython 等接口都可以用来部署读写分离集群。
image.png

2 归档类型

归档是实现数据守护系统的重要技术手段,根据功能与实现方式的不同,DM 数据库的归档可以分为 6 类:本地归档、远程归档、实时归档、即时归档、异步归档和同步归档。不同归档类型可以组成不同的备库复制模式,实现不同的集群特征。

2.1 本地归档

Redo 日志本地归档(Local),就是将 Redo 日志写入到本地归档日志文件的过程。配置本地归档情况下,Normal/PRIMARY 模式库在 Redo 日志写入联机 Redo 日志文件后,将对应的 RLOG_PKG 由专门的归档线程写入本地归档日志文件中。STANDBY 模式库收到主库产生的 Redo 日志后,直接进行本地归档,写入本地归档日志文件中,同时启动 Redo 日志重演。

2.2 远程归档

远程归档(REMOTE ARCHIVE)是将当前节点的远程归档目录配置为另一节点的本地归档目录,以此来共享它的本地归档日志文件。其中,另一节点的本地归档目录必须位于 ASM 共享存储或其他共享磁盘上,以使当前节点可以成功访问。远程归档采用双向配置的方式,即两个节点将自己的远程归档相互配置在对方机器上。DMDSC 集群配置远程归档后,集群中任意实例都可以像访问本地归档一样,访问所有实例产生的归档日志。

远程归档的使用场景:
1.执行数据库恢复时,恢复工具(如 DMRMAN)所在节点需要访问其他各节点归档日志。
2.DMDSC 守护系统中进行主、备库异步归档日志的同步或备库恢复时,DMDSC 控制节点作为发送端,需要访问其他从节点的归档日志。

2.3 实时归档

与本地归档写入保存在磁盘中的日志文件不同,实时归档(Realtime)将主库产生的 Redo 日志通过 MAL 系统传递到备库,实时归档是实时主备和 MPP 主备的实现基础。实时归档只在主库生效,一个主库可以配置 1~8 个实时备库。

实时归档的执行流程是,主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_RLOG_PKG,将原 KEEP_RLOG_PKG 加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。主库收到备库的响应消息,确认备库已经收到 Redo 日志后,再将 Redo 日志写入联机日志文件中。

另外,实时归档也可以支持读写分离集群,实时归档也分为两种模式:事务一致模式和高性能模式,可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置实时归档的模式。这两种模式的具体含义和下一小节 2.2.11.5 中的说明完全相同,区别仅在于配置为实时归档时,dmarch.ini 中的 ARCH_WAIT_APPLY 配置项默认值为 0,即采用高性能模式

2.4 即时归档

即时归档(Timely)在主库将 Redo 日志写入联机日志文件后,通过 MAL 系统将 Redo 日志发送到备库。即时归档与实时归档的主要区别是 Redo 日志的发送时机不同。一个主库可以配置 1~8 个即时备库。

根据备库重演 Redo 日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。即时归档模式可以通过 dmarch.ini 中的 ARCH_WAIT_APPLY 或 WAIT_APPLY 配置项来设置。其中,ARCH_WAIT_APPLY 配置项默认值为 1,表示事务一致模式。

2.5 异步归档

异步归档(Async)由主、备库上配置的定时器触发,根据异步备库的 KEEP LSN 信息,扫描本地归档目录获取 Redo 日志,并通过 MAL 系统将 Redo 日志发送到异步备库。异步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。

每个 PRIMARY 或 STANDBY 模式的数据库最多可以配置 8 个异步备库,Normal 模式下配置的异步备库会自动失效。异步备库可以级联配置,异步备库本身也可以作为源库配置异步备库。

2.6 同步归档

同步归档(Sync)在主库归档日志刷盘后,通过 MAL 系统将 Redo 日志发送到备库。同步备库的 Redo 日志重演过程与实时归档等其他类型的归档完全一致。一个主库可以配置 1~8 个同步备库。

同步归档的执行流程是,主库在归档日志刷盘后,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后将其加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。

3 临时表特性

达梦支持临时表,同时支持在临时表上创建索引。

3.1 临时表类型

临时表有事物级临时表和会话级临时表。

3.1.1 事务级临时表(ON COMMIT DELETE ROWS)

临时表中的数据仅在事务过程(Transaction)中有效,当事务提交(COMMIT)后,临时表的暂时段将被自动截断(TRUNCATE),但是临时表的结构以及元数据还存储在用户的数据字典中。

3.1.2 会话级临时表(ON COMMIT PRESERVE ROWS)

可以跨事务而存在,不过,当该会话结束时,临时表的暂时段将随着会话的结束而被丢弃,临时表中的数据自然也就随之丢弃。但是临时表的结构以及元数据还存储在用户的数据字典中。

3.2 支持索引类型

临时表支持常见的普通索引、复合索引、唯一索引、主键索引、函数索引等。

3.2.1 普通索引

达梦默认基础索引结构,基于 B + 树,支持等值查询、范围查询(> < >= <= BETWEEN)、排序、分组,读写均衡,OLTP 场景首选。

3.2.2 复合索引

多个字段联合构建一棵 B + 树,遵循最左前缀原则,适合多字段联合过滤,能覆盖多条件查询避免回表。

3.2.3 唯一索引

B 树基础上增加唯一性约束,索引字段组合值全局不可重复,允许单列 / 多列组合,NULL 可重复。插入重复值直接报错。

3.2.4 主键索引

临时表指定 PRIMARY KEY 自动生成聚集 B 树索引,一张表仅一个聚集索引,表数据物理按主键有序存储,主键定位速度最快。

3.2.5 函数索引

属于 B 树索引变种,预先计算函数 / 表达式结果并存储在索引中,解决字段包装函数后无法走普通索引的问题,查询表达式必须和索引定义完全一致才能命中。

4 主备集群切换

4.1 switchover切换

switchover用于正常主备切换。如果存在多个备库,需要先执行 choose switchover 命令,选出守护进程组中可以切换的备库。choose switchover 命令选择可切换备库的条件如下:

  1. 主库守护进程是 Open 状态
  2. 备库守护进程是 Open 状态
  3. 主、备库的 OPEN 记录项内容相同,并且守护进程控制文件是 Valid 有效状态(内存值)
  4. 主库正常运行
  5. 备库正常运行
  6. 主库处于 Open 状态
  7. 备库处于 Open 状态
  8. 主库到备库的归档是 Valid 状态

4.2 takeover切换

takeover用于故障切换,用于集群节点故障且短时间无法恢复时切换。为了避免备库接管后,造成守护进程组分裂,手动执行 Takeover 必须满足下列条件:

  1. 主库是 PRIMARY 模式、Open 状态时,发生故障
  2. 手动 Takeover 允许主库守护进程故障,但是要求故障前是 Open/Recovery 状态;或者主库守护进程没有故障(非 ERROR 状态)
  3. 主库故障前到接管备库的归档状态为 Valid
  4. 接管备库是 STANDBY 模式、Open 状态
  5. 接管备库的守护进程处于 Open 或 Startup 状态
  6. 接管备库的守护进程控制文件状态为 Valid(内存值)
  7. 故障主库和接管备库的 Open 记录项内容相同

4.3 takeover force切换

在备库接管失败后,主库仍然不能启动或者及时恢复对外服务的情况下,用户可以使用 takeover force 命令,进行备库强制接管。强制接管具有一定的风险,可能因为备库和故障主库数据不一致,而造成部分数据的丢失,出现数据库分裂的情况,所以应该慎重使用。
强制接管,先通过 Choose Takeover Force 选出符合强制接管条件的备库,再执行 Takeover Force 命令。备库强制接管时,如果接管备库是处于 Mount 状态/STANDBY 模式的库,则会自动 Open 备库,其他执行流程与备库接管一致。强制接管的条件包括:

  1. 不存在活动主库
  2. 备库守护进程处于 Open 或 Startup 状态
  3. 备库实例运行正常
  4. 备库是 STANDBY 模式
  5. 备库处于 Open 或 Mount 状态
  6. 备库的 KLSN 必须是所有备库中最大的
  7. 备库守护进程控制文件必须有效

5 支持多种策略架构灵活组合

达梦数据库支持灵活的架构组合形态:既可以基于单机实例搭建数据守护主备架构,并依托该架构实现读写分离负载分担;也可采用对标 Oracle RAC 的 DSC 共享集群作为主节点,搭配独立DSC备库构建主备集群,对标 Oracle MAA 企业级综合高可用方案。产品支持单机与 DSC 架构自由混搭部署,同时可搭配四类归档策略(实时、同步、即时、异步)差异化数据同步。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服