**问题:**未知原因,有可能是服务器搬离机柜造成的。也有可能是osd crash出错,数据丢失,cephfs无法提供服务,经查,是没有active的mds了,所有的mds都是standby状态,并且有两个是dmaged的状态。

[root@node83 .ceph-cluster]# ceph health detail
HEALTH_ERR 2 filesystems are degraded; 1 filesystem has a failed mds daemon; 2 filesystems are offline; 1 mds daemon damaged; insufficient standby MDS daemoavailable; application not enabled on 1 pool(s); 6 daemons have recently crashed; mons node82,node83,node84 are low on available space
FS_DEGRADED 2 filesystems are degradedfs AI_Spacefs is degradedfs recovery-fs is degradedfs AI_Spacefs is offline because no MDS is active for it..
MDS_DAMAGE 1 mds daemon damagedfs AI_Spacefs mds.0 is damaged

解决:两种方法:

  • 方法一:

      #ceph mds repaired AI_Spacefs:0#ceph mds repaired AI_Spacefs:1
    

    此方法一般情况下是好使,当有osd stuck的状态时也会失效。这个时候要重启osd,若未发现stuck就要手动触发数据迁移把stuck的osd暴露出来。然后再执行上面的操作。
    经测试,有两次都是通过上述方法解决问题的。

  • 方法二:
    这次问题要严重的多,所有的mds都没有active的状态,造成元数据无法恢复,方法一失效,所以此时需要放弃原来的cephfs,重建构建基于原来data池生成新的cephfs.

元数据故障恢复

设置允许多文件系统

ceph fs flag set enable_multiple true --yes-i-really-mean-it

创建一个新的元数据池,这里是为了不去动原来的metadata的数据,以免损坏原来的元数据

ceph osd pool create recovery 8

将老的存储池data和新的元数据池recovery关联起来并且创建一个新的recovery-fs

ceph fs new recovery-fs recovery AI_Spacefs_data --allow-dangerous-metadata-overlay

做下新的文件系统的初始化相关工作

#cephfs-data-scan init --force-init --filesystem recovery-fs --alternate-pool recovery
2020-03-18T16:22:50.508+0800 7f4a11a1d700 -1 NetHandler create_socket couldn't create socket (97) Address family not supported by protocol

出现上述的错误可以忽略进行下一步。

reset下新的fs

#ceph fs reset recovery-fs --yes-i-really-mean-it
若失败,要把所有mds fail掉或者stop掉,再快速执行上面命令。
#cephfs-table-tool recovery-fs:all reset session
#cephfs-table-tool recovery-fs:all reset snap
#cephfs-table-tool recovery-fs:all reset inode
出现Address family not supported by protocol的错误忽略掉

做相关的恢复

做下一步之前确保新建的recovery-fs没有active的mds,有则stop掉,不然该mds容易crashed。
#cephfs-data-scan scan_extents --force-pool --alternate-pool recovery --filesystem AI_Spacefs AI_Spacefs_data
#cephfs-data-scan scan_inodes --alternate-pool recovery --filesystem AI_Spacefs -force-corrupt --force-init AI_Spacefs_data
#cephfs-data-scan scan_inodes --alternate-pool recovery --filesystem AI_Spacefs --force-corrupt --force-init AI_Spacefs_data
#cephfs-data-scan scan_links --filesystem recovery-fs
出现Address family not supported by protocol的错误忽略掉# systemctl start ceph-mds@node82
等待mds active 以后再继续下面操作
# ceph daemon mds.node82 scrub_path / recursive repair
事实上上面这一步并没有操作数据就已经恢复了。

设置成默认的fs

# ceph fs set-default recovery-fs

挂载检查数据

[root@node82 lyf3]# ls
DATASET  lost+found  SYSTEM  USER
[root@node82 lyf3]# ll lost+found/
total 1
-r-x------ 1 root root 237 Mar 11 13:21 1000172efb8

可以看到在lost+found里面就有数据了这个生成的文件名称就是实际文件存储的数据的prifix,也就是通过原始inode进行的运算得到的。

如果提前备份好了原始的元数据信息

# ceph daemon mds.node82 dump cache > /tmp/mdscache

那么可以比较轻松的找到丢失的文件

原作者总结

通过文件的inode可以把文件跟后台的对象结合起来,在以前我的恢复的思路是,把后台的对象全部抓出来,然后自己手动去对对象进行拼接,实际是数据存在的情况下,反向把文件重新link到一个路径,这个是官方提供的的恢复方法,mds最大的担心就是mds自身的元数据的损坏可能引起整个文件系统的崩溃,而现在,基本上只要data的数据还在的话,就不用担心数据丢掉,即使文件路径信息没有了,但是文件还在

通过备份mds cache可以把文件名称,路径,大小和inode关联起来,而恢复的数据是对象前缀,也就是备份好了mds cache 就可以把整个文件信息串联起来了

虽然cephfs的故障不是常发生,但是万一呢

后续准备带来一篇关于cephfs从挂载点误删除数据后的数据恢复的方案,这个目前已经进行了少量文件的恢复试验了,等后续进行大量文件删除的恢复后,再进行分享

参考文档:

https://ceph.com/planet/cephfs%E5%85%83%E6%95%B0%E6%8D%AE%E6%B1%A0%E6%95%85%E9%9A%9C%E7%9A%84%E6%81%A2%E5%A4%8D/
https://docs.ceph.com/docs/luminous/cephfs/disaster-recovery/
https://blog.csdn.net/mailjoin/article/details/79694965

ceph mds dmaged造成cephfs崩掉的灾难性恢复相关推荐

  1. Centos7 ceph集群安装 cephfs客户端挂载 java代码调用

    Centos7 ceph集群安装 cephfs客户端挂载 java代码调用 ceph简介(http://docs.ceph.org.cn/ 官方文档) ceph分为ceph monitor,ceph ...

  2. 使用ceph的文件存储CephFS

    Ceph FS是一个支持POSIX接口的文件系统,它使用 Ceph 存储集群来存储数据.文件系统对于客户端来说可以方便的挂载到本地使用.Ceph FS构建在RADOS之上,继承RADOS的容错性和扩展 ...

  3. tomcat服务器一直自动关,项目在tomcat里运行一段时间总是自动崩掉的问题排查与解决...

    最近的检验系统上线一段时间后,发现系统访问不了,tomcat总是会自动崩掉,一般遇到这种问题,程序员的第一反应都肯定是内存溢出. 确实是,但是java里内存分好几种,堆内存.栈内存.静态内存区等等,下 ...

  4. 更新内核,显卡驱动崩掉解决办法

    以下是在崩掉后,重新启动,nvidia-smi出现的问题: NVIDIA-SMI has failed because it couldn't communicate with NVIDIA driv ...

  5. java小应用程序没有输入法_java swing的编辑框如果用智能ABC输入法输入中文会整个应用程序崩掉 | 学步园...

    java swing的编辑框如果用智能ABC输入法输入中文会整个应用程序崩掉 然后后台出现: # An unexpected error has been detected by Java Runti ...

  6. 熔断机制:预防一个服务故障导致整个系统崩掉

    一.引言 一个系统通常包含多个服务,服务之间的数据顺利交互,是整个系统能够正常工作的基本要求. 但实际应用中,不少人会经常遇到某个服务异常工作后,整个系统随之崩掉的情况,这种情况我们应该如何预防和处理 ...

  7. 项目在tomcat里运行一段时间总是自动崩掉的问题排查与解决

    最近的检验系统上线一段时间后,发现系统访问不了,tomcat总是会自动崩掉,一般遇到这种问题,程序员的第一反应都肯定是内存溢出. 确实是,但是java里内存分好几种,堆内存.栈内存.静态内存区等等,下 ...

  8. ceph mds启动流程

    本文的所有的分析仅基于个人理解,代码基于ceph nautilus版本 文章目录 MDSDaemon Start MDSDaemon Init 定时器 消息接收和处理 总结 MDSDaemon Sta ...

  9. Ceph MDS问题分析

    1. 问题背景 1.1 客户端缓存问题 $ ceph -s health HEALTH_WARN mds0: Client xxx-online00.gz01 failing to respond t ...

最新文章

  1. 使virtualenv从您的全局站点包继承特定的包
  2. oracle dataguard 日志 很多no,oracle dataguard 日志传输原理
  3. Java集合---LinkedList源码解析
  4. Android存储访问及目录
  5. 16-python基础5-文件读写操作
  6. php 框架效率测试,2017 非标准 PHP 框架性能测试比较
  7. spark学习-74-源代码:Endpoint模型介绍(6)-Endpoint的消息的接收
  8. ftp linux 开启验证_Linux认证系统管理:linux下搭建ftp
  9. 2022年最新《谷粒学院开发教程》:7 - 渲染前台页面
  10. JAVA开发Android聊天APP(有源码)
  11. C语言求素数的简化算法
  12. 人工智能7大关键技术,终于有人讲明白了
  13. Java学习笔记6——网络编程
  14. 理解Windows操作系统的KMS与MAK密钥
  15. python自动化(六)持续集成:2.Jenkins技术讲解
  16. 厦门大学计算机科学学院,厦门大学张俊松
  17. 什么是CRM系统,它如何支持客户营销管理?
  18. 盘点2019年PHP高级开发工程师面试题及答案汇总
  19. 计算机组成原理指导,计算机组成原理课程复习指导课件
  20. java导入进度显示_java excel导入获取实时进度

热门文章

  1. oracle win2008安装图解,win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)
  2. HTMLsection标签怎么用?
  3. java实现细胞自动机
  4. scp 报错:reverse mapping checking getaddrinfo for......failed - POSSIBLE BREAK-IN ATTEMPT!
  5. 用计算机写作信息技术集体备课,信息技术集体备课教案
  6. linux查看cpu型号主频,Linux 查看 CPU 型号及内存频率及其它信息的命令
  7. js忍者秘籍读书笔记(前四章)
  8. mac php开发套件_mac php集成开发环境搭建软件推荐(附教程)
  9. 分布式开发和集群区别
  10. 毕业设计 单片机智能按摩仪设计与实现 - 物联网 嵌入式 stm32