目录
第1章 概述
1.1 环境介绍
节点数量:1主1备
归档类型:实时归档
主库实例名:GRP1_RT_01
备库实例名:GRP1_RT_02
守护模式:故障自动切换
数据库版本:DM_20240712
操作系统版本:CentOS7.6
数据守护集群版本:V4.0
集群搭建方法可参考之前的博文:
https://blog.csdn.net/limintjhn8820/article/details/141357019
1.2 主要内容
本文第2章介绍数据守护系统故障处理流程、故障恢复流程;第3章模拟了达梦数据守护集群的备库故障,记录了故障分析过程,通过实验观察备库故障对业务系统的影响。
第2章 守护进程故障处理流程
2.1 备库故障处理
场景一:故障自动切换模式,备库实例发生故障,备库守护进程正常。
守护进程故障处理流程如下:
1、备库守护进程状态由OPEN切换到STARTUP
2、主库守护进程状态由OPEN切换到STARTUP
3、主库数据库实例修改为SUSPEND状态
4、主库守护进程状态切换到FAILOVER状态
5、修改发送归档失败的备库归档状态INVALID
6、主库守护进程状态切换到OPEN状态、同时主库实例状态修改为OPEN
如下图:
本文第3章模拟的就是场景一。
场景二:在场景一的基础上,备库守护进程也发生故障,处理流程稍有不同。
kill 备库实例
kill 备库守护进程
守护进程处理流程:
1、主库守护进程状态由OPEN切换到STARTUP状态
2、主库数据库实例修改为SUSPEND状态
3、主库守护进程状态切换到CONFIRM状态、向确认监视器确认消息
4、确认监视器认为可以FAILOVER,主库守护进程状态切换到FAILOVER状态
5、修改发送归档失败的备库归档状态INVALID
6、主库守护进程状态切换到OPEN状态、同时主库实例状态修改为OPEN
如下图:
2.2 备库故障恢复
上文场景一,备库重启后故障恢复流程:
1、备库实例状态修改为MOUNT状态
2、备库守护进程切换到UNIFY EP状态
3、备库守护进程切换到STARTUP,同时备库实例状态修改为OPEN状态
4、备库守护进程切换到OPEN状态
5、主库守护进程切换到RECOVERY
6、开始故障修复:通常会补发归档日志、设置备库归档为VALID状态等
7、主库守护进程切换到OPEN状态
如下图:
可以查看监视器日志,观察第6步RECOVERY过程,通过日志我们看到整个过程用时3秒。如下图:
第3章 模拟备库故障
3.1 测试准备
1)制造备库故障
移动dm.ini文件,制造启动故障
cd /dm8/data/DB02
mv dm.ini dm.ini_bak
kill 实例服务
netstat -anlpt|grep dm|sort
kill -9 <pid>
2)插入新数据
在主库插入新数据
create TABLE tb_test_s(c1 VARCHAR(10) );
insert into tb_test_s values('aaa');
insert into tb_test_s values('bbb');
insert into tb_test_s values('ccc');
commit;
3.2 故障分析
故障分析方法:查看监视器、登录服务器查看进程、查看动态视图、查看守护进程日志、实例日志、系统日志等。
1)查看监视器
show
tip
在监视器中我们看到,主库正常,备库守护进程正常,实例状态ERROR,备库归档invalid。
还可以登录服务器查看进程状态
netstat -anlpt|grep dm|sort
动态视图查看归档状态
2)查看动态视图,判断故障时间
SELECT arch_dest,LAST_END_TIME,LAST_SEND_CODE,LAST_SEND_DESC
from SYS.V$ARCH_SEND_INFO where arch_dest='GRP1_RT_02';
在2024-09-09 16:46:19,mal系统向GRP1_RT_02发送日志失败。备库发生故障时间可能比这个时间早一点。
确定故障发生时间非常重要,知道了故障发生时间,可以查看这个时间点的守护进程日志、实例日志、系统日志、HISTORY日志,大概率就可以分析出故障发生的原因。
3)查看备库守护进程日志
实例访问失败,拉起实例失败
4)查看备库实例日志
在实例日志中,我们看到,实例启动时找不到dm.ini文件,导致实例启动失败。
(如果是生产环境,我们还应该继续分析dm.ini为什么会丢失?实例为什么会关闭:是实例故障?还是操作系统重启?还是其他原因?)
5)修复dm.ini,完成故障恢复
本例中修复dm.ini文件后,守护进程自动拉起实例服务。自动完成故障恢复。
如下图
3.3 对业务系统的影响
备库实例故障是否影响业务系统对外服务?是否影响读写分离系统?
备注:执行下面测试时,备库仍然是故障状态,还没有执行3.2节第5步的修复动作。
1)是否影响主库业务
我们回顾下本例中主库守护进程故障处理FAILOVER流程
本例中主库open->suspend->open的过程大概有1秒的延时。
另外,故障恢复RECOVER流程主库也有短暂的suspend。
2)是否影响读写分离
本文的主备集群配置过读写分离,可参考之前的博文:
查看配置文件/etc/dm_svc.conf,DMRW是读写分离服务名。
登录
disql SYSDBA/SYSDBA@DMRW
创建测试表
create table tb_test_rw2
(id int,
insert_instance varchar2(20),
update_instance varchar2(20)
);
INSERT操作
insert into tb_test_rw2(id,insert_instance,update_instance)
values(1,(select instance_name from v$instance),'');
commit;
UPDATE操作
update tb_test_rw2 set update_instance=(select instance_name from v$instance);
commit;
查看DML操作的执行节点
select id,insert_instance,update_instance,
(select instance_name from v$instance) select_instance
from tb_test_rw2 ;
可以看到,备库故障期间,INSERT、UPDATE、SELECT操作全部被分配到主库执行。
小结:
1)在1主1备集群中,备库故障,业务系统不会中断;
2)主库Failover过程、Recover过程中会短暂将主库改为SUSPEND状态,这个时间点的业务操作可能会产生非常短暂的卡顿,没有其他影响。
3)读写分离环境中,读操作会分配到主库执行,不影响业务系统
本文结束!祝老师们教师节快乐!
20240910