达梦数据守护集群之备库故障模拟

      目录

第1章  概述

1.1  环境介绍

1.2  主要内容

第2章  守护进程故障处理流程

2.1  备库故障处理

2.2  备库故障恢复

第3章  模拟备库故障

3.1  测试准备

3.2  故障分析

3.3  对业务系统的影响


第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)是否影响读写分离

本文的主备集群配置过读写分离,可参考之前的博文:

达梦读写分离集群的配置与测试-CSDN博客

查看配置文件/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值