写在前面
喜欢ceph的话欢迎关注奋斗的cepher微信公众号阅读更多好文!
不知不觉,又到年底啦。
回顾今年,技术能力的增进和文章的产出均不达预期,太懒了,还有我那迟迟未能完成的书稿,哎,真是羞愧万分,来年一定要再接再厉,更加勤奋!
回到本篇,不管是各种搜索引擎还是官方,暂时没有找到对ceph删除存储池进行恢复的相关文章,官方是完全不支持的,但是,松鼠哥从不走寻常路!
本篇主要从操作的角度,讲解如何手动恢复一个被删除的存储池,由于仅使用默认配置和操作并不能保证100%恢复所有的数据,因而,松鼠哥准备了下篇,将深入代码,了解更多的细节,尝试实现100%恢复被删除存储池的数据
测试版本为ceph 14.2.22,目标存储池使用块存储,三副本模式(其实在rados都是一样的)
开始
首先,我们看下集群的状态
data:
pools: 18 pools, 20512 pgs
objects: 36.31M objects, 118 TiB
usage: 285 TiB used, 15 PiB / 15 PiB avail
pgs: 20483 active+clean
29 active+clean+scrubbing+deep+repair
io:
client: 916 KiB/s rd, 0 B/s wr, 915 op/s rd, 610 op/s wr
PG都是正常的,rbd这个存储池是本次测试的池,pool id 是36
[twj@test-cluster ~]$ sudo ceph df
RAW STORAGE:
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 15 PiB 15 PiB 283 TiB 284 TiB 1.80
ssd 31 TiB 31 TiB 438 GiB 474 GiB 1.47
TOTAL 15 PiB 15 PiB 284 TiB 285 TiB 1.80
POOLS:
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
rbd 36 1024 11 TiB 5.12M 33 TiB 8.06 125 TiB
没有问题,接下来,我们开始前记录几个数据,一个是当前集群的osdmap版本,另外是rbd这个存储池的数据情况,方便我们后面恢复后进行比对
[twj@test-clustern ~]$ sudo ceph osd dump|more
epoch 22222
fsid 241ace23-f0da-4ffd-a5ed-8aed5ebf51aa
created 2022-06-16 15:55:48.280300
modified 2022-12-11 13:53:02.787416
....
[twj@test-cluster ~]$ sudo rbd ls
test1
test2
[twj@test-cluster ~]$ sudo rados -p rbd ls|wc -l
5119504
OK,接下来我们将rbd这个存储池删除
[twj@test-cluster ~]$ sudo ceph daemon /run/ceph/ceph-mon.`hostname`.asok config set mon_allow_pool_delete true
{
"success": ""
}
[twj@test-cluster ~]$ sudo ceph osd pool delete rbd rbd --yes-i-really-really-mean-it
pool 'rbd' removed
删除成功后,我们快速将这个pool对应的所有osd都stop掉
[twj@test-cluster ~]$ sudo systemctl stop ceph-osd.target
将osd立刻stop,是为了尽可能保住rbd这个存储池的数据
接下来,不管是rados命令还是ceph命令,都已经无法查看到对应的pool,其所在的pg也都无法查询到,osdmap中