5.2. イレイジャーコードプロファイル
Ceph は、プロファイル でイレイジャーコーディングされたプールを定義します。Ceph は、イレイジャーコーディングされたプールおよび関連する CRUSH ルールを作成する際にプロファイルを使用します。
Ceph は、クラスターを初期化する時にデフォルトのイレイジャーコードプロファイルを作成し、レプリケートされたプール内の 2 つのコピーと同じレベルの冗長性を提供します。ただし、25% 未満のストレージ容量を使用します。デフォルトのプロファイルは k=2 および m=1 を定義します。Ceph はオブジェクトデータを 3 つの OSD (k+m=3) に分散し、Ceph はデータを損失することなくこれらの OSD のいずれかを失う可能性があります。
デフォルトの元号付けコードプロファイルでは、1 つの OSD の損失を回避できます。これは 2 サイズが 2 つある複製されたプールと同等ですが、データ 1 TB を保存するには 1.5 TB ではなく 1.5 TB が必要になります。デフォルトのプロファイルを表示するには、以下のコマンドを使用します。
$ ceph osd erasure-code-profile get default directory=.libs k=2 m=1 plugin=jerasure crush-failure-domain=host technique=reed_sol_van
Raw ストレージ要件を増加させずに冗長性を強化するために、新規プロファイルを作成できます。たとえば、k=8 と m=4 のプロファイルでは、12 個の (k+m=12) OSD オブジェクトを配布することで、4 個の (m=4) OSD が失われないようにすることができます。Ceph はオブジェクトを 8 つのチャンクに分割し、リカバリー用に 4 つのコーディングチャンクを計算します。たとえば、オブジェクトサイズが 8 MB の場合、各データチャンクが 1 MB で、各データチャンクのサイズは 1 MB であり、各データチャンクのサイズは 1 MB でも同じサイズになります。4 つの OSD が同時に失敗した場合でも、このオブジェクトは失われません。
プロファイルで最も重要なパラメーターは、ストレージのオーバーヘッドとデータの永続性を定義するため、k、m、および crush-failure-domain です。
プールの作成後にプロファイルを変更できないため、正しいプロファイルの選択は重要です。プロファイルを変更するには、別のプロファイルで新しいプールを作成し、オブジェクトを古いプールから新しいプールに移行する必要があります。
たとえば、目的のアーキテクチャーがストレージオーバーヘッドの 40% オーバーヘッドの 2 つのラックが失われなければならない場合、以下のプロファイルを定義することができます。
$ ceph osd erasure-code-profile set myprofile \ k=4 \ m=2 \ crush-failure-domain=rack $ ceph osd pool create ecpool 12 12 erasure *myprofile* $ echo ABCDEFGHIJKL | rados --pool ecpool put NYAN - $ rados --pool ecpool get NYAN - ABCDEFGHIJKL
プライマリー OSD は、NYAN オブジェクト を 4 つ (k=4) のデータチャンクに分割し、2 つの追加のチャンク (m=2) を作成します。m の値は、データを失うことなく同時に失われた OSD の数を定義します。crush-failure-domain=rack は、2 つのチャンクが同じラックに保存されないように CRUSH ルールを作成します。
Red Hat は、k および m に以下の jerasure コーディング値をサポートしています。
- k=8 m=3
- k=8 m=4
- k=4 m=2
失われた OSD の数がコーディングチャンクの数 (m
) と同等である場合、イレイジャーコーディングプールの一部の配置グループは不完全な状態になります。失われた OSD の数が m
未満の場合、配置グループは不完全な状態になりません。いずれの場合も、データの損失は発生しません。配置グループが不完全な状態の場合は、イレイジャーコード化されたプールの min_size
を一時的に縮小することで復元が可能になります。
5.2.1. OSD erasure-code-profile
Set
新しい元号のコードプロファイルを作成するには、以下の手順を実施します。
ceph osd erasure-code-profile set <name> \ [<directory=directory>] \ [<plugin=plugin>] \ [<stripe_unit=stripe_unit>] \ [<crush-device-class>]\ [<crush-failure-domain>]\ [<key=value> ...] \ [--force]
詳細は以下のようになります。
- directory
- 説明
- イレイジャーコードプラグインが読み込まれた ディレクトリー 名を設定します。
- タイプ
- 文字列
- 必須
- いいえ
- デフォルト
-
/usr/lib/ceph/erasure-code
- プラグイン
- 説明
- イレイジャーコードプラグインを使用して、コーディングしたチャンクを計算して、欠落しているチャンクを回復します。詳細は「イレイジャーコードのプラグイン」セクションを参照してください。
- タイプ
- 文字列
- 必須
- いいえ
- デフォルト
-
jerasure
- stripe_unit
- 説明
-
ストライプごとにデータチャンクのデータの量。たとえば、2 つのデータチャンクと
stripe_unit=4K
のプロファイルでは、範囲 0 ~ 4,000 がチャンク 0 に設定され、4,000 ~ 8,000 がチャンク 1 に、8,000 ~ 12,000 がチャンク 0 に再び設定されます。最高のパフォーマンスを得るためには、4K の倍数である必要があります。デフォルト値は、プールの作成時に監視設定オプションosd_pool_erasure_code_stripe_unit
から取得されます。このプロファイルを使用するプールの stripe_width は、このstripe_unit
で乗算したデータチャンクの数になります。 - 型
- 文字列
- 必須
- いいえ
- デフォルト
-
4K
- crush-device-class
- 詳細
-
hdd
、ssd
などのデバイスクラス。RHCS 3 以降でのみ利用可能です。 - タイプ
- 文字列
- 必須
- いいえ
- デフォルト
-
none
(CRUSH がクラスに関係なくすべてのデバイスを使用することを意味します)。
- crush-failure-domain
- 詳細
-
host
、rack
などの障害ドメイン。 - 型
- 文字列
- 必須
- いいえ
- デフォルト
-
host
- key
- 説明
- 残りのキーと値のペアのセマンティックは、イレイジャーコードプラグインによって定義されます。
- タイプ
- 文字列
- 必須
- No
- --force
- 説明
- 同じ名前で既存のプロファイルを上書きします。
- タイプ
- 文字列
- 必須
- いいえ