前提

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

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

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

实践

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

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

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

准备测试数据

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

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

对元数据池做一个快照

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

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

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

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

毁掉我们的文件系统

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

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

新创建一个文件系统

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

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

先umount掉挂载点

umount /mnt

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

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

重启一下mds

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

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

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

如果数据被不小心清空了

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

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

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

[root@lab8106 mds]# systemctl stop ceph-mds@lab8106
[root@lab8106 mds]# ceph mds fail 0
[root@lab8106 mds]# ceph fs rm ceph --yes-i-really-mean-it
[root@lab8106 mds]# ceph fs new ceph metadata data
[root@lab8106 mds]# for a in `cat metalist`;do rados -p metadata rollback $a snap1;done;
rolled back pool metadata to snapshot snap1
rolled back pool metadata to snapshot snap1
rolled back pool metadata to snapshot snap1
rolled back pool metadata to snapshot snap1
···
[root@lab8106 mds]# rados -p metadata ls|wc -l
20
[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. python 产生随机函数random

    random是内建(built-in)函数,作用是产生随机数 导入模块: 接着就可以调用random模块下的函数了使用 dir(random)可以查看random模块下有哪些函数,结果如下: 最常用的 ...

  2. spring boot:用redis+lua限制短信验证码的发送频率(spring boot 2.3.2)

    一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然 ...

  3. 通透,23 个问题 TCP 疑难杂症全解析

    每个时代,都不会亏待会学习的人. 在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题. TCP 握手一定是三次?TCP 挥手一定是四次? 为什么要有快速重传,超时重传不够用?为什么要有 ...

  4. 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)

    问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...

  5. 十年老苹果(A1286)强升Catalina及Win10踩坑记(续)

    背景 自上次发布十年老苹果(A1286)强升Catalina及Win10踩坑记以来,因为后半部分-----系统安装上的细节描述过于简略,一些朋友在安装过程中总是又遇到坑,由此特意详述这一过程,让园友少 ...

  6. sangforEDR 任意命令执行

    EDR 使用范围 由于只有POC 没有详细细节.暂时不知道具体细节. 部分EDR 已经完成升级,不存在该漏洞. POC https://XXX:8081/tool/log/c.php?strip_sl ...

  7. ceph踩坑日记之rgw_dynamic_resharding

    1.背景说明 参考说明: https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/2/html/object_gatewa ...

  8. 常用数据结构-集合(set)

    集合(set)是python中最容易被忽视的.使用集合的主要好处在于速度快. 集合的一些特性: 集合元素不能重复 不支持索引访问集合中的元素 集合使用散列之后,可以在O(1)时间内访问元素 支持一些常 ...

  9. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了JSON处理,少不了需要在JSON中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON字符串增加额外字段 假如我们有这样结 ...

  10. Nginx 配置请求响应时间

    1.常见默认nginx.conf配置日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request&quo ...