Ceph RBD - ceph

Ceph はオープンソースのストレージプラットフォームで、データを RADOS に基づいたストレージクラスタ内に保管します。 非常にスケーラブルで、単一障害点がない分散システムであり非常に信頼性が高いです。

Ceph はブロックストレージ用とファイルシステム用に異なるコンポーネントを提供します。

Ceph RBD はデータとワークロードを Ceph クラスタに分散する Ceph のブロックストレージコンポーネントです。 これは Thin provisioning を使用し、リソースをオーバーコミットできることを意味します。

用語

Ceph は保管するデータに オブジェクト という用語を使用します。 データを保存と管理する責任を持つデーモンは Ceph OSD です。 Ceph のストレージは プール に分割されます。これはオブジェクトを保管する論理的なパーティションです。 これらは データプール, ストレージプール, OSD プール とも呼ばれます。

Ceph ブロックデバイスは RBD イメージ とも呼ばれ、これらの RBD イメージの スナップショットクローン を作成できます。

Incus の ceph ドライバー

注釈

Ceph RBD ドライバを使用するには ceph と指定する必要があります。 これは少し誤解を招く恐れがあります。 Ceph の全ての機能ではなく Ceph RBD(ブロックストレージ)の機能しか使わないからです。 コンテントタイプ filesystem(イメージ、コンテナとカスタムファイルシステムボリューム)のストレージボリュームには ceph ドライバは Ceph RDB イメージをその上にファイルシステムがある状態で使用します(block.filesystem 参照)。

別の方法として、コンテントタイプ filesystem でストレージボリュームを作成するのに CephFS を使用することもできます。

他のストレージドライバーとは異なり、このドライバーはストレージシステムをセットアップはせず、既に Ceph クラスタをインストール済みであると想定します。

このドライバーはリモートのストレージを提供するという意味でも他のドライバーとは異なる振る舞いをします。 結果として、内部ネットワークに依存し、ストレージへのアクセスはローカルのストレージより少し遅くなるかもしれません。 一方で、リモートのストレージを使うことはクラスタ構成では大きな利点があります。これはストレージプールを同期する必要なしに、すべてのクラスタメンバーが同じ内容を持つ同じストレージプールにアクセスできるからです。

Incus 内の ceph ドライバーはイメージ、スナップショットに RBD イメージを使用し、インスタンスとスナップショットを作成するのにクローンを使用します。

Incus は OSD ストレージプールに対して完全制御できることを想定します。 このため、 Incus OSD ストレージプール内に Incus が所有しないファイルシステムエンティティは Incus が消してしまうかもしれないので決して置くべきではありません。

Ceph RBD 内で copy-on-write が動作する方法のため、親の RBD イメージはすべての子がいなくなるまで削除できません。 結果として Incus は削除されたがまだ参照されているオブジェクトを自動的にリネームします。 そのようなオブジェクトはすべての参照がいなくなりオブジェクトが安全に削除できるようになるまで zombie_ 接頭辞をつけて維持されます。

制限

ceph ドライバーには以下の制限があります。

インスタンス間でのカスタムボリュームの共有

コンテントタイプ filesystem のカスタムストレージボリュームは異なるクラスタメンバーの複数のインスタンス間で通常は共有できます。 しかし、 Ceph RBD ドライバーは RBD イメージ上にファイルシステムを置くことでコンテントタイプ filesystem のボリュームを「シミュレート」しているため、カスタムストレージボリュームは一度に 1 つのインスタンスにしか割り当てできません。 コンテントタイプ filesystem のカスタムボリュームを共有する必要がある場合は代わりに CephFS - cephfs ドライバーを使用してください。

複数インストールされた Incus 間で OSD ストレージプールの共有

複数インストールされた Incus 間で同じ OSD ストレージプールを共有することはサポートされていません。

タイプ "erasure" の OSD プールの使用

タイプ "erasure" の OSD プールを使用するには事前に OSD プールを作成する必要があります。 さらにタイプ "replicated" の別の OSD プールを作成する必要もあります。これはメタデータを保管するのに使用されます。 これは Ceph RBD が omap をサポートしないために必要となります。 どのプールが "erasure coded" であるかを指定するために ceph.osd.data_pool_name 設定オプションをイレージャーコーディングされたプールの名前に設定し source 設定オプションをリプリケートされたプールの名前に設定します。

設定オプション

ceph ドライバーを使うストレージプールとこれらのプール内のストレージボリュームには以下の設定オプションが利用できます。

ストレージプール設定

キー

デフォルト値

説明

ceph.cluster_name

string

ceph

新しいストレージプールを作成する Ceph クラスタの名前

ceph.osd.data_pool_name

string

-

OSD data pool の名前

ceph.osd.pg_num

string

32

OSD ストレージプール用の placement グループの数

ceph.osd.pool_name

string

プールの名前

OSD ストレージプールの名前

ceph.rbd.clone_copy

bool

true

フルのデータセットコピーではなく RBD のライトウェイトクローンを使うかどうか

ceph.rbd.du

bool

true

停止したインスタンスのディスク使用データを取得するのに RBD du を使用するかどうか

ceph.rbd.features

string

layering

ボリュームで有効にする RBD の機能のカンマ区切りリスト

ceph.user.name

string

admin

ストレージプールとボリュームの作成に使用する Ceph ユーザー

source

string

-

使用する既存の OSD ストレージプール

volatile.pool.pristine

string

true

プールが作成時に空かどうか

Tip

これらの設定に加えて、ストレージボリューム設定のデフォルト値を設定できます。 ストレージボリュームのデフォルト値を変更する を参照してください。

ストレージボリューム設定

キー

条件

デフォルト値

説明

block.filesystem

string

volume.block.filesystem と同じ

ストレージボリュームのファイルシステム: btrfs, ext4 または xfs (未指定の場合 ext4)

block.mount_options

string

volume.block.mount_options と同じ

block-backedなファイルシステムボリュームのマウントオプション

security.shared

bool

カスタムブロックボリューム

volume.security.shared と同じか false

複数のインスタンスでのボリュームの共有を有効にする

security.shifted

bool

カスタムボリューム

volume.security.shifted と同じか false

ID シフトオーバーレイを有効にする (複数の分離されたインスタンスによるアタッチを許可する)

security.unmapped

bool

カスタムボリューム

volume.security.unmapped と同じか false

ボリュームの ID マッピングを無効にする

size

string

volume.size と同じ

ストレージボリュームのサイズ/クォータ

snapshots.expiry

string

カスタムボリューム

volume.snapshots.expiry と同じ

スナップショットをいつ削除するかを制御 (1M 2H 3d 4w 5m 6y のような式を期待)

snapshots.pattern

string

カスタムボリューム

volume.snapshots.pattern と同じか snap%d

スナップショットの名前を表す Pongo2 テンプレート文字列 (スケジュールされたスナップショットと名前無しのスナップショットで使用) [1]

snapshots.schedule

string

カスタムボリューム

volume.snapshots.schedule と同じ

Cron 表記 (<minute> <hour> <dom> <month> <dow>)、またはスケジュールエイリアスのカンマ区切りリスト(@hourly, @daily, @midnight, @weekly, @monthly, @annually, @yearly)、または自動スナップショットを無効にする場合は空文字(デフォルト)