cephfs元数据池故障的恢复
前言
cephfs 在L版本已经比较稳定了,这个稳定的意义个人觉得是在其故障恢复方面的成熟,一个文件系统可恢复是其稳定必须具备的属性,本篇就是根据官网的文档来实践下这个恢复的过程
实践过程
部署一个ceph Luminous集群
[root@lab102 ~]# ceph -v
ceph version 12.2.5 (cad919881333ac92274171586c827e01f554a70a) luminous (stable)
创建filestore
ceph-deploy osd create lab102 --filestore --data /dev/sdb1 --journal /dev/sdb2
这里想用filestore进行测试就按上面的方法去创建osd即可
传入测试数据
- doc
- pic
- vidio
这里提供下载链接
这个是网上下载的模板的数据,方便进行真实的文件的模拟,dd产生的是空文件,有的时候会影响到测试
需要更多的测试文档推荐可以从下面网站下载
视频下载:
图片下载:
文档下载:
元数据模拟故障
跟元数据相关的故障无非就是mds无法启动,或者元数据pg损坏了,这里我们模拟的比较极端的情况,把metadata的元数据对象全部清空掉,这个基本能覆盖到最严重的故障了,数据的损坏不在元数据损坏的范畴
清空元数据存储池
for object in `rados -p metadata ls`;do rados -p metadata rm $object;done
重启下mds进程,应该mds是无法恢复正常的
cluster:
id: 9ec7768a-5e7c-4f8e-8a85-89895e338cca
health: HEALTH_ERR
1 filesystem is degraded
1 mds daemon damaged
too few PGs per OSD (16 < min 30)
services:
mon: 1 daemons, quorum lab102
mgr: lab102(active)
mds: ceph-0/1/1 up , 1 up:standby, 1 damaged
osd: 1 osds: 1 up, 1 in
准备开始我们的修复过程
元数据故障恢复
设置允许多文件系统
ceph fs flag set enable_multiple true --yes-i-really-mean-it
创建一个新的元数据池,这里是为了不去动原来的metadata的数据,以免损坏原来的元数据
ceph osd pool create recovery 8
将老的存储池data和新的元数据池recovery关联起来并且创建一个新的recovery-fs
[root@lab102 ~]# ceph fs new recovery-fs recovery data --allow-dangerous-metadata-overlay
new fs with metadata pool 3 and data pool 2
做下新的文件系统的初始化相关工作
[root@lab102 ~]#cephfs-data-scan init --force-init --filesystem recovery-fs --alternate-pool recovery
reset下新的fs
[root@lab102 ~]#ceph fs reset recovery-fs --yes-i-really-mean-it
[root@lab102 ~]#cephfs-table-tool recovery-fs:all reset session
[root@lab102 ~]#cephfs-table-tool recovery-fs:all reset snap
[root@lab102 ~]#cephfs-table-tool recovery-fs:all reset inode
做相关的恢复
[root@lab102 ~]# cephfs-data-scan scan_extents --force-pool --alternate-pool recovery --filesystem ceph data
[root@lab102 ~]# cephfs-data-scan scan_inodes --alternate-pool recovery --filesystem ceph --force-corrupt --force-init data
[root@lab102 ~]# cephfs-data-scan scan_links --filesystem recovery-fs
[root@lab102 ~]# systemctl start ceph-mds@lab102
等待mds active 以后再继续下面操作
[root@lab102 ~]# ceph daemon mds.lab102 scrub_path / recursive repair
设置成默认的fs
[root@lab102 ~]# ceph fs set-default recovery-fs
挂载检查数据
[root@lab102 ~]# mount -t ceph 192.168.19.102:/ /mnt
[root@lab102 ~]# ll /mnt
total 0
drwxr-xr-x 1 root root 1 Jan 1 1970 lost+found
[root@lab102 ~]# ll /mnt/lost+found/
total 226986
-r-x------ 1 root root 569306 May 25 16:16 10000000001
-r-x------ 1 root root 16240627 May 25 16:16 10000000002
-r-x------ 1 root root 1356367 May 25 16:16 10000000003
-r-x------ 1 root root 137729 May 25 16:16 10000000004
-r-x------ 1 root root 155163 May 25 16:16 10000000005
-r-x------ 1 root root 118909 May 25 16:16 10000000006
-r-x------ 1 root root 1587656 May 25 16:16 10000000007
-r-x------ 1 root root 252705 May 25 16:16 10000000008
-r-x------ 1 root root 1825192 May 25 16:16 10000000009
-r-x------ 1 root root 156990 May 25 16:16 1000000000a
-r-x------ 1 root root 3493435 May 25 16:16 1000000000b
-r-x------ 1 root root 342390 May 25 16:16 1000000000c
-r-x------ 1 root root 1172247 May 25 16:16 1000000000d
-r-x------ 1 root root 2516169 May 25 16:16 1000000000e
-r-x------ 1 root root 3218770 May 25 16:16 1000000000f
-r-x------ 1 root root 592729 May 25 16:16 10000000010
可以看到在lost+found里面就有数据了
[root@lab102 ~]# file /mnt/lost+found/10000000010
/mnt/lost+found/10000000010: Microsoft PowerPoint 2007+
[root@lab102 ~]# file /mnt/lost+found/10000000011
/mnt/lost+found/10000000011: Microsoft Word 2007+
[root@lab102 ~]# file /mnt/lost+found/10000000012
/mnt/lost+found/10000000012: Microsoft Word 2007+
[root@lab102 ~]# file /mnt/lost+found/10000000013
/mnt/lost+found/10000000013: Microsoft PowerPoint 2007+
这个生成的文件名称就是实际文件存储的数据的prifix,也就是通过原始inode进行的运算得到的
如果提前备份好了原始的元数据信息
[root@lab102 ~]# ceph daemon mds.lab102 dump cache > /tmp/mdscache
那么可以比较轻松的找到丢失的文件
总结
在我另外一篇文章当中已经写过了,通过文件的inode可以把文件跟后台的对象结合起来,在以前我的恢复的思路是,把后台的对象全部抓出来,然后自己手动去对对象进行拼接,实际是数据存在的情况下,反向把文件重新link到一个路径,这个是官方提供的的恢复方法,mds最大的担心就是mds自身的元数据的损坏可能引起整个文件系统的崩溃,而现在,基本上只要data的数据还在的话,就不用担心数据丢掉,即使文件路径信息没有了,但是文件还在
通过备份mds cache可以把文件名称,路径,大小和inode关联起来,而恢复的数据是对象前缀,也就是备份好了mds cache 就可以把整个文件信息串联起来了
虽然cephfs的故障不是常发生,但是万一呢
后续准备带来一篇关于cephfs从挂载点误删除数据后的数据恢复的方案,这个目前已经进行了少量文件的恢复试验了,等后续进行大量文件删除的恢复后,再进行分享
参考文档
变更记录
| Why | Who | When |
|---|---|---|
| 创建 | 武汉-运维-磨渣 | 2018-05-29 |
cephfs元数据池故障的恢复的更多相关文章
- Mongodb 5节点异地两中心故障转移恢复测试案例
Mongodb5节点异地两中心故障转移恢复测试案例 架构方式:5节点,主中心(2数据1仲裁),备中心(1数据1仲裁) 1基本情况 操作系统:Red Hat Enterprise Linux Serve ...
- Oracle 不同故障的恢复方案
之前在Blog中对RMAN 的备份和恢复做了说明,刚看了下,在恢复这块还有知识点遗漏了. 而且恢复这块很重要,如果DB 真要出了什么问题,就要掌握对应的恢复方法. 所以把DB的恢复这块单独拿出来说明一 ...
- linux系统无法正常启动,故障排查恢复
linux内核启动修复 首先看linux内核重要文件grub.conf # grub.conf generated by anaconda # # Note that you do not have ...
- 数据故障的恢复-MSSQL ndf文件大小变为0 KB恢复过程
一.故障描述 成都某客户,存储损坏,数据库崩溃.重组存储,恢复数据库文件,发现有四个ndf文件大小变为0 KB.数据库大小约80TB.数据库中有1223个文件,数据库每10天生成一个NDF文件,每个N ...
- Atlas 读写分离 & Atlas + MHA 故障自动恢复
目录 Atals 介绍 Atlas 主要功能 Atlas 相对于官方 MySQL-Proxy 的优势 Atlas 使用 Atlas 安装 Atlas 目录 Atlas 配置 Atlas 启动 Atla ...
- es故障节点恢复后加入集群导致删除索引重新出现
es的每个shard下的文件都可以看做一个完整的lucene文件,shard数据目录下的segment文件包含了索引的分片数量,副本数量.es shard可以恢复,就是因为每个shard都包含了一份数 ...
- DG中模拟failover故障与恢复
问题描述:情形是当主库真正出现异常之后,才会执行的操作,那么我们执行过failover 之后,如何在重新构建DG,这里我们利用flashback database来重构.模拟前主库要开启闪回区,否则要 ...
- 记录一次dns引发的线程池故障
# 问题描述 公司做的是一个支付系统,会对接很多第三方公司. 突然有一天,有一家第三方(简称金花平台)反应收不到我们的通知消息. # 排查过程 我们登陆自己的服务器,检查程序日志,是有给金花平台发送通 ...
- 技术干货:Ceph搭建硬件建议详解
Ceph是专为在商品硬件上运行而设计的,这使得构建和维护超大规模的数据集群在经济上是可行的.当规划出你的集群硬件时,你需要平衡一些考虑因素,包括故障域和潜在的性能问题.硬件规划应该包括将Ceph守护进 ...
随机推荐
- c++程序设计实践——银行系统
银行系统 本科大二程序设计实践的作业,算是一个比较简单的项目吧,主要使用的编程范式有面向对象编程 其中引入<multimap><map>头文件实现多映射输出存取记录 引入< ...
- Verilog基础入门——Vivado工程创建(三)
Verilog基础入门--Vivado工程创建(三) Vivado是Verilog语言的一个集成环境,目前使用的版本为英文版,简单介绍一下在Vivado中创建一个工程并写入源文件 [配置] win10 ...
- Token 、Cookie和Session的区别
本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...
- 0基础如何更快速入门Linux系统?学完Linux有哪些就业方向?
Linux系统是使用Linux内核及开源自由软件组成的一套操作系统,是一种类UNIX系统,其内核在1991年10月5日由林纳斯·托瓦兹首次发布. 它的主要特性:Linux文件一切皆文件.完全开源免费. ...
- Linux 打开core dump功能
系统打开core dump功能 在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件: 使用命令 ...
- 通过代码实现 `OutOfMemory
通过代码实现 OutOfMemory Intro 来尝试写一个发生 OutOfMemoryException 的代码吧,开启煞笔代码第三篇 -- OutofMemory OutOfMemory Out ...
- 使用Vue简单的写组件的UI库
初始化项目vue create nature-ui 在根目录下面创建一个文件目录放置组件(我这里的创建packages) packages 目录下面创建个个组件的名称并创建index.js(用于输出所 ...
- java POI Excel 单元格样式
正如Html需要CSS一样,我们的POI生成的Excel同样需要样式才能更完美的表现我们的数据.下面还是从简单的例子出发,学习和了解POI的样式设计. 一.我的位置. 1 package com.my ...
- 三分钟带你分清Mysql 和Oracle之间的误区
摘要:Mysql 和Oracle,别再傻傻分不清. mysql 和Oracle 在开发中的使用是随处可见的,那就简单去了解一下这俩款火的不行的数据库. 本质区别: Oracle数据库是一个对象关系数据 ...
- Java内存区域(运行时数据区域)详解、JDK1.8与JDK1.7的区别
2.1 概述 对Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每个对象的new操作去写配对的delete/free 代码,不容易出现内存泄露和内存溢出的问题.不过,仍然需要Java虚 ...