为了弄清达梦的数据守护,实操主备集群搭建实践,做概念的基本了解。
总结一篇数据守护的概念,包括数据库模式、数据库状态、归档等概念,在搭建主备集群时,能清楚的知道自己是在做什么,为什么这么做。
达梦数据守护概念
达梦数据守护,为数据库容灾方案,通过数据库主备集群,进行实时主备切换,在主库出现异常时,自带切换备库对应用提供数据库服务。
数据守护原理
DM数据守护 DM DATA WATCH
原理:
主库产生的 Redo
日志 » 传到备库 » 备库重演 Redo
日志,实现主备库数据同步
数据守护组成
-
主库
-
备库
-
Redo 日志
-
Redo 日志传输
-
Redo 日志重演
-
守护进程 DmWatcher
-
监视器 DmMonitor
主库
主库使用 Primary
模式,有完整的数据库服务
备库
使用 Standby
模式,提供只读服务
Redo 日志
Redo
日志里,记录了物理数据页内容变动的情况(在部署时,确定页大小,就是为了单页能够记录更多的内容)
Inert \ Update \ Delete \ Create 等 DML
和 DDL
操作都会记录到 Redo 日志里
Redo 日志重演
达梦有专门的 Redo 日志重演的服务
守护进程
DmWatcher
用来监控数据库实例的运行状态和主备库同步情况的,它接收各种消息(数据库实例、监视器的消息)
监视器
DmMonitor
用来监控守护进程、数据库实例的信息,监控实例故障、自动切换主备的。
现有的接触项目的情况,是没有这个的,监视器需要单独一台服务器,来监控数据库实例和守护进程。
不过要是配置在数据库服务器上,应该也是可以的,就是服务器不能异常就行,这种情况只允许进程异常。
普通的项目,通常是一主一备,并没有多余的机器部署 DmMonitor
,所以还是不能实现主备自动切换的,只能手动切换主备
数据库与数据库实例
数据库是一个文件集合,包括数据文件、日志文件、控制文件等,保存在磁盘中
数据库实例,则是一个操作系统进程。通过数据库实例来操作数据库(说白了,我们只需要操作实例,实例会对数据库进行操作)
数据守护需要了解的基本概念
数据库模式
- Normal 模式
- Primary 模式
- Standby 模式
Normal 模式
正常模式,操作没有限制
生成本地归档
Primary 模式
主库的模式
不支持修改表空间文件名,不支持修改归档 arch_ini
参数
生成本地归档,支持实时归档、即时归档、异步归档
临时表空间以外的所有操作都生成 Redo
日志
Standby 模式
备库模式,只读模式
数据库模式切换
在数据库服务器上,进入 disql as SYSDBA/SYSDBA
,使用 SQL
语句切换
|
|
数据库状态
-
Startup 状态
-
After Redo 状态
-
Open 状态
-
Mount 状态
-
Suspend 状态
-
Shutdown 状态
Mount 状态
这个状态下,不能修改数据,不能访问数据库对象
可以执行修改归档配置、控制文件、修改数据库模式
修改为 Mount
状态时,会回滚所有活动事务,已提交事务不影响
Startup 状态
数据库刚启动时默认为这个状态
Open 状态
这个状态,数据库才会正常提供服务
这个状态不能归档操作
Suspend 状态
一般是修改归档状态之前将系统切换为 Suspend
状态,它不会像 Mount
状态那样回滚所有活动事务,而是切换后所有事务可以继续执行
Shutdown 状态
服务退出
数据库状态切换
也是通过 SQL
语句切换,先进入 disql as SYSDBA/SYSDBA
|
|
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
日志,将修改操作在备库执行一遍,依次保持与主库的数据同步
实时主备系统主要由:主库、备库、守护进程、监视器组成
但是多数项目中,并没有部署监视器,都是主备库 + 守护进程的模式
监视器是能在故障发生时自动切换主备的