【北亚数据恢复】什么是Ceph?Ceph数据恢复研究
Ceph存储基本架构:
Ceph存储根据其类型,可分为块存储,对象存储和文件存储。Ceph基于对象存储,对外提供三种存储接口,故称为统一存储。
Ceph的底层是RADOS(分布式对象存储系统),RADOS系统主要由两部分组成,分别是OSD和MON。
MON负责监控整个集群,维护集群的健康状态,维护展示集群状态的各种图表,如OSDMap、MonitorMap、PGMap和CRUSHMap。
OSD则用于存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查等。一般情况下一块硬盘对应一个OSD。
Ceph数据的存储过程:
无论使用哪种存储方式(对象、块、文件系统),存储的数据都会被切分成对象(Objects)。
存储池:
很多不同用户因不同目的把对象存储在不同的存储池里,而它们都坐落于无数的OSD之上。
对象保存在不同的存储池(Pool)中,它是对象存储的逻辑组,对应不同的用户。存储池管理着归置组数量、副本数量、和存储池规则集。
归置组:
归置组(PGPlacementGroup)是对象池的片段,Ceph根据对象的Oid和一些其他信息做计算操作,映射到归置组,无数的对象被划分到不同的归置组。PG是一个逻辑概念,它在数据寻址时类似于数据库中的索引。
每个对象都会固定映射进一个PG中,所以当我们要寻找一个对象时,只需要先找到对象所属的PG,然后遍历这个PG就可以了,无需遍历所有对象。而且在数据迁移时,也是以PG作为基本单位进行迁移。
OSD:
最后PG会根据管理员设置的副本数量进行复制,然后通过crush算法存储到不同的OSD节点上,最终把PG中的所有对象存储到OSD节点上。
BlueStore:
新版本中,Ceph默认以Bluestore存储引擎作为RADOS中OSD的ObjectStore存储底层实现
BlueStore整体架构。
空间分配:
BlueStore将整个存储空间分为3个部分:WAL,DB,SLOW
慢速(Slow)空间:
主要用于存储对象数据,由BlueStore管理。
高速(DB)空间:
存储blufs和rocksdb产生的数据,由BlueFS直接管理,如果不存在或者DB设备空间不足,则选择Slow类型设备空间。
超高速(WAL)空间:
主要存储RocksDB的WAL(即.log)文件,由BlueFS直接管理,如果不存在或者WAL设备空间不足,则逐级降级选择DB、SLOW分区。
Rocksdb:
BlueStore使用Rocksdb作为自己元数据存储的底层实现,将各种元数据以kv型记录的方式存在数据库中。
写入机制任何元数据的写入都会先写到WAL,然后在写入MemoryTable(Memtable)。
当一个Memtable写满了之后,就会变成immutable的Memtable,RocksDB在后台会通过一个flush线程将这个Memtableflush到磁盘,生成一个SortedStringTable(SST)文件。
BlueFS:
BlueFS与通用文件系统不同,是Bluestore专为Rocksdb所设计的精简文件系统。
BlueFS的文件和目录的元数据以日志事务的形式保存在日志文件中,在上电过程中,replay日志文件中的事务,就可以加载所有的元数据到内存中。
Ceph数据恢复流程:
1. 制作镜像:
制作磁盘镜像,用于数据提取和备份。
2. BlueFS中数据库文件的提取:
从磁盘镜像的分区获取超级块,得到日志的节点信息。
回放整个日志中的事务,得到目录结构和数据库文件节点信息,根据数据库文件节点信息提取数据库文件。
提取每个OSD提取出来的数据库中的object记录。
3. 文件记录提取:
对于损坏的数据库,根据文件格式提取数据库完好文件中的object记录。
4. 提取object数据块:
解析object记录,从各镜像上提取对应的object数据。
5. 组合卷数据:
根据object的id按序组合卷文件的所有object数据块,还原整个卷数据。
6. 修复卷的文件系统和其中文件:
对于损坏缺失程度不高的卷文件系统,尝试修复损坏的卷,得到卷中的文件。
对于有固定格式的文件,尝试修复损坏文件。
在北亚数据恢复工程师团队的努力下,攻克了Ceph数据恢复这个专题。对于北亚数据恢复工程师团队来说,Ceph数据恢复已经不是什么问题了。