ceph的在正常运行的时候基本不会出现故障,出现故障一般在变动的时候,具体有下面几种可能出现的情形

  • 软件升级
  • 增加存储节点
  • 减少存储节点
  • 调整副本数目
  • 调整pg数目
  • 磁盘出现损坏
  • 节点网络出现异常

以上这些操作过程中是最可能出现异常的情形,并不是一定会出问题,以上问题除了网络和磁盘问题出现的异常是基本无法避免外,其他出现的时候,一般是非正常操作引起的,也就是我通常认为的人为事故,这个一般出现在操作的不谨慎上

本篇记录了一次故障的修复过程,这个故障不是出现在我们公司的产品上,是看到一个ceph社区群里有一个成员在里面问到一个异常是否能解决,这个不同于普通的问题,从他贴出的信息来看,集群已经是非常严重的状态了

正好看到是周五,周六还可以休息下,所以即使快到了晚上12点了,我还是联系了一下那哥们,从简短的几句交流后,基本可以判断对方对于ceph基本处于刚接触的阶段,在询问是否有其他人能协助他做一些比较有难度的操作的时候,他说没有,就他一个人,我想在目前中国很多公司,都是让一个并不太熟悉ceph的运维人员,或者完全就是开发人员维护着存储着非常宝贵的数据的云存储环境,上面运行的应该都是客户的数据,想想我们自己的电脑在硬盘损坏后,自己有多么不爽,而对于企业来说,一个运行环境的损坏有多么严重,一方面损失了数据,另一方面,基本不会再选择这个服务的提供商了,而这些都是一个定时炸弹,运行在中国的开源存储网络环境当中,而且基本都是初创小企业,大企业会有专门的专业的相关人员,而一个数据损失基本会对这些初创企业带来巨大的损失,这些都是需要企业的boss多关注的,这也是我一直持有的一个观点,越来越多的企业是用ceph,也意味着存储需要修复的出现几率就越大,其实我们也是一个小企业,我个人是非常关注数据恢复这一块的,这个比调优更加的重要,大环境的吐槽就到这里,下面开始讲下具体的经过

首先找对方要了一个ssh登陆环境

这个对方正好有这个环境允许我的登陆,虽然中间经过了堡垒机,虽然运行命令比较卡顿,但好歹能上去,这个是我个人非常支持的一种做法,不管怎样,是VPN也好,代理也好,一定留一个外网的ssh端口能够让连上机器,这个能允许随时随地能上去处理问题,等你运维人员到达现场,真是黄花菜都凉了,对于比较保密的环境,最好也能够有一个在紧急情况下开启远程允许环境的条件,这个具体花费,一个上网卡,一台破旧的笔记本就基本能实现了,在需要远程操作的时候能够连上去处理,目前已经协助了几个朋友处理了一些简单的问题,基本都是ssh连过去的,而没有远程环境的,我也是无能为力的

检查环境

登陆上去以后,检查环境发现提示的是2个pg的状态imcomplete,这个是pg的数据不一致的提示,而在检查了对应的osd上的这个pg的数据的时候,发现映射计算到的3个上面有两个是没有数据的,有一个是有数据的,在询问对方做过的操作后,对方是做了一个删除osd的操作,并且是多台机器上面都做过删除,到这里我询问了一下对方,对方是按照一些通用的操作去做的删除操作,命令肯定是没有问题的,这个在后面我处理完后,基本能判断出对方是人为的操作失误引起的

尝试修复

开始想起之前做过的一次模拟修复,本来以为这个可以把环境弄好了,基本想法就是如下流程:

  • 停止pg对应的3个osd
  • 导出有数据的pg
  • 在无数据的osd上进行pg的数据导入
  • 启动三个osd

在进行到数据的导入的时候提示了pg is blocked,这个在我之前的做的测试中是没有遇到过的,后来进行pg的状态查询时候,发现是pg的显示的数据全是0,也就是集群认为这个pg是没有数据的,并且被几个已经删除了的osd blocked,而且做ceph osd lost 也是无法操作的,提示没有osd,这个应该是pg状态不一致,也就是这个pg状态完全异常了,并且还无法导入了

思考解决办法

到这里我个人判断基本是回天无力了,再次跟对方确认删除的过程,发现对方好在数据盘都保留了,并且还插在机器上,只是有部分osd在进行增加的时候还占用了删除的osd的id

到这里我基本想出来两种方法:

  • 最不济,也是终极解决办法就是把后台缺失的数据拼起来,这个耗时巨大,操作难度大,基本上只能作为最后终极挽回的方法,这个只有在客户已经觉得数据可能要丢了,然后去做最后的终极挽回大法了,客户的容忍度是会随着你问题严重性而改变的,相信我数据还在都好说
  • 就是将删除的数据盘给加进来,这个操作在我几年ceph生涯中也是从未做过的,也想不出什么场景下需要这种操作,好吧,不管多么特殊的操作,总有它的存在的意义,我也不能确定ceph是否支持这种操作,那就试试这种

这个集群之所以能挽回,有几个特殊点正好都在,缺一不可

  1. 删除的数据盘居然没被格式化,或者搞掉,这个如果弄没了,数据必丢
  2. 删除的数据盘的盘位部分被新加的节点占用了,部分还没有被占用,而这个缺失数据的pg的数据所删除的osd正好又没有被占用(所以以后替换osd的时候最好是用新的编号,老的盘和编号保留着)

开始恢复的操作

之前我加节点的操作都是用的ceph-deploy,可以说基本没有遇到过手动能做的ceph-deploy无法完成的,好吧这次我知道了还是有无法完成的,手动的还是多学学比较好,好在我比较熟悉,就按步骤去做

1、增加认证

我们在删除osd的最后一步的时候操作都是ceph auth del

我就反向的操作

ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd0/keyring

这个对应keyring就是在删除那个osd上面有,每个osd上面都有的

这一步操作完成后auth里面就有osd.0了

2、创建osd

ceph osd create

这个步骤也是之前没有做过的,之前准备直接加crush 直接启动发现都是无法启动,提示没有osd

这一步相对于删除里面的操作应该就是 ceph osd rm 的操作了

3、增加crush

ceph osd crush add osd.0 0.9 host=node1

这个就是加入到crush里面去

4、启动osd

/etc/init.d/ceph start osd.0

检查现在环境状况

在检查的时候发现osd真的就加进来了,然后在添加了另一个被block的osd后,集群状态就没有imcomplete了就是active+其他的一些恢复状态什么的,只需要等待恢复,集群即可恢复正常了,到这个时候已经凌晨三点了,事情能够完满解决是最开心的事情

后记

集群的删除操作随意,集群的信息基本无记录,环境的基础记录都没有,这个是这个事故的最大原因,再往上走就是对于数据操作这块,公司没有一个重视的态度,上面的boss永远不会关心你运维做了什么操作,而运维人员也可以说是我按标准流程操作的,也没法去定谁的责任,丢了就是丢了,运维最多也就是丢了工作,而企业损失应该就是以万为单位的损失加客户的流失了

到这里也许这家公司的头并不知道发生了什么,也许只是认为是一个小的业务中断,但真的某一天出事了,这就是大事了,所以一定要重视系统的监控和系统操作的谨慎

by 运维-武汉-磨渣

2016年04月11日夜

记一次ceph的故障修复(20160408)的更多相关文章

  1. 模拟MBR Grub故障修复

    1.  MBR故障修复 备份 mkdir /pp mount /dev/sdb1 /pp dd if=/dev/sda of=/pp/mrb.bak bs=512 count=1   破坏mrb dd ...

  2. CentOS7.3系统启动故障修复

    CentOS7.3系统启动故障修复 破解CentOS7的root口令方法一 启动时任意键暂停启动菜单,选择启动内核菜单项 按 e 键进入编辑模式 将光标移动 linux16 开始的行,添加内核参数rd ...

  3. MBR扇区故障修复!

    一:进行分区且格式化硬盘 [root@roomc~]#mkfs -t ext4 /dev/sdb1    //格式化sdb1盘 二:模拟破坏/sda主硬盘破坏再修复! [root@roomc~]#mk ...

  4. CentOS 6或7 启动故障修复及root密码破解

    CentOS 6或7 启动故障修复及root密码破解 目录 CentOS 6或7 启动故障修复及root密码破解 CentOS 6启动流程修复: 实验一:删除initramfs-2.6.32-754. ...

  5. 记最近一次ceph故障修复

    前言 所谓吃一堑长一智,每次面对问题才是最好的学习机会,在面对问题的时候,尽量是能够自己去解决,或者去尝试能够最接近答案,确实无法解决再去寻求他人帮助,这样成长的会更快一些,在学校读书做题的时候,老师 ...

  6. Ceph 故障修复记录(持续更新)

    目录 文章目录 目录 问题:故障域与副本数导致的 PG 不正常 问题:故障域与副本数导致的 PG 不正常 缘起:执行 rbd snap unprotect 执行卡死. 调查:Ceph 集群 PG 不正 ...

  7. 分布式存储ceph——(5)ceph osd故障硬盘更换

    正常状态:

  8. web-project 故障修复功能 传递所有的event_id数据到后台

    <script language=javascript> function IdentifyRepair(event_id) { var url; url = "/View/fa ...

  9. MySQL MGR集群单主模式的自动搭建和自动化故障修复

    随着MySQL MGR的版本的升级以及技术成熟,在把MHA拉下神坛之后, MGR越来越成为MySQL高可用的首选方案.MGR的搭建并不算很复杂,但是有一系列手工操作步骤,为了简便MGR的搭建和故障诊断 ...

随机推荐

  1. 19。删除链表倒数第N个节点

    class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next# 这道题还是很简单的,我们只 ...

  2. go sync.WaitGroup

    package mainimport ( "fmt" "sync")func say(i int ,wg *sync.WaitGroup) { defer wg ...

  3. centos8平台yum无法安装一些常用软件的解决,如:screen,iftop,nethogs

    一,例如:安装screen时报错: [root@localhost liuhongdi]# yum install screen 上次元数据过期检查:17:39:58 前,执行于 2020年03月18 ...

  4. JS图片的放大与缩小

    <!doctype html><head><meta charset=utf-8" /><title>javascript控制图片缩小或者放大 ...

  5. linux 安装配置zerotier

    1.在线安装zerotier curl -s https://install.zerotier.com/ | sudo bash 2.添加开机自启 $ sudo systemctl enable ze ...

  6. SSM中 spring-mvc.xml 配置文件

    <!--扫描控制器包--><context:component-scan base-package="<!--控制器包所在路径-->">< ...

  7. VirtualXposed结合justTrustMe 模块傻瓜式破解app没法抓包问题

    一.首先就是按照这两个apk 声明仅供学习 justTrustMe 链接:https://pan.baidu.com/s/1av3oaez4y4n6a9C1I0VsAg 提取码:mjqg Virtua ...

  8. java如何实现一个Future

    实现Futrue接口 public class MsgFuture<V> implements java.util.concurrent.Future<V> { ... ... ...

  9. 重要,知识点:InnoDB的插入缓冲

    世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. InnoDB引擎有几个重点特性,为其带来了更好的性能和可靠性: 插入缓冲(Insert Buffer) 两次写(Do ...

  10. NB-IoT的eDRX模式主要目的是什么

    传统的2.56秒寻呼间隔对UE的电量消耗较大,NB-IoT的eDRX模式主要目的就是支能够持更长周期的寻呼监听,从而达到省电的目的.而在下行数据发送频率小时,通过核心网和用户终端的协商配合,用户终端调 ...