-4006-505-646

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数据。

5、根据object的id按序组合卷文件的所有object数据块,还原整个卷数据。

6、修复卷的文件系统和其中文件。

对于损坏缺失程度不高的卷文件系统,尝试修复损坏的卷,得到卷中的文件。

对于有固定格式的文件,尝试修复损坏文件。