GaussDB(DWS)《ROACH小课堂Ⅰ测试方法篇之故障测试》
ROACH故障测试
ROACH作为备份恢复工具,在发生故障后的数据恢复能力尤为重要,这也是大多数需要用到恢复的场景。所以,对于故障的验证,不仅仅需要保证故障类型的全面,还需要保证在备份恢复过程时间段上的充分验证。
1 常见故障类型及注入方式
故障类型 |
注入方式 |
gs_roach进程故障 |
kill -9 强杀roach进程 |
CN/DN/GTM集群实例故障 |
mv 数据库实例二进制文件+kill -9实例进程 |
网络故障 |
ifdown/ifup 网卡闪断 |
文件权限不足 |
root用户chmod 000修改文件权限 |
磁盘满/资源不足 |
dd if=/dev/zero of=big_file bs=1M count=20000,生成一个20GB的文件 |
宕机/重启 |
reboot |
2 ROACH故障测试方法
2.1 备份恢复过程关键点注入故障
在备份或者恢复发起后,根据备份恢复流程分析拆解出的关键流程节点,通过匹配$GAUSSLOG/roach/agent日志中打印的信息,精准注入故障。以集群级备份为例:
#1启动gs_roach进程
Creating Thread Roach Agent
#2开始准备备份文件清单
RAGENT_EXEC_PREPARING_METADATA come
#4开始备份行存文件
Copying the data files
#5开启延迟XLOG回收
start delay xlog recycle before xlog copy
#6开启延迟DDL回收
start delay ddl recycle before col file copy
#7create barrier
Setting agent state to \[AGENT_CREATING_BARRIER\]
#8开始备份XLOG
RAGENT_EXEC_BACKUP_XLOGFILES come
#9关闭延迟XLOG回收
stop delay xlog recycle after having copied all needed xlog segments
#10开始备份列存
Start backup table colfiles for physical fine grained backup
#11关闭延迟DDL回收
stop delay ddl recycle after having copied all col files
脚本实现思路:循环查询日志,匹配关键信息,当关键信息匹配成功后,立即执行故障注入。eg.
flag=0;while [[ $flag -eq 0 ]];do file_name=`ls $GAUSSLOG/roach/agent/|grep "current.log"`;if [[ -f $GAUSSLOG /roach/agent/$file_name ]];then flag=`cat $GAUSSLOG /roach/agent/$file_name|grep "enter the callback of rowstore copy"|wc -l`; fi; if [[ $flag -eq 1 ]];then cm_ctl stop &&cm_ctl start; fi; done
2.2 备份恢复过程中随机注入故障
黑盒精准注入故障,并不能保证所有流程分支都被覆盖。并且,人工分析识别也存在认知限制。因此,精准故障注入之外,还需要长时间持续验证备份恢复成功中,随机点故障注入。
脚本实现思路:设置随机的时间间隔,进行故障注入。(需要根据环境上的数据量,先摸底一次备份的时长,然后设置合理的时间间隔)。
Loop:
<a.在备份进程启动后生成随机数,sleep随机数时间后,注入随机类型故障;
<b.检测roach进程退出后,检测是否有core文件,并修复集群状态;
<c.确认集群状态满足断点续做(重入)入口条件后,执行断点续做(重入);
<d.确认最终执行结果,校验数据一致性;
3 ROACH故障测试关注点
1.对于不支持断点续做的备份恢复,操作因为故障注入中断后,要能重入成功。并且恢复后数据要一致且没有core产生,集群其他的OM和业务功能不受影响;
2.对于支持断点续做的备份恢复,操作因为故障注入中断后,要能直接断点续做成功。并且恢复后数据要一致且没有core产生,集群其他的OM和业务功能不受影响;
- 点赞
- 收藏
- 关注作者
评论(0)