bluestore 对 rocksdb 的优化

2023-08-04  本文已影响0人  wayyyy
代号 版本 发布日期
Firefly 0.80版本(LTS) 2014年 5月
Giant 0.87版本(Stable) 2014年 10月
Hammer 0.94版本(LTS) 2015年 4月
Infernalis 9.x 版本(Stable) 2015年 11 月
Jewel 10.x版本(LTS) 2016年 4月
Kraken 11.x 版本(Stable) 2017年 1月
Luminous 12.x版本(LTS) 2017年 8月
Mimic 13.x 版本(Stable) 2018年 6月
Nautilus 14.x版本(LTS) 2019年 3月
Octopus 15.x 版本(Stable) 2020年 3月
Pacific 16.x版本(LTS) 2021年 3月

BlueStore 在L版被引入,用于取代以前的FileStore,BlueStore 最大的特点是OSD可以直接接管裸设备,并且将对象数据存储在该设备当中,对象有很多Key-Value属性信息,这些信息之前都是存储在文件的扩展属性或者 LevelDB 当中,而在BlueStore中,这些信息存储在RocksDB当中。但是RocksDB是运行在文件系统之上的,因为为了使用RocksDB,我们需要开发一个简单的简单的文件系统,即:BlusFS。

BlusFS 是一个简单的用户态日志型文件系统,其完整地实现了 Rocksdb:Env 所定义的全部API 。 这些 API 主要应用于固化 Rocksdb 运行过程中产生的 .sst( 对应 SSTable) 和 log(对应WAL 文件)。

由于 WAL 对 Rocksdb 的性能影响最为关键, 所以 BlueFS 在设计上支持将 .sst 和 .log 文件分开存储,以方便将 .log 文件单独保存在速度更快的固态存储介质上。(NVME SSD)由此,在引入 BlueFs 后,Bluestore 将所有存储空间从逻辑上划分为 3 个层次:

综上, 如果 3 类空间分别使用不同的管理设备,那么 BlueFS 中的可用空间一共有3种:

  1. 对于 .log 文件以及自身产生的日志 ( BlueFS 本身也是一种日志型本地文件系统)、 BlueFS 总是优先选择使用 WAL 类型的设备空间,如果 WAL 空间不存在或者空间不足则选择 DB 类型的设备空间;如果 DB 空间不存在或者空间不足,则选择Slow类型的设备空间。

  2. 对于.sst文件优先使用DB类型的设备空间,如果 DB 类型的设备空间不存在或者空间不足, 则选择Slow类型的设备空间。

在实际使用中,通常配置基 于 BlueStore 存储引擎的OSD,按照 block(100) : db(1) :wal(1) 的大小比例要求来划分逻辑区的大小。按照上述比例配置出的 OSD 性能经过实验验证是较好的, 也是行业内推荐的比例。

上一篇 下一篇

猜你喜欢

热点阅读