Ceph storage backend bluestore について

分散オブジェクトストレージ Ceph はそのバックエンドとして、ファイルシステムを使う filestore の他に、ブロックデバイスを使う bluestore をサポートしている。

bluestore については公式ブログの記事slideshare に概要がある。

大雑把に書くと、メタデータの保存に rocksdb を使い、rocksdb をブロックデバイス上に構成するために、bluefs というシンプルなファイルシステムを使っている。

bluestore は rocksdb に様々なメタデータを保存していて、Ceph のオブジェクトの他にも、例えばブロックデバイスのフリーリストなども入っている。

bluefs は rocksdb を動かすための最小限のファイルシステムで、bluefs 自体のメタデータはすべて journal log に書き込まれている。 そのため起動時にこのログをリプレイすることでメタデータを復元している。

この journal には bluefs が利用している領域についての情報も含まれている。 journal は bluefs 上のファイルとして表現されているため、bluefs を mount するためには journal を再生する必要があるが、journal を open するには mount する必要があるという循環が起こっている。

この解決に bluefs は superblock 上に journal ファイルに関するメタデータを保存しており、この循環を断ち切っている。