主备集群 达梦数据库数据守护(一)

字数: 2158

为了弄清达梦的数据守护,实操主备集群搭建实践,做概念的基本了解。

总结一篇数据守护的概念,包括数据库模式、数据库状态、归档等概念,在搭建主备集群时,能清楚的知道自己是在做什么,为什么这么做。

达梦数据守护概念

达梦数据守护,为数据库容灾方案,通过数据库主备集群,进行实时主备切换,在主库出现异常时,自带切换备库对应用提供数据库服务。

数据守护原理

DM数据守护 DM DATA WATCH 原理:

主库产生的 Redo 日志 » 传到备库 » 备库重演 Redo 日志,实现主备库数据同步

数据守护组成

  • 主库

  • 备库

  • Redo 日志

  • Redo 日志传输

  • Redo 日志重演

  • 守护进程 DmWatcher

  • 监视器 DmMonitor

主库

主库使用 Primary 模式,有完整的数据库服务

备库

使用 Standby 模式,提供只读服务

Redo 日志

Redo 日志里,记录了物理数据页内容变动的情况(在部署时,确定页大小,就是为了单页能够记录更多的内容)

Inert \ Update \ Delete \ Create 等 DMLDDL 操作都会记录到 Redo 日志里

Redo 日志重演

达梦有专门的 Redo 日志重演的服务

守护进程

DmWatcher 用来监控数据库实例的运行状态和主备库同步情况的,它接收各种消息(数据库实例、监视器的消息)

监视器

DmMonitor 用来监控守护进程、数据库实例的信息,监控实例故障、自动切换主备的。

现有的接触项目的情况,是没有这个的,监视器需要单独一台服务器,来监控数据库实例和守护进程。

不过要是配置在数据库服务器上,应该也是可以的,就是服务器不能异常就行,这种情况只允许进程异常。

普通的项目,通常是一主一备,并没有多余的机器部署 DmMonitor ,所以还是不能实现主备自动切换的,只能手动切换主备

数据库与数据库实例

数据库是一个文件集合,包括数据文件、日志文件、控制文件等,保存在磁盘中

数据库实例,则是一个操作系统进程。通过数据库实例来操作数据库(说白了,我们只需要操作实例,实例会对数据库进行操作)

数据守护需要了解的基本概念

数据库模式

  • Normal 模式
  • Primary 模式
  • Standby 模式
Normal 模式

正常模式,操作没有限制

生成本地归档

Primary 模式

主库的模式

不支持修改表空间文件名,不支持修改归档 arch_ini 参数

生成本地归档,支持实时归档、即时归档、异步归档

临时表空间以外的所有操作都生成 Redo 日志

Standby 模式

备库模式,只读模式

数据库模式切换

在数据库服务器上,进入 disql as SYSDBA/SYSDBA ,使用 SQL 语句切换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
-- 先将数据库切换为 Mount 状态
ALTER DATABASE MOUNT;

-- 切换为 Primary 模式
ALTER DATABASE PRIMARY;
-- 切换为 Standby 模式
ALTER DATABASE STANDBY;
-- 切换为 Normal 模式
ALTER DATABASE NORMAL;

-- 执行完毕后将数据库实例打开
ALTER DATABASE OPEN;

数据库状态

  • Startup 状态

  • After Redo 状态

  • Open 状态

  • Mount 状态

  • Suspend 状态

  • Shutdown 状态

Mount 状态

这个状态下,不能修改数据,不能访问数据库对象

可以执行修改归档配置、控制文件、修改数据库模式

修改为 Mount 状态时,会回滚所有活动事务,已提交事务不影响

Startup 状态

数据库刚启动时默认为这个状态

Open 状态

这个状态,数据库才会正常提供服务

这个状态不能归档操作

Suspend 状态

一般是修改归档状态之前将系统切换为 Suspend 状态,它不会像 Mount 状态那样回滚所有活动事务,而是切换后所有事务可以继续执行

Shutdown 状态

服务退出

数据库状态切换

也是通过 SQL 语句切换,先进入 disql as SYSDBA/SYSDBA

1
2
3
4
5
6
7
-- 修改为 Open 状态
ALTER DATABASE OPEN;
-- 如果当前处于 Primary \ Standby 模式,则需要加上 Force 子句
ALTER DATABASE OPEN FORCE;

-- 修改为 Mount 状态
ALTER DATABASE MOUNT;

Redo 日志

就前边说的,包括了 DML 和 DDL 操作的记录

Redo 日志包

RLOG_PKG Redo日志包,主句发送日志到备库,就是通过日志包的形式发送的

联机 Redo 日志文件

达梦数据库初始化实例后,是默认有两个联机 Redo 日志文件:DAMENG01.log DAMENG02.log

01 是 Redo 日志主文件

归档

  • 本地归档
  • 远程归档
  • 实时归档
  • 即时归档
  • 异步归档
  • 同步归档

归档模式的不同,只是在于发送 Redo 日志到备库的时机不同

本地归档

归档文件其实保存的就是 Redo 日志

在本地归档情况下,Normal 、Primary 模式在 Redo 日志写入联机 Redo 日志文件后,由 Redo 日志包 RLOG_PKG

写入本地归档日志文件中,Standby 模式则是直接写到本地归档日志中

归档日志一般在 arch 目录,配置了归档才有

归档日志文件是不能覆盖的,每天都会生成很多份归档日志文件,而且是不会主动删掉的,如果删掉最好配置归档日志空间上限(配置后,系统会自动删除早期的归档日志文件)

但是在守护系统中,如果删除归档文件,需要主备都同时删,否则会发生备库接收到的日志缺失,导致主备库无法正常同步数据

实时归档

本地归档是写入磁盘中的日志文件(比如上方说的DAMENG01.log DAMENG02.log

实时归档是将主库产生的 Redo 日志通过 MAL 系统传递到备库

流程大致:

主库 Redo 日志 » 先传到备库并重演 » 重演完成后,备库响应主库 » 主库再把 Redo 日志写入联机日志文件(比如上方说的DAMENG01.log DAMENG02.log

即时归档

主库把 Redo 日志写入联机日志文件 » 然后再通过 MAL 发生 Redo 日志到备库

达梦配置文件说明

端口配置

dm.ini 中有两个参数,用来配置端口:PORT_NUM DW_PORT

PORT_NUM

这个参数是实例的监听端口,也就是连接数据库时,需要输入的端口

DW_PORT

这个是守护进程的端口,用于守护进程监听数据库

服务名配置

看 《DM8数据守护与读写分离集群V4.0.PDF》 5.8 章节

数据守护的多种方案

  • 实时主备
  • MPP主备
  • DMDSC主备
  • 读写分离集群

实时主备

实时主备由一个主库、一个或多个被配了实时归档的备库组成,保障数据库的高可用和数据的安全

主库提供完整的数据库服务,而备库提供只读服务

在主库修改的数据,会产生 Redo 日志,通过实时归档机制,发送到备库,然后备库通过重演 Redo 日志,将修改操作在备库执行一遍,依次保持与主库的数据同步

实时主备系统主要由:主库、备库、守护进程、监视器组成

但是多数项目中,并没有部署监视器,都是主备库 + 守护进程的模式

监视器是能在故障发生时自动切换主备的

Licensed under CC BY-NC-SA 4.0
最后更新于 2024年10月14号 22:36