Bluefs中的DB和WAL分区
_____egon新书来袭请看:https://egonlin.com/book.html
BlueFS
Bluefs是一个简易的日志型文件系统,它恰倒好处地实现了RocksDB::env所定义的接口。
关于RocksDB::Env 是用来固化RocksDB运行过程中产生的.sst(Sorting string table,有序字符串表,键值对的磁盘存储形式)和.log(wal:write ahead log)文件。因为日志文件的功能是为了提升磁盘的写速度,所以在BlueFs的设计上支持将.sst和.log文件分开存储,以方便将.log文件单独使用速度更快的固态存储设备例如NVMSSD或者NVRRAM存储。
BlueFs将整个BlueStore的存储空间分为三个层次 :
- 慢速(Slow)空间
主要用于存储对象数据,可由普通大容量机械盘提供,由BlueStore自行管理
- 高速(DB)空间
存储BlueStore内部产生的元数据,可由普通SSD提供,需求小于(慢速空间)。
- 超高速(WAL)空间
主要存储RocksDB内部产生的.log文件,可由SSD或者NVRAM等时延相较普通SSD更小的设备充当。容量需求和(高速空间)相当,同样由BlueFs直接管理。
这里普及一下BlueStore相关的内容:BlueStore最早在Jewel版本中引入,用于取代传统的fileStore,作为新一代高性能对象存储后端。同时,它也考虑了未来的效率,同样会适配全ssd以及NVME SSD闪存,内部的存储中将高效索引的元数据引擎LevelDB 替换为RocksDB。
这里的性能提升主要是之前的FileStore存储后端是通过操作系统自带的本地文件系统间接管理磁盘,所以所有针对Rados(ceph的核心底层,具有自愈、自管理的智能存储节点构建的高可靠、自治、分布式对象存储系统)的对象操作,都需要预先转换为能够被本地文件系统是被、符合posi语义的文件操作,这个过程效率较低。而BlueStore性能提升主要有两个方面:第一个也是最根本的原因 它选择直接向对象操作,从而大大得缩短了io路径;第二个是BuleStore选择将元数据和用户数据严格分离,因此BlueStore中的元数据可以单独采用高速固态存储设备例如 NVME SSD。
DB WAL分区
BlueStore选择将DB 和WAL 分区交给BlueFs来使用,此时这两个分区分别存储BlueStore后端产生的元数据和日志文件,这样整个存储系统通过元数据对数据的操作效率极高,同时通过日志事务来维持系统的稳定性,整个系统相对来说稳定性就极高。
具体DB WAL工作过程是如何通过BlueFs来组织的,一些实现上的细节建议大家阅读ceph:BlueFs.cc以及由中兴ceph团队写的书籍《ceph设计原理与实现》