Ceph RBD - ceph#

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

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

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

用語#

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

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

LXD の ceph ドライバ#

注釈

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

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

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

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

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

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

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

制限#

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

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

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

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

複数インストールされた LXD 間で同じ 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 と同じ

ブロックデバイスのマウントオプション

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 テンプレート文字列 (スケジュールされたスナップショットと名前無しのスナップショットで使用)

snapshots.schedule

string

カスタムボリューム

volume.snapshots.schedule と同じ

Cron 表記 (<minute> <hour> <dom> <month> <dow>) かスケジュールエイリアスのカンマ区切りリスト (@hourly, @daily, @midnight, @weekly, @monthly, @annually, @yearly)