5.4.2.2. 低レベル LRC プロファイルの作成

k および m の合計は、l パラメーターの倍数でなければなりません。低レベル設定パラメーターはこのような制限を課さないため、特定の目的で使用する方が便利です。たとえば、4 つのチャンクがあるグループと、3 つのチャンクを持つ 2 つのグループを定義できます。また、インスタンスデータセンターやラックなど、局所性セットをデータセンターに再帰的で定義することもできます。k/m/l は、低レベルの設定を生成することで実装されます。

lrc イレイジャーコードプラグインは、イレイジャーコード技術を再帰的に適用し、一部のチャンクの失われた状態を回復するには、ほとんどの場合は、利用可能なチャンクのサブセットのみが必要になります。

たとえば、3 つのコーディングのステップを以下に説明します。

chunk nr    01234567
step 1      _cDD_cDD
step 2      cDDD____
step 3      ____cDDD

c がデータチャンク D から計算したチャンクをコーディングする場合、チャンク 7 の損失は、最後の 4 つのチャンクを使用して復元できます。chun 2 チャンクが失われると、最初の 4 つのチャンクを使用して復元できます。

最小のテストシナリオは、デフォルトの erasure-code プロファイルの使用を厳密に同等です。DDK=2 を意味し、cM=1 を意味し、デフォルトで jerasure プラグインを使用します。

$ ceph osd erasure-code-profile set LRCprofile \
     plugin=lrc \
     mapping=DD_ \
     layers='[ [ "DDc", "" ] ]'
$ ceph osd pool create lrcpool 12 12 erasure LRCprofile

lrc プラグインは、ラック間の帯域幅の使用量を減らすのに特に便利です。すべてのホストが同じスイッチに接続されている場合に、ユースケースが考慮されないかもしれませんが、帯域幅の使用量は実際に確認される可能性があります。チャンクのレイアウトは異なりますが、k=4m=2、および l=3 と同等です。

$ ceph osd erasure-code-profile set LRCprofile \
     plugin=lrc \
     mapping=__DD__DD \
     layers='[
               [ "_cDD_cDD", "" ],
               [ "cDDD____", "" ],
               [ "____cDDD", "" ],
             ]'
$ ceph osd pool create lrcpool 12 12 erasure LRCprofile

Firefly では、プライマリー OSD が失われたチャンクと同じラックにある場合にのみ、帯域幅が減少します。

$ ceph osd erasure-code-profile set LRCprofile \
     plugin=lrc \
     mapping=__DD__DD \
     layers='[
               [ "_cDD_cDD", "" ],
               [ "cDDD____", "" ],
               [ "____cDDD", "" ],
             ]' \
     crush-steps='[
                     [ "choose", "rack", 2 ],
                     [ "chooseleaf", "host", 4 ],
                    ]'
$ ceph osd pool create lrcpool 12 12 erasure LRCprofile

LRC は、デフォルトの EC バックエンドとして jerasure を使用するようになりました。低レベル設定を使用して、レイヤーごとに EC バックエンドおよびアルゴリズムを指定することができます。layers='[ [ "DDc", "" ] ]' の 2 つ目の引数は、実際にこのレベルに使用するイレイジャーのコードプロファイルです。以下の例は、lrcpool で使用する Cauchy 手法を含む ISA バックエンドを示しています。

$ ceph osd erasure-code-profile set LRCprofile \
     plugin=lrc \
     mapping=DD_ \
     layers='[ [ "DDc", "plugin=isa technique=cauchy" ] ]'
$ ceph osd pool create lrcpool 12 12 erasure LRCprofile

レイヤーごとに異なるイレイジャーコードプロファイルを使用することもできます。

$ ceph osd erasure-code-profile set LRCprofile \
     plugin=lrc \
     mapping=__DD__DD \
     layers='[
               [ "_cDD_cDD", "plugin=isa technique=cauchy" ],
               [ "cDDD____", "plugin=isa" ],
               [ "____cDDD", "plugin=jerasure" ],
             ]'
$ ceph osd pool create lrcpool 12 12 erasure LRCprofile