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、修复卷的文件系统和其中文件。
对于损坏缺失水平不高的卷文件系统,尝试修复损坏的卷,失去卷中的文件。
对于有固定格局的文件,尝试修复损坏文件。