DM 数据守护(Data Watch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏)、自然灾害(地震、火灾)等极端情况下,避免数据损坏、丢失,保障数据安全,并且可以快速恢复数据库服务,满足用户不间断提供数据库服务的要求
DM 数据守护(DM Data Watch)的实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志,从而实现备库与主库的数据同步。
DM数据库守护系统主要由主库,备库,Redo-log,Redo日志传输,Redo日志传输,守护进程(dmwatcher),监视器组成(dmmonitor),如图1所示。
图1: 数据守护系统结构图
主库
必须是PRIMARY 模式,提供完整数据库服务的实例,一般来说主库是用来直接支撑应用系统的生产库,全集群只能有一个主库。
备库
STANDBY 模式,提供只读数据库服务的实例,全集群至少有一个备库。
Redo 日志
Redo 日志记录物理数据页内容变动情况,在数据库系统故障(比如服务器掉电)重启时,利用 Redo 日志可以把数据恢复到故障前的状态。
Redo 日志传输
主备库之间的 Redo 日志传输,以日志包 RLOG_PKG 为单位,主库通过 MAL 系统发送 Redo 日志到备库。各种不同数据守护类型的区别,就在于主库日志包 RLOG_PKG 的发送时机,以及备库收到 Redo 日志后的处理策略。
Redo 日志重演
Redo 日志重演的过程,就是备库收到主库发送的 Redo 日志后,在物理数据页上,重新修改数据的过程。Redo 日志重演由专门的 Redo 日志重演服务完成,重演服务严格按照 Redo 日志产生的先后顺序,解析 Redo 日志、修改相应的物理数据页,并且重演过程中备库会生成自身的 Redo 日志写入联机日志文件。
守护进程
守护进程(dmwatcher)是数据守护系统的核心工具,监控数据库实例的运行状态和主备库数据同步情况,在出现故障时启动各种处理预案。守护进程是各种消息的中转站,接收数据库实例、其他守护进程、以及监视器发送的各种消息;同时,守护进程也会将收到的数据库实例消息转发给其他守护进程和监视器。守护进程必须和被守护的数据库实例部署在同一台机器上。
监视器
监视器(dmmonitor)用来监控守护系统内守护进程、数据库实例信息,执行用户输入命令、监控实例故障、实现自动切换等。监视器一般配置在数据库实例和守护进程以外的机器上。
(1)基于实时归档(REALTIME)
实时归档的执行流程是,主库在 Redo 日志(RLOG_PKG)写入联机日志文件前,将 Redo 日志发送到备库,备库收到 Redo 日志(RLOG_PKG)后标记为 KEEP_RLOG_PKG,将原 KEEP_RLOG_PKG 加入日志重演任务系统,并马上响应主库,不需要等待 Redo 日志重演结束后再响应主库。主库收到备库的响应消息,确认备库已经收到 Redo 日志后,再将 Redo 日志写入联机日志文件中。,实时归档也分为两种模式:事务一致模式和高性能模式。默认:高性能模式。
事务一致模式:
备库收到主库发送的Redo日志,并重演完成后再响应主库。事务一致模式下同个事务的SELECT语句无论是在主库执行,还是在备库执行,查询结果都满足READ COMMIT隔离级要求。
高性能模式:
备库收到主库发送的Redo日志后,马上响应主库,再启动日志重演。高性能模式下,备库与主库的数据同步存在一定延时(一般情况下延迟时间非常短暂,用户几乎感觉不到),不能严格保证事务一致性。
dmarch.ini中的 ARCH_WAIT_APPLY 配置项:1=事务一致模式,0=高性能模式。
实时归档流程图。如图2所示:
图2: 实时归档流程图
(2)基于即时归档(TIMELY)
主库在Redo日志 (RLOG_PKG) 写入redo-log文件后,将Redo日志发送到备库。根据备又限DM库重演Redo日志和响应主库时机的不同,即时归档分为两种模式:事务一致模式和高性能模式。默认:事务一致性。
即时归档流程图。如图3所示:
图3:归档流程图
(3)基于异步归档(ASYNC)
由主、备库上配置的定时器触发,过MAL系统将Redo日志发送到异步备库。
Redo日志
内达梦数据库批量保存物理事务产生的Redo日志的数据单元,以物理事务PTX为单位保存日志,一个日志包内可连续保存一个或多个PTX。物理事务提交时将Redo日志写入到日志包中。
KEEP_PKG
主库的 RLOG_PKG 日志通过实时归档机制发送到备库后,备库将最新收到的RLOG_PKG保存在内存中,不马上启动重演,这个RLOG_PKG我们称之为KEEP_PKG。而即时归档不存在这种机制。
备库KEEP_PKG日志重演的时机包括
1.备库收到新的RLOG_PKG,会将当前保存的KEEP_PKG日志重演,并将新收到的RLOG_PKG再次放入KEEP_PKG中。
2.收到主库的重演命令
主库已经将KEEP_PKG对应的Redo日志写入redoog文件中,此时备库会启动KEEP_PKG的日志重演。
3.备库切换为新主库
在监视器执行SWITCHOVER或TAKEOVER命令,或者确认监视器通知备库自动接管时,备库会在切换为PRIMARY模式之前,启动KEEP_PKG的日志重演。
1.基本和单机环境一致,操作系统参数调整一致。
2.集群内所有操作系统的数据盘是否独立分区。
3.集群内所有操作系统的目录挂载是否一致。
4.集群内所有操作系统是否开启ntp时间同步。
5.集群内所有操作系统用户(dmdba),id与groupid是否一致。
6.集群内所有服务器是否在同一局域网内,注意网络防火墙策略。
7.备份目录是否共享目录(nfs)。
8.监视器(dmmonitor),一定要独立安装在服务器。
| A机器 | B机器 | |
|---|---|---|
| 业务IP | 192.168.43.4 | 192.168.43.5 |
| 心跳IP | 192.168.233.4 | 192.168.233.5 |
| 实例名 | GRP1_RT_01 | GRP1_RT_02 |
| 实例端口 | 5236 | 5236 |
| MAL端口 | 5336 | 5336 |
| MAL守护进程端口 | 5436 | 5436 |
| 守护进程端口 | 5536 | 5536 |
| OGUID | 45331 | 45331 |
| 确认监视器IP | 192.168.233.6 | 192.168.233.6 |
1)数据库配置文件dm.ini
2)MAL配置文件dmmal.ini(集群内一致)
3)Redo日志归档配置文件dmarch.ini
4)守护进程配置文件dmwatcher.ini(集群内基本一致)
5)确认监视器配置文件dmmonitor_auto. ini
6)普通监视器配置文件dmmonitor_manual.ini
1.服务器A-主库
1)实例、备份数据
2)修改dm.ini
3)修改dmarch.ini
4)修改dmwatcher.ini
5)修改dmmal.ini
6)拷贝实例目录
7)注册服务
2.服务器B-备库
1)修改dm.ini
2)修改dmarch.ini
3)修改dmwatcher.ini
4)修改dmmal.ini
5)恢复数据库
6)注册服务
3.服务器C-监视器
1)确认监视器配置文件
2)非确认监视器配置文件
3)注册服务
4.设置数据库模式
设置数据库模式
设置oguid
启动服务
初始化实例,备份数据
-- 1.实例参数
su - dmdba
/home/dmdba/dmdbms/bin/dminit PATH=/dmdata/data INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=DMdata456 SYSAUDITOR_PWD=DMdata456
-- 2.启动服务
su - dmdba
/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DAMENG/dm.ini
-- 3.开启归档
./disql SYSDBA/DMdata456@192.168.43.4:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ARCHIVELOG 'DEST=/dmdata/data/DAMENG/arch,TYPE=LOCAL,FILE_SIZE=1024,SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
-- 4.备份数据库
SQL> BACKUP DATABASE BACKUPSET'/dmdata/data/DAMENG/bak/BACKUP_FILE';
-- 5.关闭数据库
修改 dm.ini
| 序号 | 配置项 | 参数值 | 配置含义 |
|---|---|---|---|
| 1 | DW_INACTIVE_INTERVAL | 60 | 接收守护进程消息超时时间 |
| 2 | ALTER_MODE_STATUS | 0 | 是否允许手工修改数据库的模式和状态。1表示允许,0表示不允许,此默认为1。 |
| 3 | ENABLE_OFFLINE_TS | 2 | 是否允许offline表空间,1表示允许,0表示不允许,2表示禁止备库,其他放开。守护环境下建议配置为2。 |
| 4 | MAL_INI | 1 | 系统配置开关,0表示不启用MAL系统,1表示启用MAL系统。 |
| 5 | ARCH_INI | 1 | Redo日志归档配置开关,0表示不启动Redo日志归档,1表示启用Redo日志归档 |
| 6 | RLOG_SEND_APPLY_MON | 64 | 统计最近64次日志发送消息 |
| 7 | COMPATIBLE_MODE | 兼容性设置,0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,4:部分兼容 MYSQL,5:兼容 DM6,6:部分兼容 TERADATA,7:部分兼容 POSTGRES,8:部分兼容 DB2。 注:对 COMPATIBLE_MODE 的修改会影响数据存储和操作结果,修改须慎重; |
修改 dmarch.ini
vi /dmdata /data/DAMENG/dmarch.ini
创建 dmwatcher.ini
vi /dmdata/data/DAMENG/dmwatcher.ini
创建 dmmal.ini
vi /dmdata/data/DAMENG/dmmal.ini
拷贝实例目录
scp -r /dmdata/data/DAMENG/ dmdba@192.168.43.5:/dmdata /data/
注册服务
-- 指定实例开机启动的方式为mount
su - root
/home/dmdba/dmdbms/script/root/root_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount
-- 注册守护进程服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
服务器A配置完毕
修改 dm.ini
-- 修改实例名,其它配置参考主库
vi /dmdata/data//DAMENG/dm.ini
INSTANCE_NAME = GRP1_RT_02
修改 dmarch.ini
vi /dmdata /data/DAMENG/dmarch.ini
修改dmwatcher.ini,dmmal.ini
配置与A机器相同
注册服务
-- 指定实例开机启动的方式为mount
su - root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount
-- 注册守护进程服务
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini
恢复数据
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/data/DAMENG/bak/BACKUP_FILE'"
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/data/DAMENG/bak/BACKUP_FILE'"
/home/dmdba/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
服务器B配置完毕
1.非确认监视器配置文件建议放在集群各节点的bin目录中。
2.确认监视器配置文件一定放在监视器所在服务器上面并注册后台自启服务。
确认监视器配置文件dmmonitor.ini
-- 服务器C
vi /home/dmdba/dmdbms/bin/dmmonitor.ini
非确认监视器配置文件dmmonitor.ini
-- 服务器A,B,C
vi /home/dmdba/dmdbms/bin/dmmonitor_manual.ini
服务器C注册服务
-- 注册监视器服务
su - root
/home/dmdba/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
修改数据库状态参数
-- 服务器A
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /dmdata/data//DAMENG/dm.ini mount
./disql SYSDBA/DMdata456@192.168.43.4:5236
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1);
SQL> sp_set_oguid(45331);
SQL> alter database primary;
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',0);
停库
-- 服务器B
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /dmdata/data//DAMENG/dm.ini mount
./disql SYSDBA/DMdata456@192.168.43.5:5236
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1);
SQL> sp_set_oguid(45331);
SQL> alter database standby;
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',0);
停库
启动各项服务
-- 服务器A,启动数据库服务和守护进程服务
su - dmdba
/home/dmdba/dmdbms/bin/DmServiceGRP1_RT_01 start
/home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
-- 服务器B,启动数据库服务和守护进程服务
su - dmdba
/home/dmdba/dmdbms/bin/DmServiceGRP1_RT_02 start
/home/dmdba/dmdbms/bin/DmWatcherServiceWatcher start
-- 服务器C,启动确认监视器
su - dmdba
/home/dmdba/dmdbms/bin/DmMonitorServiceMonitor start
启动非确认监视器
su - dmdba
cd /home/dmdba/dmdbms/bin/
./dmmonitor dmmonitor_manual.ini
show
手动主备切换
-- 查看满足切换条件的实例
choose switchover GRP1
-- 主备切换
switchover GRP1.GRP1_RT_02
达梦数据库技术社区:https://eco.dameng.com
文章
阅读量
获赞
