2.10. Ceph BlueStore
BlueStore
は Ceph の次世代ストレージ実装です。ストレージデバイスの市場にはソリッドステートドライブ、SSD、PCI Express または NVMe 経由の不揮発性メモリーが含まれるようになったため、Ceph での使用により、FileStore
ストレージの実装の制限の一部が示されます。FileStore
には、SSD ストレージおよび NVMe ストレージを容易にするために多くの改良がありますが、他の制限は残ります。それらの中で、配置グループの増加は依然として計算コストが高く、二重書き込みペナルティーが残っています。FileStore
はブロックデバイスのファイルシステムと対話し、BlueStore
はその間接状態をなくし、オブジェクトストレージ用に raw ブロックデバイスを直接使用します。BlueStore
は、k/v データベース用に小規模なパーティションで非常に軽量な BlueFS
ファイルシステムを使用します。BlueStore
では、配置グループを表すディレクトリー (オブジェクトを表すファイルおよびメタデータを表すファイルの) の XATTR がなくなります。BlueStore
では FileStore
の 2 回の書き込みペナルティーが解消されるため、ほとんどのワークロードで BlueStore
を使用する場合に、書き込み操作はほぼ 2 倍速くなります。
BlueStore
は以下のようにデータを保存します。
-
オブジェクトデータ:
BlueStore
では、Ceph はオブジェクトを raw ブロックデバイスに直接ブロックとして保存します。オブジェクトデータを格納する raw ブロックデバイスの部分にはファイルシステムが含まれません。ファイルシステム省略により間接的な層が排除され、パフォーマンスが向上します。ただし、BlueStore
のパフォーマンスのほとんどは、ブロックデータベースと write-ahead ログにより向上されます。 -
ブロックデータベース:
BlueStore
では、整合性 を保証するために、ブロックデータベースがオブジェクトのセマンティクスを処理します。オブジェクトの一意の ID はブロックデータベースのキーです。ブロックデータベースの値は、格納したオブジェクトデータ、オブジェクトの配置グループ、およびオブジェクトメタデータを参照する一連のブロックアドレスで構成されます。ブロックデータベースは、オブジェクトデータを格納する同じ raw ブロックデバイス上のBlueFS
パーティションに存在する場合もあれば、別のブロックデバイスに存在する場合もあります。通常、ハードディスクドライブがプライマリーリブロックデバイスであり、SSD または NVMe によってパフォーマンスが向上します。ブロックデータベースでは、FileStore
に対する多くの改善が行われています。つまり、BlueStore
のキー/値のセマンティクスはファイルシステム XATTR の制限に悪い影響を与えません。BlueStore
は、FileStore
のように、ファイルをディレクトリーから別のディレクトリーに移動するオーバーヘッドなしに、ブロックデータベース内の他の配置グループにオブジェクトをすぐに割り当てることができます。BlueStore
には新機能も導入されています。ブロックデータベースは、保存されたオブジェクトデータとそのメタデータのチェックサムを保存できるため、読み取りごとに完全なデータチェックサム操作が可能になります。これは、ビットロットを検出するための定期的なスクラブよりも効率的です。BlueStore
はオブジェクトを圧縮でき、ブロックデータベースはオブジェクトの圧縮に使用されるアルゴリズムを保存できます。これにより、読み取り操作で解凍に適切なアルゴリズムが選択されます。 -
先行書き込みログ:
BlueStore
では、FileStore
のジャーナリング機能と同様に、先行書き込みログによって 原子性 が保証されます。FileStore
と同様に、BlueStore
は各トランザクションのすべての要素をログに記録します。ただし、BlueStore
の先行書き込みログまたは WAL は、この機能を同時に実行できるため、FileStore
の二重書き込みペナルティーがなくなります。その結果、BlueStore
は、ほとんどのワークロードの書き込み操作でFileStore
のほぼ2倍の速度になります。BlueStore は、オブジェクトデータを保存するために同じデバイスに WAL をデプロイできます。または、通常、プライマリーブロックデバイスがハードディスクドライブである場合や、SSD または NVMe によってパフォーマンスが向上する場合は、WAL を別のデバイスにデプロイできます。
個別のデバイスがプライマリーストレージデバイスよりも高速である場合にのみ、ブロックデータベースまたは先行書き込みログを別のブロックデバイスに保存すると便利です。たとえば、SSD デバイスおよび NVMe デバイスは通常 HDD よりも高速です。ブロックデータベースと WAL を別のデバイスに配置すると、ワークロードの違いにより、パフォーマンス上の利点があります。