第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+1
以上にすることを推奨します。
イレイジャーコーディングは、レプリケーションよりもストレージ容量をより効率的に使用します。n 個のレプリケーションアプローチは、オブジェクトの n
個のコピーを維持するのに対し (Ceph のデフォルトは 3x)、イレイジャーコーディングは k
+ m
チャンクのみを保持します。たとえば、3 データと 2 つのブロックのチャンクは、元のオブジェクトの 1.5x のストレージ領域を使用します。
イレイジャーコーディングはレプリケーションと比べてストレージのオーバーヘッドが少なく、イレイジャーコードアルゴリズムは、オブジェクトへのアクセスや復旧時に、レプリケーションよりも多くの RAM および CPU を使用します。イレイジャーコーディングは、データストレージが永続的であり、耐障害性になければならないものの、高速な読み取り (たとえば、コールドマイグレーションストレージ、履歴レコードなど) を必要としない場合に役立ちます。
Ceph でのイレイジャーコードがどのように機能するかの詳細は、Red Hat Ceph Storage 5 のアーキテクチャーガイドの Ceph イレイジャーコード セクションを参照してください。
Ceph は、k=2 および m=2 でクラスターを初期化するときに、デフォルト のイレイジャーコードプロファイルを作成します。つまり、Ceph は、オブジェクトデータを 4 つの OSD (k+m == 4) に分散し、データを損失せずに、これらの OSD の 1 つを損失する可能性があります。イレイジャーコードのプロファイリングの詳細は、イレイジャーコードのプロファイル を参照してください。
.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 と同等で、少なくとも 3 台のホストが必要です。
$ ceph osd pool create ecpool 32 32 erasure pool 'ecpool' created $ echo ABCDEFGHI | rados --pool ecpool put NYAN - $ rados --pool ecpool get NYAN - ABCDEFGHI
pool create
の 32 は配置グループの数を表します。