某客户多节点磁盘故障集群恢复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: gbase 数据 某客户多节点磁盘故障集群恢复

背景介绍:
现场集群为6个节点(3coor+6data,一主一备),客户巡检时发现集群多个节点raid存在磁盘故障,更换磁盘后其中3个节点无法挂载或者文件系统无法访问(后了解为工程师操作失误导致),其中一个节点3、5修复失败,数据完全丢失,节点6由存储专家恢复到windows服务器(整个/opt目录)!
处理过程:
1、准备一台新服务器,用于检查恢复到windows的数据是否可用。由于服务器资源不足,考虑到节点5数据已完全格式化,现场直接修改节点5、节点6交换IP后,将节点6恢复数据拷贝到节点5!
2、检查恢复目录挂载情况,修改目录属组
3、启动gbase服务gcluster _services gbase start ,或者/opt/gnode/server/bin/gbase start
启动失败,排查发现,目录恢复拷贝后,数据库目录权限完全改变,和正常节点逐一核对文件和目录权限,并调整
find /opt/gnode -type d -exec ls -dl {} \;
find /opt/gnode -type d -exec ls -fl {} \;
.…

4、启动正常,查看节点库表完整性
show databases;
select table_schema,table_name from information_schema.tables;
通过脚本确认表数据文件是否完整(进行全表扫描,并对表数据文件进行checksum校验),脚本参考如下:

checkTabIntegrity.sh

!/bin/bash

file=/opt/checksum/tblist.txt
basedir=/opt/checksum
if [ ! -d ${basedir} ];then
mkdir -p ${basedir}/log
fi
gncli -ugbase -pgbase -Nse "select table_schema||'.'||table_namefrom information_schema.tables where TABLE_TYPE='BASE TABLE' and table_schema not in('information_schema','performanceschema','gbase','gclusterdb','gctmpdb'); " > ${file}
if [ -z ${file} ]; then
while read tbname
do
checksum ${tbname%%.} ${tbname##.} >${basedir}/log/${tbname%%.*}
${tbname##.} .log
flag=`cat ${basedir}/log/${tbname%%.
} _${tbname##.} .log | grep '[CHECKSUM_ERROR]' | wc -lif [ $flag > 0 ]; then echo ${tbname} >> ${basedir}/checksumErrTablist.txt else echo ${tbname} >> ${basedir}/checksumOkTablist.txt fi cnt=gncli -ugbase -pgbase -Nse"select count() from ${tbname} where rowid%65536=1;"`
if [ $? = 0 ]; then
echo ${tbname}_${cnt}>>${basedir}/scanRowidOkTablist.txt
else
echo ${tbname}>>${basedir}/scanRowidErrTablist.txt
fi
done < ${file}
fi

说明:
对于rowid扫描通过的表,基本可以确认数据可以正常查询,如果checksum校验异常,gbase通过同步事件,即gc_sync_client命令进行自动同步恢复时会报错CHECKSUM_ERROR,导致数据文件同步恢复失败,需尝试scp 分片文件手动同步,refresh table tablename后进行测试,如果不成功,只能考虑数据导出或者重建表;
对于rowid扫描失败,checksum则必然出现错误,则说明表数据文件有丢失或者损坏,导致数据丢失,可根据需要查询确认可恢复的数据量(该过程比较繁琐);
checksum异常,说明文件恢复前后不一致,并不一定说明表数据丢失,只是正常的gc_sync_client事件进程无法正常同步恢复,需手动scp恢复确认;
只有当checksum和全表扫描通过才能基本确认恢复的表数据是完整的,并且可以通过事件自动同步恢复。
5、最终扫描完成后发现部分表主备分片都损坏,对于这部分分片损坏的表,向客户说明,经客户同意后重建损坏分片,保留正常分片数据。

  6、最后采用节点替换方式恢复节点3和节点5,至此本次故障处理完成.
相关文章
|
Kubernetes 容器
使用sealer部署k8s记录
使用sealer部署k8s记录
|
关系型数据库 MySQL 项目管理
YYDS,只用几条命令轻松搭建自己的项目管理平台jira
使用Docker快速搭建Jira的指南:首先确保已安装Docker,然后拉取`cptactionhank/atlassian-jira-software:8.1.0`和MySQL镜像。运行Jira和MySQL容器,分别绑定端口并创建jira数据库。访问Jira服务进行设置,包括选择语言、自定义设置、连接数据库、基础配置、设置密钥及管理员信息。通过Docker,便捷地部署和管理Jira,提升团队项目管理效率。
|
JavaScript
探索 Vue 中的 bus.$emit:实现组件通信的强大工具
探索 Vue 中的 bus.$emit:实现组件通信的强大工具
探索 Vue 中的 bus.$emit:实现组件通信的强大工具
|
8月前
|
消息中间件 Kafka
使用kafka consumer加载数据加载异常并且报source table and destination table are not same错误解决办法
使用kafka consumer加载数据加载异常并且报source table and destination table are not same错误解决办法
|
8月前
初次体验通义灵码有感
初次体验通义,待工具越来越完善,原来需要自己做的事情会越来越少,开发也会变得更加简单
|
8月前
|
SQL 缓存 数据库
SQL慢查询优化策略
在数据库管理和应用开发中,SQL查询的性能优化至关重要。慢查询优化不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将详细介绍针对SQL慢查询的优化策略。
|
8月前
|
前端开发
通义灵码,厉害👍👍👍
通过简单的几句话描述,即可快速生成完整的前端页面,大幅提高开发效率,降低前端开发门槛。适用于多种场景,让设计与开发更加高效便捷。
|
8月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
351 4
|
8月前
|
Java 容器 Spring
IOC控制反转&&DI依赖注入的方法论
控制反转(IoC)是面向对象编程中用于减少代码耦合的设计原则。传统编程中,对象通过`new`关键字创建,控制权在应用手中。而在Spring框架下,对象由IoC容器管理并创建,通过依赖注入(DI)机制,自动将所需资源注入对象中,从而实现对象间的解耦。DI有两种实现方式:构造方法注入和属性setter方法注入。通过IoC和DI,程序更易于维护和测试。
233 0
|
8月前
|
机器学习/深度学习 监控
早停法(Early Stopping)
早停法(Early Stopping)