第5章 イレイジャーコードプール
Ceph ストレージストラテジーには、データの持続性要件を定義します。データの持続性とは、データが失われることなく、1 つまたは複数の OSD の損失を持続させることができることを意味します。
Ceph は、データをプールに保存します。プールには 2 種類のプールがあります。
- replicated
- erasure-coded
Ceph はデフォルトで複製されたプールを使用します。これにより、Ceph はすべてのオブジェクトをプライマリー OSD ノードから 1 つ以上のセカンダリー OSD にコピーします。
イレイジャーコーディングされたプールは、データの持続性を確保するのに必要なディスク容量を減らしますが、レプリケーションよりもコストが高くなります。
イレイジャーコーディングは、Ceph ストレージクラスターにオブジェクトを大幅に格納する方法であり、イレイジャーコードアルゴリズムによりオブジェクトがデータチャンク (k
)、およびコーディングチャンク (m
) に分割され、これらのチャンクを異なる OSD に保存します。
OSD に障害が発生すると、Ceph は他の OSD から残りのデータ (k
) およびコーディング (m
) チャンクを取得し、イレイジャーコードアルゴリズムはこれらのチャンクからオブジェクトを復元します。
Red Hat では、書き込みやデータの損失を防ぐために、イレイジャーコーディングされたプールの min_size
を K+2
以上にすることが推奨します。
イレイジャーコーディングは、レプリケーションよりもストレージ容量をより効率的に使用します。n 個のレプリケーションアプローチは、オブジェクトの n
個のコピーを維持するのに対し (Ceph のデフォルトは 3x)、イレイジャーコーディングは k
+ m
チャンクのみを保持します。たとえば、3 データと 2 つのブロックのチャンクは、元のオブジェクトの 1.5x のストレージ領域を使用します。
イレイジャーコーディングはレプリケーションと比べてストレージのオーバーヘッドが少なく、イレイジャーコードアルゴリズムは、オブジェクトへのアクセスや復旧時に、レプリケーションよりも多くの RAM および CPU を使用します。イレイジャーコーディングは、データストレージが永続的であり、耐障害性になければならないものの、高速な読み取り (たとえば、コールドマイグレーションストレージ、履歴レコードなど) を必要としない場合に役立ちます。
Ceph でのイレイジャーコード がどのように機能するかの詳細は、Red Hat Ceph Storage 3 の 『アーキテクチャーガイド』 の「イレイジャーコード I/O 」セクションを参照してください。
k=2 および m=1 を使用してクラスターを初期化する際に、Ceph は デフォルト のイレイジャーコードプロファイルを作成します。つまり、Ceph は 3 つの OSD (k+m == 3) にオブジェクトデータを分散し、Ceph がこれらの OSD のいずれかを、データを失うことなく失う可能性があることを意味します。イレイジャーコードのプロファイリングの詳細は、「イレイジャーコードのプロファイル」を参照してください。
.rgw.buckets
プールのみをイレイジャーコーディング済みとして設定し、その他のすべての Ceph Object Gateway プールをレプリケート済みとして設定すると、新しいバケットを作成しようとすると以下のエラーで失敗します。
set_req_state_err err_no=95 resorting to 500
このため、イレイジャーコーディングされたプールは omap
操作をサポートしません。特定の Ceph Object Gateway メタデータプールには omap
サポートが必要です。
5.1. サンプルでコーディングされたプールの作成
最も簡単なイレイジャーコードプールは RAID5 と同等で、少なくとも 3 台のホストが必要です。
$ ceph osd pool create ecpool 50 50 erasure pool 'ecpool' created $ echo ABCDEFGHI | rados --pool ecpool put NYAN - $ rados --pool ecpool get NYAN - ABCDEFGHI
pool create の 50 は配置グループの数を表します。