第5章 イレイジャーコードプールの概要
Ceph はデフォルトで複製されたプールを使用します。これにより、Ceph はすべてのオブジェクトをプライマリー OSD ノードから 1 つ以上のセカンダリー OSD にコピーします。イレイジャーコーディングされたプールは、データの持続性を確保するのに必要なディスク容量を減らしますが、レプリケーションよりもコストが高くなります。
Ceph ストレージストラテジーには、データの持続性要件を定義します。データの持続性とは、データが失われることなく、1 つまたは複数の OSD の損失を持続させることができることを意味します。
Ceph は、データをプールに保存します。プールには 2 種類のプールがあります。
- replicated
- erasure-coded
イレイジャーコーディングは、Ceph ストレージクラスターにオブジェクトを大幅に格納する方法であり、イレイジャーコードアルゴリズムによりオブジェクトがデータチャンク (k
)、およびコーディングチャンク (m
) に分割され、これらのチャンクを異なる OSD に保存します。
OSD に障害が発生すると、Ceph は他の OSD から残りのデータ (k
) およびコーディング (m
) チャンクを取得し、イレイジャーコードアルゴリズムはこれらのチャンクからオブジェクトを復元します。
Red Hat は、書き込みやデータの損失を防ぐために、イレイジャーコーディングされたプールの min_size
を K+1
以上にすることを推奨します。
イレイジャーコーディングは、レプリケーションよりもストレージ容量をより効率的に使用します。n 個のレプリケーションアプローチは、オブジェクトの n
個のコピーを維持するのに対し (Ceph のデフォルトは 3x)、イレイジャーコーディングは k
+ m
チャンクのみを保持します。たとえば、3 データと 2 つのブロックのチャンクは、元のオブジェクトの 1.5x のストレージ領域を使用します。
イレイジャーコーディングはレプリケーションと比べてストレージのオーバーヘッドが少なく、イレイジャーコードアルゴリズムは、オブジェクトへのアクセスや復旧時に、レプリケーションよりも多くの RAM および CPU を使用します。イレイジャーコーディングは、データストレージが永続的であり、耐障害性になければならないものの、高速な読み取り (たとえば、コールドマイグレーションストレージ、履歴レコードなど) を必要としない場合に役立ちます。
Ceph でイレイジャーコードがどのように機能するかの詳細は、Red Hat Ceph Storage 8 の アーキテクチャーガイド の Ceph イレイジャーコーディング セクションを参照してください。
k=2 および m=2 を使用してクラスターを初期化する際に、Ceph は デフォルト のイレイジャーコードプロファイルを作成します。つまり、Ceph は 3 つの OSD (k+m == 4) にオブジェクトデータを分散し、Ceph がこれらの OSD のいずれかを、データを失うことなく失う可能性があることを意味します。イレイジャーコードのプロファイリングの詳細は、イレイジャーコードプロファイル セクションを参照してください。
.rgw.buckets
プールのみをイレイジャーコーディング済みとして設定し、その他のすべての Ceph Object Gateway プールをレプリケート済みとして設定すると、新しいバケットを作成しようとすると以下のエラーで失敗します。
set_req_state_err err_no=95 resorting to 500
このため、イレイジャーコーディングされたプールは omap
操作をサポートしません。特定の Ceph Object Gateway メタデータプールには omap
サポートが必要です。
5.1. イレイジャーコーディングされたプールのサンプルの作成
イレイジャーコーディングプールを作成し、配置グループを指定します。ceph osd pool create
コマンドは、別のプロファイルが指定されていない限り、デフォルトのプロファイルを使用して消去コード化プールを作成します。プロファイルは、k
と m
の 2 つのパラメーターを設定してデータの冗長性を定義します。これらのパラメーターは、データが分割されるチャンクの数と作成されるコーディングチャンクの数を定義します。
最も簡単なイレイジャーコードプールは RAID5 と同等で、少なくとも 4 台のホストが必要です。2+2 プロファイルを使用してイレイジャーコーディングされたプールを作成できます。
手順
2+2 設定の 4 つのノード上のイレイジャーコーディングされたプールに対して次の設定を設定します。
構文
ceph config set mon mon_osd_down_out_subtree_limit host ceph config set osd osd_async_recovery_min_cost 1099511627776
重要一般に、イレイジャーコーディングプールではこれは必要ありません。
重要非同期復元のコストは、レプリカ上で遅れている PG ログエントリーの数と、失われたオブジェクトの数です。
osd_target_pg_log_entries_per_osd
は30000
です。したがって、単一の PG を持つ OSD には30000
のエントリーが存在する可能性があります。osd_async_recovery_min_cost
は 64 ビットの整数であるため、2+2 設定の EC プールの場合は、osd_async_recovery_min_cost
の値を1099511627776
に設定します。注記4 つのノードを持つ EC クラスターの場合、K+M の値は 2+2 です。ノードに完全な障害が発生すると、ノードは 4 つのチャンクとして回復されず、使用できるノードは 3 つだけになります。
mon_osd_down_out_subtree_limit
の値をhost
に設定すると、ホストのダウンシナリオ中に OSD がマークアウトされなくなり、データの再バランスが取られることがなくなり、ノードが再び起動するまで待機する必要がなくなります。2+2 設定のイレイジャーコーディングされたプールの場合は、プロファイルを設定します。
構文
ceph osd erasure-code-profile set ec22 k=2 m=2 crush-failure-domain=host
例
[ceph: root@host01 /]# ceph osd erasure-code-profile set ec22 k=2 m=2 crush-failure-domain=host Pool : ceph osd pool create test-ec-22 erasure ec22
イレイジャーコーディングされたプールを作成します。
例
[ceph: root@host01 /]# ceph osd pool create ecpool 32 32 erasure pool 'ecpool' created $ echo ABCDEFGHI | rados --pool ecpool put NYAN - $ rados --pool ecpool get NYAN - ABCDEFGHI
32 は配置グループの数です。