记一次redis磁盘故障

故障描述

redis机器的一个ssd盘出故障,只能读不能写。其他盘写入速度也很慢。导致redis实例的aof刷新一直失败,最终挂掉。


故障原因

ssd盘早期没有格式化好,4k对齐没做好


处理过程

该redis机器是用来存储collector采集到的日志的meta信息,比较关键,而且一台机器上开启了8个redis实例,所以不好处理。

一开始准备把redis的aof文件转移到一个新的盘上,并且把aof的dir动态更改到其他盘,结果发现redis实例挂掉了,就没有动态更换aof目录。这其中,redis的数据可能有所丢失,不过通过collector和redis日志发现,磁盘挂了后redis写入已经失败,估计有丢失数据也不多。collector有实现meta写入redis失败时转为写入本地磁盘,所以在redis实例down掉时,数据也不会丢失。

34 * 512 / 4096 = 4.25   非整数,4k没对齐,有几块没做好。

接着,处理4k对齐。先把所有redis实例进行bgwrite.  redis-cli -h redis02 -p 6379 bgrewriteaof, 停掉所有redis实例。

处理4k对齐, 重启机器。结果发现机器重启失败,阵列卡或线松了。

重启机器后,赶紧把所有aof文件都备份到其他机器上。结果有发现,有一块盘丢了,尝试mount回来。发现有很多block错误,要修复又怕丢数据。但现在盘有错误,只能先fsck修复,如果修复成功再从里面拷贝出来。要是觉得不保险,就先备份正常盘的数据,空出一块盘,把cache3的盘做个镜像,再做修复。最后aof文件终于弄出来了,启动redis实例,发现aof文件有问题,启动失败。使用redis-check-aof --fix修复了aof文件,再启动,成功。redis数据是被截断一部分丢失了。

数据恢复后,开始重新把redis机器上的ssd盘一个个重新格式化。


经验教训

因为redis的meta信息,是衔接collector采集,以及storm处理和hadoop camus入库。本次redis故障,大动干戈,对集群影响比较大。

还好collector有redis失败转存文件的功能,所以日志采集一直正常。

接下来的深圳新机房,存储meta的redis准备使用cluster,避免单点故障。保障可用性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 4,058评论 2 27
  • Redis杂谈 Redis是近年来发展迅速的内存数据库,网上也已经有多Redis的文章。但不管是英文还是中文,多数...
    迷失于重逢阅读 1,594评论 0 14
  • 本文翻译自官方文档http://redis.io/topics/persistence 。 Redis 持久化 R...
    六尺帐篷阅读 1,645评论 1 15
  • 小欧和她的小狗狗相遇的时候,是在一个飘着柳絮的春天。彼时的她正在一条林荫小路上闲逛,那只小狗在路旁觅食,小狗看到她...
    YAYAangel7766阅读 611评论 0 1
  • 我要踏遍万里河山 走在历史的长廊上 看着以前大唐的繁华 北戴河的波涛、雨巷的幽静 回暮流过无数英雄鲜血的疆土 或是...
    小笑易亦阅读 158评论 0 0