目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Enterprise Storage 7.1マニュアル / 運用と管理ガイド / クラスタへのデータ保存 / イレージャコーディングプール
適用項目 SUSE Enterprise Storage 7.1

19 イレージャコーディングプール

Cephでは、プール内のデータの通常のレプリケーションに代わる代替手段が提供されています。これを「イレージャ」または「イレージャコーディング」プールと呼びます。イレージャプールは「複製」プールのすべての機能を備えているわけではありませんが(たとえば、RBDプールのメタデータを保存することはできません)、必要な未加工ストレージが少なくて済みます。1TBのデータを保存可能なデフォルトのイレージャプールでは、1.5TBの未加工ストレージが必要で、これによって単一ディスク障害を許容することができます。複製プールでは同じ目的に対して2TBの未加工ストレージが必要であるため、比較しても遜色ありません。

イレージャコードの背景情報については、https://en.wikipedia.org/wiki/Erasure_codeを参照してください。

ECプールに関連するプール値のリストについては、イレージャコーディングプールの値を参照してください。

19.1 イレージャコーディングプールの前提条件

イレージャコーディングを利用するには、以下を行う必要があります。

  • CRUSHマップでイレージャルールを定義する

  • 使用するコーディングアルゴリズムを指定するイレージャコードプロファイルを定義する

  • 前述したルールとプロファイルを使用してプールを作成する

プールを作成してデータを保存した後でプロファイルや、プロファイル内の詳細を変更することはできないことに注意してください。

「イレージャプール」のCRUSHルールではstepindepを使用するようにしてください。詳細については、17.3.2項 「firstnindepを参照してください。

19.2 サンプルのイレージャコーディングプールの作成

最もシンプルなイレージャコーディングプールはRAID5と同等で、少なくとも3つのホストを必要とします。この手順では、テスト用のプールを作成する方法について説明します。

  1. コマンドceph osd pool createを使用して、タイプが「erasure」のプールを作成します。12は、配置グループの数を表します。デフォルトのパラメータの場合、このプールは1つのOSDの障害に対応できます。

    cephuser@adm > ceph osd pool create ecpool 12 12 erasure
    pool 'ecpool' created
  2. 文字列ABCDEFGHINYANという名前のオブジェクトに書き込みます。

    cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
  3. これで、テストのためにOSDを無効にできます。たとえば、OSDをネットワークから接続解除します。

  4. プールがデバイスの障害に対応できるかどうかをテストするため、radosコマンドを使用してファイルの内容にアクセスできます。

    cephuser@adm > rados --pool ecpool get NYAN -
    ABCDEFGHI

19.3 イレージャコードプロファイル

ceph osd pool createコマンドを起動して「イレージャプール」を作成する場合、別のプロファイルを指定しない限り、デフォルトのプロファイルが使用されます。プロファイルはデータの冗長性を定義します。このためには、任意にkおよびmという名前が付けられた2つのパラメータを定義します。kおよびmは、1つのデータを何個のchunks (チャンク)に分割するかと、何個のコーディングチャンクを作成するかを定義します。これにより、冗長チャンクは異なるOSDに保存されます。

イレージャプールプロファイルに必要な定義は次のとおりです。

chunk

エンコーディング関数を呼び出すと、同じサイズの複数のチャンクが返されます。連結して元のオブジェクトを再構成できるデータチャンクと、失われたチャンクの再構築に使用できるコーディングチャンクです。

k

データチャンクの数。これは、元のオブジェクトが分割されるチャンクの数です。たとえば、k = 2の場合、10KBのオブジェクトはそれぞれが5KBのk個のオブジェクトに分割されます。イレージャコーディングプールのデフォルトのmin_sizeは、k + 1です。ただし、書き込みおよびデータが失われるのを防ぐため、min_sizek + 2以上にすることをお勧めします。

m

コーディングチャンクの数。これは、エンコーディング関数によって計算される追加チャンクの数です。コーディングチャンクが2つある場合、2つのOSDに障害が発生してもデータが失われないことを意味します。

crush-failure-domain

チャンクの分散先のデバイスを定義します。値としてバケットタイプを設定する必要があります。すべてのバケットタイプについては、17.2項 「バケット」を参照してください。障害ドメインがrackの場合、ラック障害時の災害耐性を向上させるため、チャンクは別のラックに保存されます。このためにはk+m個のラックが必要なことに注意してください。

19.2項 「サンプルのイレージャコーディングプールの作成」で使用されているデフォルトのイレージャコードプロファイルでは、1つのOSDまたはホストに障害が発生した場合は、クラスタデータは失われません。したがって、1TBのデータを保存するには、さらに0.5TBの未加工ストレージが必要です。つまり、1TBのデータには1.5TBの未加工ストレージが必要です(k=2、m=1であるため)。これは、一般的なRAID 5設定と同等です。比較すると、複製プールでは1TBのデータを保存するのに2TBの未加工ストレージが必要です。

デフォルトのプロファイルの設定は次のコマンドで表示できます。

cephuser@adm > ceph osd erasure-code-profile get default
directory=.libs
k=2
m=1
plugin=jerasure
crush-failure-domain=host
technique=reed_sol_van

プール作成後はプロファイルを変更できないため、適切なプロファイルを選択することが重要です。異なるプロファイルを持つ新しいプールを作成し、前のプールにあるオブジェクトをすべて新しいプールに移動する必要があります(18.6項 「プールのマイグレーション」を参照)。

km、およびcrush-failure-domainのパラメータは、ストレージのオーバーヘッドとデータの持続性を定義するので、プロファイルの中で最も重要なパラメータです。たとえば、目的のアーキテクチャが66%のストレージオーバーヘッドでラック2台分の損失に耐える必要がある場合、次のプロファイルを定義できます。これは「ラック」タイプのバケットが設定されたCRUSHマップでのみ有効であることに注意してください。

cephuser@adm > ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack

この新しいプロファイルで、19.2項 「サンプルのイレージャコーディングプールの作成」の例をもう一度使用できます。

cephuser@adm > ceph osd pool create ecpool 12 12 erasure myprofile
cephuser@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -
cephuser@adm > rados --pool ecpool get NYAN -
ABCDEFGHI

NYANオブジェクトは3つ(k=3)に分割され、2つの追加チャンク(m=2)が作成されます。mの値は、データを失うことなく何個のOSDが同時に失われても構わないかを定義します。crush-failure-domain=rackは、2つのチャンクが同じラックに保存されないようにするCRUSHルールセットを作成します。

Image

19.3.1 新しいイレージャコードプロファイルの作成

次のコマンドで新しいイレージャコードプロファイルを作成します。

# ceph osd erasure-code-profile set NAME \
 directory=DIRECTORY \
 plugin=PLUGIN \
 stripe_unit=STRIPE_UNIT \
 KEY=VALUE ... \
 --force
DIRECTORY

オプション。イレージャコードプラグインをロードするディレクトリの名前を設定します。デフォルトは/usr/lib/ceph/erasure-codeです。

PLUGIN

オプション。イレージャコードプラグインを使用して、コーディングチャンクを計算し、欠落しているチャンクを回復します。使用可能なプラグインは、「jerasure」、「isa」、「lrc」、および「shes」です。デフォルトは「jerasure」です。

STRIPE_UNIT

オプション。ストライプあたりの、データチャンクのデータ量。たとえば、2つのデータチャンクとstripe_unit=4Kが設定されたプロファイルでは、チャンク0に0~4K、チャンク1に4K~8K、続いてもう一度チャンク0に8K~12Kの範囲が設定されます。最高のパフォーマンスを得るためには、4Kの倍数にする必要があります。デフォルト値は、プールの作成時にモニタ設定オプションosd_pool_erasure_code_stripe_unitから取得されます。このプロファイルを使用するプールの「stripe_width」は、データチャンクの数にこの「stripe_unit」を掛けた値になります。

KEY=VALUE

選択したイレージャコードプラグインに固有のオプションのキー/値のペア。

--force

オプション。既存のプロファイルを同じ名前で上書きし、4K以外で配置されたstripe_unitを設定できるようにします。

19.3.2 イレージャコードプロファイルの削除

次のコマンドは、NAMEで指定したイレージャコードプロファイルを削除します。

# ceph osd erasure-code-profile rm NAME
重要
重要

プロファイルがプールによって参照されている場合、削除は失敗します。

19.3.3 イレージャコードプロファイルの詳細の表示

次のコマンドは、NAMEで指定したイレージャコードプロファイルの詳細を表示します。

# ceph osd erasure-code-profile get NAME

19.3.4 イレージャコードプロファイルの一覧

次のコマンドは、すべてのイレージャコードプロファイルの名前を一覧にします。

# ceph osd erasure-code-profile ls

19.4 イレージャコーディングプールをRADOS Block Deviceとしてマーク付け

ECプールにRBDプールとしてマークを付けるには、適切にタグを付けます。

cephuser@adm > ceph osd pool application enable rbd ec_pool_name

RBDはECプールにイメージの「データ」を保存できます。ただし、イメージのヘッダとメタデータは引き続き複製プールに保存する必要があります。このための「rbd」という名前のプールがあると想定した場合、次のコマンドを使用します。

cephuser@adm > rbd create rbd/image_name --size 1T --data-pool ec_pool_name

このイメージは他のイメージと同じように通常の方法で使用できますが、すべてのデータは「rbd」プールではなくec_pool_nameプールに保存される点が異なります。