一、前言
用于解决由于硬件故障、自然灾害等原因导致的数据库服务长时间中断问题,提供不间断数据库服务,达梦数据库推出了达梦数据守护集群软件(DM Data Watch)和达梦读写分离集群(DMRWC)。
达梦数据守护集群软件(DM Data Watch)是一种集成化的高可靠性解决方案,该方案基于数据库REDO日志,不依赖于第三方软件和存储,用于解决由于硬件故障、自然灾害等原因导致的数据库服务长时间中断问题,提供不间断数据库服务,可同时满足用户对数据安全性和高可用性的要求。数据守护包含的主要部件有:主数据库、备数据库、联机REDO日志系统、本地REDO日志归档服务、实时REDO日志归档服务、REDO日志重做服务、MAL系统、守护进程和监视器。其中,守护进程和监视器是两个独立的工具,其他部件集成在DM8数据库服务器DMSERVER中。
达梦读写分离集群(DMRWC)是DM8提供的一个用于提升并发事务处理性能的集群组件。在一个高并发的事务型系统中,当写事务占的比例相对读事务较小时,DM8提供的这种独具创新的方案DMRWC,可通过客户端来实现读、写事务的自动分离,读事务在备机执行,写事务在主机执行,减轻主机的负载。
二、数据库集群状态
截止目前,达梦读写分离集群已经大面积使用在各级机构,但有关读写分离集群的故障处理资料并不多。本编文章主要讨论某一节点数据库服务出现脑裂,在不影响对外继续提供服务的情况下的集群恢复进行具体分析。
用于测试的数据库环境规划:
IP | 用途 | 数据库版本 | 操作系统 | 安装位置 | 服务端口 | 实例名 | 组名 |
192.168.237.113 | 主库 | DM8 | X86 64位 | /dm8 | 5236 | DMSVR01 | GRP1 |
192.168.237.114 | 备库 | DM8 | X86 64位 | /dm8 | 5237 | DMSVR02 | GRP1 |
192.168.237.115 | 确认监视器 | DM8 | X86 64位 | /dm8 | - |
通过确认监视器(192.168.237.115)查看集群服务状态:
cd /dm8/bin
./dmmonitor /dm8/bin/dmmonitor.ini
show
如图,通过确认监视可以看出两台数据库的状态,当数据库出现以上内容,表示集群中节点正常:
WCTLSTAT=VALID,表示守护进程控制文件状态为有效的;
WSTATUS=OPEN,表示守护进程状态为打开;
INAME=DMSVR01/DMSVR02,两台数据库实例名
INST_OK=OPEN,节点的实例状态为打开
ISTATUS=OPEN,数据库状态为打开
IMODE=PRIMARY/STANDBY,节点的实例模式为主/备;
三、数据库脑裂状态示例
同样,通过确认监视器查看数据库状态,发现节点2的数据库守护进程脑裂状态(WCTLSTAT=SPLIT),数据库处于mount状态(ISTATUS=MOUNT),具体如下图所示
尝试打开2节点数据库(DMSVR02)失败,如下图
登录2节点数据库,数据库处于mount状态,不能正常应用,如下图:
四、数据库修复过程
针对出现脑裂状态的达梦主备和读写分离的数据库,同时保证主节点正常应用,恢复过程需要以下步骤:
- 关闭确认监视器dmmonitor服务;
- 关闭备节点dmwatcher服务;
- 确认备节点dmserver服务是否为关闭状态;
- 确认主节点服务是否正常;
- 主节点联机备份;
- 备份备节点配置文件;
- 删除备节点数据库,并恢复数据库;
- 修改备节点状态和配置文件;
- 启动备节点数据库;
- 启动备节点数据库守护服务;
- 启动确认监视器,并查看运行情况。
4.1 关闭确认监视器服务
登录确认监视器服务器192.168.237.115,执行以下命令
ps -ef|grep dmmonitor
Kill -9 XXXX
4.2 关闭备节点dmwatcher服务
登录备节点数据库192.168.237.114,执行以下命令:
systemctl stop DmWatcherServiceDMWATCHER
确认服务是否关闭:
ps -ef|grep dmwatcher
4.3 确认备节点dmserver是否为关闭状态
登录备节点数据库192.168.237.114,执行以下命令:
ps -ef|grep dmserver
一般此时,备节点dmserver为关闭状态,如果存在,需要关闭dmserver服务
4.4 确认主节点服务是否正常
登录主节点数据库192.168.237.113,通过DISQL登录数据库,查看是否运行正常
4.5 主节点联机备份
登录主节点数据库192.168.237.113,通过DISQL登录数据库,执行备份命令
backup database full backupset ‘/dm8/dmbak/full_bak_03’;
将备份文件传输至备节点
4.6 备份备节点配置文件
登录备节点数据库192.168.237.114,对dmmal.ini\dmwatcher.ini\dmarch.ini\dm.ini。
[dmdba@localhost DM01]$ cp dmmal.ini /opt/bak/
[dmdba@localhost DM01]$ cp dmwatcher.ini /opt/bak/
[dmdba@localhost DM01]$ cp dmarch.ini /opt/bak/
[dmdba@localhost DM01]$ cp dm.ini /opt/bak/
4.7 删除备节点数据库,并按照主节点数据库初始化,并恢复数据库
4.7.1删除备节点数据库
[root@localhost tool]# cd /dm8/tool/
[root@localhost tool]# ./dbca.sh
4.7.2按照原备节点重新初始化数据库
4.7.3 按照主节点备份恢复数据库
./dmrman
RESTORE DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/dmbak/full_bak_03';
RECOVER DATABASE '/dm8/data/DM01/dm.ini' FROM BACKUPSET '/dm8/dmbak/full_bak_03';
RECOVER DATABASE '/dm8/data/DM01/dm.ini' UPDATE DB_MAGIC;
4.8 修改备节点状态和配置文件
4.8.1修改dm.ini
vi dm.ini文件,修改配置文件内容
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 1(由于是集群节点恢复,先调整为1,后续调整为0)
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
4.8.2 还原dmmal.ini\dmwatcher.ini\dmarch.ini
[dmdba@localhost bak]$ cd /opt/bak
[dmdba@localhost bak]$ cp dmmal.ini /dm8/data/DM01/
[dmdba@localhost bak]$ cp dmwatcher.ini /dm8/data/DM01/
[dmdba@localhost bak]$ cp dmarch.ini /dm8/data/DM01/
4.9mount启动备节点数据库服务
4.9.1启动数据库服务
./dmserver /dm8/data/DM01/dm.ini mount
4.9.2进入DISQL,修改数据库为备库模式
[dmdba@localhost ~]$ cd /dm8/bin
[dmdba@localhost bin]$ ./disql SYSDBA/DM01SYSDBA@localhost:5237
服务器[localhost:5237]:处于主库配置状态
登录使用时间 : 5.920(ms)
disql V8
SQL> alter database open force;
操作已执行
已用时间: 530.655(毫秒). 执行号:0.
SQL> alter database mount;
操作已执行
已用时间: 360.915(毫秒). 执行号:0.
SQL> sp_set_oguid(453331);
DMSQL 过程已成功完成
已用时间: 3.156(毫秒). 执行号:400.
SQL> alter database standby;
操作已执行
已用时间: 5.032(毫秒). 执行号:0.
SQL>
4.10启动备节点数据守护服务
[root@localhost ~]# systemctl start DmWatcherServiceDMWATCHER
4.11启动确认监视器,确认服务状态
4.11.1 启动确认监视器
登录确认监视器服务器192.168.237.115
[dmdba@localhost bin]$ ./dmmonitor dmmonitor.ini
4.11.2 通过确认监视器启动数据库实例
登录确认监视器
login
打开数据库实例
open database GRP1.DMSVR02
重新查看集群状态
更多资讯请上达梦技术社区了解: https://eco.dameng.com