5.4. イレイジコードプラグイン
Ceph では、プラグインアーキテクチャーとのイレイジャーコーディングがサポートされます。つまり、さまざまなタイプのアルゴリズムを使用して、イレイジャーコードプールを作成できます。Ceph のサポート: - Jerasure (デフォルト)
5.4.1. Jerasure Erasure コードプラグイン
jerasure プラグインは、最も汎用的で柔軟性のあるプラグインです。Ceph Erasure コードプールのデフォルトでもあります。
jerasure プラグインは JerasureH ライブラリーをカプセル化します。パラメーターの詳細は、jerasure のドキュメントを参照してください。
jerasure プラグインを使用して新しいイレイジャーコードプロファイルを作成するには、以下のコマンドを実行します。
ceph osd erasure-code-profile set <name> \ plugin=jerasure \ k=<data-chunks> \ m=<coding-chunks> \ technique=<reed_sol_van|reed_sol_r6_op|cauchy_orig|cauchy_good|liberation|blaum_roth|liber8tion> \ [crush-root=<root>] \ [crush-failure-domain=<bucket-type>] \ [directory=<directory>] \ [--force]
ceph osd erasure-code-profile set <name> \
plugin=jerasure \
k=<data-chunks> \
m=<coding-chunks> \
technique=<reed_sol_van|reed_sol_r6_op|cauchy_orig|cauchy_good|liberation|blaum_roth|liber8tion> \
[crush-root=<root>] \
[crush-failure-domain=<bucket-type>] \
[directory=<directory>] \
[--force]
ここでは、以下のようになります。
- k
- 説明
- 各オブジェクトは data-chunks の部分で分割され、それぞれが異なる OSD に保管されます。
- 型
- 整数
- 必須
- 必須です。
- 例
-
4
- m
- 説明
- 各オブジェクトの コーディングチャンク を計算し、それらを異なる OSD に保存します。コーディングのチャンクの数は、データが失われることなくダウンできる OSD 数でもあります。
- 型
- 整数
- 必須
- 必須です。
- 例
- 2
- テクニック
- 説明
- より柔軟な技術は reed_sol_van で、k と m を設定するだけで十分です。cauchy_good 技術は速くなりますが、慎重に packetsize を選択する必要があります。reed_sol_r6_op、liberation、blaum_roth、liber8tion はすべて、m=2 でしか設定できない意味で RAID6 と同等です。
- 型
- String
- 必須
- いいえ
- 有効の設定
-
reed_sol_van
reed_sol_r6_op
cauchy_orig
cauchy_good
liberation
blaum_roth
liber8tion
- デフォルト
-
reed_sol_van
- packetsize
- 説明
- エンコーディングは、バイト サイズのパケットで一度に行われます。適切なパケットサイズの選択は困難です。jerasure ドキュメントには、このトピックに関する詳細な情報が記載されています。
- 型
- 整数
- 必須
- いいえ
- デフォルト
-
2048
- crush-root
- 説明
- ルールの最初のステップに使用される CRUSH バケットの名前。たとえば、step take default となります。
- 型
- String
- 必須
- いいえ
- デフォルト
- default
- crush-failure-domain
- 説明
- 同じ障害ドメインを持つバケットに 2 つのチャンクがないことを確認します。たとえば、障害ドメインが ホスト の場合、2 つのチャンクは同じホストに保存されません。これは、step chooseleaf host などのルールステップを作成するのに使用します。
- 型
- String
- 必須
- いいえ
- デフォルト
-
host
- directory
- 説明
- イレイジャーコードプラグインが読み込まれた ディレクトリー 名を設定します。
- 型
- String
- 必須
- いいえ
- デフォルト
-
/usr/lib/ceph/erasure-code
- --force
- 説明
- 同じ名前で既存のプロファイルを上書きします。
- 型
- String
- 必須
- いいえ
5.4.2. CRUSH 配置の制御
デフォルトの CRUSH ルールは、異なるホストにある OSD を提供します。以下に例を示します。
chunk nr 01234567 step 1 _cDD_cDD step 2 cDDD____ step 3 ____cDDD
chunk nr 01234567
step 1 _cDD_cDD
step 2 cDDD____
step 3 ____cDDD
各チャンクに 1 つずつ、正確に 8 つの OSD が必要です。ホストが 2 つ隣り合ったラックにある場合は、最初の 4 つのチャンクを最初のラックに配置し、残りを 2 番目のラックに配置できます。1 つの OSD の失われた状態からのリカバリーには、2 つのラック間で帯域幅を使用する必要はありません。
以下に例を示します。
crush-steps='[ [ "choose", "rack", 2 ], [ "chooseleaf", "host", 4 ] ]'
crush-steps='[ [ "choose", "rack", 2 ], [ "chooseleaf", "host", 4 ] ]'
rack タイプのクラッシュバケットを 2 つ選択し、それぞれに 4 つの OSD (タイプ host の異なるバケットに配置) を選択するルールを作成します。
また、細かい制御のためにルールを手動で作成することもできます。