2.10. Ceph BlueStore

BlueStore 是 Ceph 的下一代存储实施。由于存储设备的市场现在包括固态驱动器或 SSD,以及 PCI Express 或 NVMe 上的非易失性内存,它们在 Ceph 中使用表明 FileStore 存储实施存在一些限制。虽然 FileStore 有很多改进来促进 SSD 和 NVMe 存储,但其他限制仍然存在。其中,不断增加的放置组仍在计算成本上仍然比较昂贵,双重写入罚款仍然存在。虽然 FileStore 与块设备中的文件系统交互,BlueStore 消除了该间接层,并直接使用原始块设备进行对象存储。BlueStore 在小分区中使用非常轻量的权重 BlueFS 文件系统作为其 k/v 数据库。BlueStore 消除了代表放置组的目录的范式,即代表元数据的对象和文件 XATTR 的文件。BlueStore 同时消除了 FileStore 的双重写责任,因此写入操作几乎是大多数工作负载中的 BlueStore 快两倍。

BlueStore 将数据存储为:

  • 对象数据:BlueStore 中,Ceph 直接将对象存储为原始块设备中的块。存储对象数据的原始块设备部分不包含文件系统。文件系统的省略消除了一层间接数据,因而提高了性能。但是,大多数 BlueStore 性能的改进来自于块数据库和 write-ahead 日志。
  • Block Database:BlueStore 中,块数据库处理对象语义以确保 一致性。对象的唯一标识符是块数据库中的键。块数据库中的值包含一系列块地址,它们引用存储的对象数据、对象的放置组和对象元数据。块数据库可能位于存储对象数据的同一原始块设备的 BlueFS 分区中,或者可能会驻留在单独的块设备中,通常是当主块设备是硬盘时,SSD 或 NVMe 将提高性能。块数据库比 FileStore 提供很多改进,即 BlueStore 的键/值语义不受文件系统 XATTR 的限制。BlueStore 可能会在块数据库中快速将对象分配给其他放置组,而不用将文件从一个目录移动到另一个目录的开销,如 FileStore 中的情况所示。BlueStore 同时还引入了新功能。块数据库可以存储存储的对象数据及其元数据的校验和,允许对每个读取进行完整数据校验和操作,这比通过定期清理来检测位轮转更高效。BlueStore 可以压缩对象,并且块数据库可以存储用于压缩对象的算法,确保读取操作选择适当的解压缩算法。
  • write -ahead Log:BlueStore 中,write-ahead 日志确保了 原子性,类似于 FileStore 的日志记录功能。与 FileStore 类似,BlueStore 记录每个事务的所有方面。但是,BlueStore 写日志或 WAL 可以同时执行这个功能,这消除了 FileStore 的双重写入后果。因此,BlueStore 的速度几乎是大多数工作负载的写入操作中的 FileStore 速度的两倍。BlueStore 可以将 WAL 部署到用于存储对象数据的同一设备上,或者它可以在另一个设备上部署 WAL,通常是当主块设备是硬盘,并且 SSD 或 NVMe 来提高性能时。
注意

只有单独的设备比主存储设备更快时,将块数据库或 write-ahead 日志存储在单独的块设备中才有帮助。例如,SSD 和 NVMe 设备通常比 HDD 快。由于工作负载的不同,将块数据库和 WAL 放置到单独的设备上也可能具有性能优势。