前提

一套系统的最低要求是可恢复,也就是数据不丢失,但是在各种各样的原因下,整套系统都有被毁掉的可能,一直以来有个观点就是存储是需要两套的,一般情况下很难实现,但是如何把故障发生的概率降低到最低,这个是我们需要考虑的问题

最近在社区群里面又听闻一个案例,一套系统的文件系统被重置掉了,也就是fs被重建了,实际上这属于一个不应该有的操作,但是已经发生的事情,就看怎么样能在下次避免或者把损失降到最低,对于hammer版本来说,重建cephfs只是把目录树给冲掉了,实际的目录还是能创建起来,但是这其实是一个BUG,并且在最新的Jewel下已经解决掉这个问题,这就造成无法重建目录树,在Jewel下,在不修改代码的情况下,文件都可以扫描回来,但是全部塞到了一个目录下,对于某些场景来说,这个已经是最大限度的恢复了,至少文件还在,如果文件类型可知,也可以一个个去人工识别的,虽然工作量异常的大,但至少文件回来了,这种情况,如果有保留文件名和文件md5值的强制要求的话,文件是可以完全找回来的,当然,这都是一些防范措施,看有没有重视,或者提前做好了预备

本篇就是对于情况下,如何基于快照做一个防范措施,以防误操作引起的数据无法挽回的措施

实践

对于元数据存储池来说,元数据的大小并不大,百万文件的元数据也才几百兆,所以我们有没有什么办法去形成一种保护措施,答案是有的

我们知道,ceph的存储池是有快照的,对于rbd场景来说,快照可以交给存储池去做快照管理,也可以交给Image自己做快照管理,二者差别在于,是大批量的快照还是只需要部分的快照,对于存储池快照来说,给存储池做一个快照,实际上就是对这个存储池中的所有的对象做了一个快照

我们先来看看,这个地方是如何基于快照去做文件的目录树恢复的

准备测试数据

  1. [root@lab8106 mnt]# df -TH|grep mnt
  2. 192.168.8.106:/ ceph 897G 110M 897G 1% /mnt
  3. [root@lab8106 mnt]# cp -ra /usr/share/doc/ce* /mnt
  4. [root@lab8106 mnt]# ll /mnt
  5. total 0
  6. drwxr-xr-x 1 root root 0 Dec 30 2015 celt051-0.5.1.3
  7. drwxr-xr-x 1 root root 0 Mar 7 2016 centos-logos-70.0.6
  8. drwxr-xr-x 1 root root 0 Mar 7 2016 centos-release
  9. drwxr-xr-x 1 root root 0 Dec 21 15:04 ceph
  10. drwxr-xr-x 1 root root 0 Sep 9 17:21 ceph-deploy-1.5.34
  11. drwxr-xr-x 1 root root 0 Mar 7 2016 certmonger-0.78.4

准备快照和需要的相关数据

对元数据池做一个快照

  1. [root@lab8106 ~]# ceph osd pool mksnap metadata snap1
  2. created pool metadata snap snap1

记录下元数据池的对象名称

  1. for a in `rados -p metadata ls`;do echo $a >> metalist;done;

一个简单的循环就可以拿到列表,注意,这里并不需要把数据get下来,我们只需要记录一次列表就行,这个过程,即使很多对象的情况,这个操作也是很快的

毁掉我们的文件系统

  1. [root@lab8106 ~]# umount /mnt
  2. [root@lab8106 ~]# systemctl stop ceph-mds@lab8106
  3. [root@lab8106 ~]# ceph mds fail 0
  4. failed mds gid 4140
  5. [root@lab8106 ~]# ceph fs rm ceph --yes-i-really-mean-it
  6. [root@lab8106 ~]# ceph -s
  7. cluster ffe7a8db-c671-4b45-a784-ddb41e633905
  8. health HEALTH_OK
  9. monmap e1: 1 mons at {lab8106=192.168.8.106:6789/0}
  10. election epoch 3, quorum 0 lab8106
  11. osdmap e24: 3 osds: 3 up, 3 in
  12. flags sortbitwise
  13. pgmap v111: 192 pgs, 3 pools, 397 kB data, 52 objects
  14. 105 MB used, 834 GB / 834 GB avail
  15. 192 active+clean

可以看到上面的操作已经把文件系统给推掉了

新创建一个文件系统

  1. [root@lab8106 ~]# ceph fs new ceph metadata data
  2. new fs with metadata pool 1 and data pool 2
  3. [root@lab8106 ~]# systemctl start ceph-mds@lab8106
  4. [root@lab8106 ~]# mount -t ceph 192.168.8.106:/ /mnt
  5. [root@lab8106 ~]# ll /mnt
  6. total 0

可以看到上面的操作以后,我们的目录树已经空空如也了,到这里如果没有做上面的快照相关操作,需要恢复的话,基本需要去对源码进行修改,并且需要对代码非常的熟悉才能做,一般是没有办法了,我们来看下我们基于快照的情况下,是如何恢复的

先umount掉挂载点

  1. umount /mnt

还记得上面的快照名称和对象列表吧,我们现在对数据进行回滚:

  1. [root@lab8106 mds]# systemctl stop ceph-mds@lab8106
  2. [root@lab8106 mds]# for a in `cat metalist`;do rados -p metadata rollback $a snap1;done;
  3. rolled back pool metadata to snapshot snap1
  4. rolled back pool metadata to snapshot snap1
  5. rolled back pool metadata to snapshot snap1
  6. rolled back pool metadata to snapshot snap1
  7. ···

重启一下mds

  1. [root@lab8106 mds]# systemctl restart ceph-mds@lab8106

检查下目录树,没问题,都恢复了

  1. [root@lab8106 mds]# mount -t ceph 192.168.8.106:/ /mnt
  2. [root@lab8106 mds]# ll /mnt
  3. total 0
  4. drwxr-xr-x 1 root root 3577 Dec 30 2015 celt051-0.5.1.3
  5. drwxr-xr-x 1 root root 1787 Mar 7 2016 centos-logos-70.0.6
  6. drwxr-xr-x 1 root root 20192 Mar 7 2016 centos-release
  7. drwxr-xr-x 1 root root 19768 Dec 21 15:04 ceph
  8. drwxr-xr-x 1 root root 13572 Sep 9 17:21 ceph-deploy-1.5.34
  9. drwxr-xr-x 1 root root 147227 Mar 7 2016 certmonger-0.78.4

如果数据被不小心清空了

上面是基于重建fs情况下的恢复,下面来个更极端的,元数据池的对象全部被删除了

  1. [root@lab8106 mds]# for a in `rados -p metadata ls`;do rados -p metadata rm $a ;done;
  2. [root@lab8106 mds]# rados -p metadata ls
  3. [root@lab8106 mds]# systemctl restart ceph-mds@lab8106

这个时候查看ceph -s状态,mds都无法启动,我们来做下恢复

  1. [root@lab8106 mds]# systemctl stop ceph-mds@lab8106
  2. [root@lab8106 mds]# ceph mds fail 0
  3. [root@lab8106 mds]# ceph fs rm ceph --yes-i-really-mean-it
  4. [root@lab8106 mds]# ceph fs new ceph metadata data
  5. [root@lab8106 mds]# for a in `cat metalist`;do rados -p metadata rollback $a snap1;done;
  6. rolled back pool metadata to snapshot snap1
  7. rolled back pool metadata to snapshot snap1
  8. rolled back pool metadata to snapshot snap1
  9. rolled back pool metadata to snapshot snap1
  10. ···
  11. [root@lab8106 mds]# rados -p metadata ls|wc -l
  12. 20
  13. [root@lab8106 mds]# systemctl start ceph-mds@lab8106

这个时候需要多等下mds恢复正常,有可能记录了原来的客户端信息,需要做重连,如果一直没恢复就重启下mds

挂载以后,可以看到,对象数据都回来了

总结

这个能算一个防患于未然的办法,如果对于纯数据存储的情况,存储池的快照也是能够在某些场景下发挥很大的作用的,当然什么时机做快照,保留什么多少版本,什么时候删除快照,这个都是有学问的,需要根据实际的场景和压力去做

如何避免Cephfs被完全毁掉的更多相关文章

  1. Ceph RBD CephFS 存储

    Ceph RBD  CephFS 存储 环境准备: (这里只做基础测试, ceph-manager , ceph-mon, ceph-osd 一共三台) 10.6.0.140 = ceph-manag ...

  2. Kubernetes使用cephfs作为后端存储

    这里使用了k8s自身的持久化卷存储机制:PV和PVC.各组件之间的关系参考下图: PV的Access Mode(访问模式) The access modes are: ReadWriteOnce – ...

  3. cephfs创建及挂载

    Ceph 文件系统( Ceph FS )是个 POSIX 兼容的文件系统,它使用 Ceph 存储集群来存储数据.Ceph 文件系统要求 Ceph 存储集群内至少有一个 Ceph 元数据服务器. 1.添 ...

  4. 分布式 cephfs

    参考链接: http://docs.ceph.com/docs/mimic/cephfs/

  5. Windows编译安装使用cephfs客户端

    本文介绍如何将cephfs映射到windows的一个盘上,以磁盘映射的方式访问cephfs. 1.下载必要安装包 tdm-gcc:(安装时选32位)https://sourceforge.net/pr ...

  6. ceph 文件系统(cephfs) -- 初体验

    一.介绍: ceph MDS 是元数据服务器,只有ceph 文件系统(cephFS)才会需要. cephFS 在RADOS 层之上 提供一个兼容POSIX 的文件系统.他是用MDS 作为守护进程,负责 ...

  7. kubernetes挂载ceph rbd和cephfs的方法

    目录 k8s挂载Ceph RBD PV & PVC方式 创建secret 创建PV 创建PVC 创建deployment挂载PVC StorageClass方式 创建secret 创建Stor ...

  8. 基于Harbor和CephFS搭建高可用Private Registry

    我们有给客户搭建私有容器仓库的需求.开源的私有容器registry可供选择的不多,除了docker官方的distribution之外,比较知名的是VMware China出品的Harbor,我们选择了 ...

  9. kubernetes多节点的pod挂载同一个cephfs目录

    一.安装cephfs 方法一: 直接进入deploy目录,执行: ceph-deploy --overwrite-conf mds create ceph01:mds-daemon- 上面的ceph0 ...

随机推荐

  1. selenium-滚动

    移动到指定的坐标(相对当前的坐标移动) driver.execute_script("window.scrollBy(0, 700)"); 移动到窗口绝对位置坐标,如下移动到纵坐标 ...

  2. oracle统计同一字段0和1

    SELECT 班级表.班级编号,班级表.班级名称,SUM(DECODE(性别, '1', 1)) 女生人数,SUM(DECODE(性别, '0', 1)) 男生人数FROM 学生表, 班级表WHERE ...

  3. Seaborn中几种作图方式

    趋势 sns.pointplot - 点图 ,比折线图好使 sns.lineplot - 折线图最适合显示一段时间内的趋势,多条线可以用来显示多个组中的趋势. 关系 - 可以使用许多不同的图表类型来理 ...

  4. 【Azure微服务 Service Fabric 】如何转移Service Fabric集群中的种子节点(Seed Node)

    注意:在对Service Fabric的节点做操作之前,请务必确认是否是种子节点(Seed Node)且当前节点的数量是否与SF的持久层要求的数量一致. 可靠性级别是 Service Fabric 群 ...

  5. JS图片的放大与缩小

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

  6. leaflet实现台风动态轨迹

    leaflet平台是我最新使用的webGIS平台,该平台比较轻巧以下是我展示台风动态路径展示 1.首先为大家展示一下动态台风所使用数据 上面中采用标准json格式数据,data数据中,points是对 ...

  7. Scrapy中get和extract_first的区别

    在scrapy中,从xpath中取得selector对象后,需要取出需要的数据. 使用get以及getall获取的是带标签的数据 比如 <p>这是一段文字</p> 如果用get ...

  8. Hive Sql的日常使用笔记

    date: 2019-03-22 17:02:37 updated: 2020-04-08 16:00:00 Hive Sql的日常使用笔记 1. distinct 和 group by distin ...

  9. IDEA配置类和方法注释模板

    1定义java文件头部的注释 2给java类中的方法添加上注释 2.1第一步勾选Enable Live  Templates 2.2第二步新建一个Group 2.3第三步新建一个Template 2. ...

  10. [分享] 通过修改CSS自定义chrome滚动条样式

    首先得说一句 我不懂CSS的写法之类的 这段CSS也是在网上找的 所以有更先进的需求的话 我肯定不能满足你们了 不好意思效果图在10楼有人上了 我这边不管怎么弄 上传图片都卡在96% 而且不翻wall ...