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

18 ストレージプールの管理

Cephはデータをプール内に保存します。プールは、オブジェクトを保存するための論理グループです。プールを作成せずに初めてクラスタを展開した場合、Cephはデフォルトのプールを使用してデータを保存します。次の重要な特徴はCephプールに関連するものです。

  • 「災害耐性」: Cephプールは、プール内のデータを複製またはエンコードすることで、災害耐性をもたらします。各プールは複製プール(replicated)、またはイレージャコーディングプール(erasure coding)に設定できます。複製プールの場合、プール内の各データオブジェクトが持つレプリカ(コピー)の数をさらに設定します。失っても問題ないコピー(OSD、CRUSHバケット/リーフ)の数は、レプリカの数 - 1個までです。イレージャコーディングを使用する場合、値kと値mを設定します。値kはデータチャンクの数で、値mはコーディングチャンクの数です。イレージャコーディングプールの場合、失ってもデータに問題が生じないOSD(CRUSHバケット/リーフ)の数は、コーディングチャンクの数により決まります。

  • 「配置グループ」: プールの配置グループの数を設定できます。一般的な設定では、OSDあたり約100個の配置グループを使用し、大量のコンピューティングリソースを使用することなく最適なバランスを提供します。複数のプールを設定する場合は、プールとクラスタ全体の両方にとって適切な数の配置グループを設定するよう注意してください。

  • 「CRUSHルール」: プールにデータを保存する場合、オブジェクトとそのレプリカ(またはイレージャコーディングプールの場合はチャンク)は、プールにマップされたCRUSHルールに従って配置されます。ご使用のプールに対してカスタムCRUSHルールを作成できます。

  • 「スナップショット」: ceph osd pool mksnapを使用してスナップショットを作成すると、特定のプールのスナップショットが効果的に作成されます。

データをプールに編成するために、プールを一覧、作成、および削除できます。各プールの使用量統計を表示することもできます。

18.1 プールの作成

オブジェクトのコピーを複数保持することによってOSDの損失から回復するにはreplicated、汎用RAID5またはRAID6機能を利用するにはerasureを指定して、プールを作成できます。必要な未加工ストレージは、複製プールでは多く、イレージャコーディングプールでは少なくなります。デフォルトの設定値はreplicatedです。イレージャコーディングプールの詳細については、第19章 「イレージャコーディングプールを参照してください。

複製プールを作成するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool create POOL_NAME
注記
注記

これ以外のオプション引数については、自動拡張機能で処理されます。詳細については、17.4.12項 「配置グループの自動拡張の有効化」を参照してください。

イレージャコーディングプールを作成するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool create POOL_NAME erasure CRUSH_RULESET_NAME \
EXPECTED_NUM_OBJECTS

OSDあたりの配置グループの制限を超える場合、ceph osd pool createコマンドは失敗する可能性があります。この制限はオプションmon_max_pg_per_osdで設定します。

POOL_NAME

プールの名前。固有である必要があります。このオプションは必須です。

POOL_TYPE

プールタイプ。オブジェクトのコピーを複数保持することによってOSDの損失から回復するには「replicated」、一種の汎用RAID5機能を利用するには「erasure」を指定できます。複製プールの場合、必要な未加工ストレージが増えますが、Cephのすべての操作が実装されます。イレージャプールの場合、必要な未加工ストレージは減りますが、利用可能な操作のサブセットのみが実装されます。デフォルトのPOOL_TYPEreplicatedです。

CRUSH_RULESET_NAME

このプールのCRUSHルールセットの名前。指定したルールセットが存在しない場合、複製プールの作成は-ENOENTで失敗します。複製プールではosd pool default CRUSH replicated ruleset設定変数で指定されるルールセットです。このルールセットは存在している必要があります。イレージャプールでは、デフォルトのイレージャコードプロファイルを使用する場合は「erasure-code」、それ以外の場合はPOOL_NAMEです。このルールセットは、まだ存在しない場合は暗黙的に作成されます。

erasure_code_profile=profile

イレージャコーディングプール専用。イレージャコードプロファイルを使用します。osd erasure-code-profile setで定義した既存のプロファイルである必要があります。

注記
注記

何らかの理由でプールの自動拡張が無効化(pg_autoscale_modeがoffに設定)されている場合は、手動でPG数を計算して設定できます。プールに適した配置グループ数の計算の詳細については、「17.4項 「配置グループ」」を参照してください。

EXPECTED_NUM_OBJECTS

このプールの想定オブジェクト数。この値を(負のfilestore merge thresholdとともに)設定すると、プールの作成時にPGフォルダが分割されます。これにより、ランタイム時のフォルダ分割によるレイテンシの影響が避けられます。

18.2 プールの一覧

クラスタのプールを一覧にするには、次のコマンドを実行します。

cephuser@adm > ceph osd pool ls

18.3 プールの名前変更

プールの名前を変更するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool rename CURRENT_POOL_NAME NEW_POOL_NAME

プールの名前を変更する場合に、認証ユーザ用のプールごとのケーパビリティがあるときは、そのユーザのケーパビリティを新しいプール名で更新する必要があります。

18.4 プールの削除

警告
警告: プールの削除は元に戻せない

プールには重要なデータが収められている場合があります。プールを削除すると、プール内のすべてのデータが消え、回復する方法はありません。

誤ってプールを削除することはきわめて危険であるため、Cephには、プールの削除を防止するメカニズムが2つ実装されています。プールを削除するには、両方のメカニズムを無効にする必要があります。

1つ目のメカニズムはNODELETEフラグです。各プールにこのフラグがあり、デフォルト値は「false」です。プールのこのフラグのデフォルト値を確認するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool get pool_name nodelete

nodelete: trueが出力される場合、次のコマンドを使用してフラグを変更しない限り、プールを削除できません。

cephuser@adm > ceph osd pool set pool_name nodelete false

2つ目のメカニズムは、クラスタ全体の設定パラメータmon allow pool deleteで、デフォルトは「false」です。つまり、デフォルトではプールを削除できません。表示されるエラーメッセージは次のとおりです。

Error EPERM: pool deletion is disabled; you must first set the
mon_allow_pool_delete config option to true before you can destroy a pool

この安全設定に関係なくプールを削除するには、mon allow pool deleteを一時的に「true」に設定してプールを削除し、その後、パラメータを「false」に戻します。

cephuser@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=true
cephuser@adm > ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-it
cephuser@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=false

injectargsコマンドを実行すると、次のメッセージが表示されます。

injectargs:mon_allow_pool_delete = 'true' (not observed, change may require restart)

これは単にコマンドが正常に実行されたことを確認するものです。エラーではありません。

作成したプール用に独自のルールセットとルールを作成した場合、プールが必要なくなったらルールセットとルールを削除することをお勧めします。

18.5 その他の操作

18.5.1 プールとアプリケーションの関連付け

プールを使用する前に、プールをアプリケーションに関連付ける必要があります。CephFSで使用されるプール、またはObject Gatewayによって自動的に作成されるプールは自動的に関連付けられます。

それ以外の場合は、自由な形式のアプリケーション名を手動でプールに関連付けることができます。

cephuser@adm > ceph osd pool application enable POOL_NAME APPLICATION_NAME
ヒント
ヒント: デフォルトのアプリケーション名

アプリケーション名として、CephFSはcephfs、RADOS Block Deviceはrbd、Object Gatewayはrgwをそれぞれ使用します。

1つのプールを複数のアプリケーションに関連付けて、各アプリケーションで専用のメタデータを使用できます。プールに関連付けられたアプリケーションを一覧にするには、次のコマンドを実行します。

cephuser@adm > ceph osd pool application get pool_name

18.5.2 プールのクォータの設定

最大バイト数、またはプールあたりのオブジェクトの最大数に対してプールクォータを設定できます。

cephuser@adm > ceph osd pool set-quota POOL_NAME MAX_OBJECTS OBJ_COUNT MAX_BYTES BYTES

以下に例を示します。

cephuser@adm > ceph osd pool set-quota data max_objects 10000

クォータを削除するには、値を0に設定します。

18.5.3 プールの統計情報の表示

プールの使用量統計を表示するには、次のコマンドを実行します。

cephuser@adm > rados df
 POOL_NAME                    USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED  RD_OPS      RD  WR_OPS      WR USED COMPR UNDER COMPR
 .rgw.root                 768 KiB       4      0     12                  0       0        0      44  44 KiB       4   4 KiB        0 B         0 B
 cephfs_data               960 KiB       5      0     15                  0       0        0    5502 2.1 MiB      14  11 KiB        0 B         0 B
 cephfs_metadata           1.5 MiB      22      0     66                  0       0        0      26  78 KiB     176 147 KiB        0 B         0 B
 default.rgw.buckets.index     0 B       1      0      3                  0       0        0       4   4 KiB       1     0 B        0 B         0 B
 default.rgw.control           0 B       8      0     24                  0       0        0       0     0 B       0     0 B        0 B         0 B
 default.rgw.log               0 B     207      0    621                  0       0        0 5372132 5.1 GiB 3579618     0 B        0 B         0 B
 default.rgw.meta          961 KiB       6      0     18                  0       0        0     155 140 KiB      14   7 KiB        0 B         0 B
 example_rbd_pool          2.1 MiB      18      0     54                  0       0        0 3350841 2.7 GiB     118  98 KiB        0 B         0 B
 iscsi-images              769 KiB       8      0     24                  0       0        0 1559261 1.3 GiB      61  42 KiB        0 B         0 B
 mirrored-pool             1.1 MiB      10      0     30                  0       0        0  475724 395 MiB      54  48 KiB        0 B         0 B
 pool2                         0 B       0      0      0                  0       0        0       0     0 B       0     0 B        0 B         0 B
 pool3                     333 MiB      37      0    111                  0       0        0 3169308 2.5 GiB   14847 118 MiB        0 B         0 B
 pool4                     1.1 MiB      13      0     39                  0       0        0 1379568 1.1 GiB   16840  16 MiB        0 B         0 B

個々の列の説明は次のとおりです。

USED

プールによって使用されているバイトの数。

OBJECTS

プールに保存されているオブジェクトの数。

CLONES

プールに保存されているクローンの数。スナップショットが作成されてオブジェクトに書き込まれる場合、元のオブジェクトは変更されずにそのクローンが作成されるため、元のスナップショットオブジェクトの内容は変更されません。

COPIES

オブジェクトレプリカの数。たとえば、レプリケーション係数3の複製プールに「x」個のオブジェクトがある場合、コピーの数は通常、3 * x個になります。

MISSING_ON_PRIMARY

プライマリOSDにコピーがみつからないときに劣化状態になっているオブジェクトの数(すべてのコピーが存在するわけではない)。

UNFOUND

見つからないオブジェクトの数。

DEGRADED

劣化したオブジェクトの数。

RD_OPS

このプールに対して要求された読み込み操作の合計数。

RD

このプールから読み込まれたバイトの合計数。

WR_OPS

このプールに対して要求された書き込み操作の合計数。

WR

プールに書き込まれたバイトの合計数。同じオブジェクトに何度も書き込むことができるため、これはプールの使用率と同じではないことに注意してください。その結果、プールの使用率は同じままであっても、プールに書き込まれたバイト数は大きくなります。

USED COMPR

圧縮データに割り当てられているバイトの数。

UNDER COMPR

圧縮データが非圧縮時に使用するバイトの数。

18.5.4 プールから値を取得

プールから値を取得するには、次のようにgetコマンドを実行します。

cephuser@adm > ceph osd pool get POOL_NAME KEY

18.5.5項 「プールに値を設定」に示すキーと、次のキーの値を取得できます。

PG_NUM

プールの配置グループの数。

PGP_NUM

データ配置を計算する際に使用する配置グループの有効数。有効な範囲はPG_NUM以下です。

ヒント
ヒント: プールのすべての値

特定のプールに関連するすべての値を一覧にするには、次のコマンドを実行します。

 cephuser@adm > ceph osd pool get POOL_NAME all

18.5.5 プールに値を設定

プールに値を設定するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool set POOL_NAME KEY VALUE

プールタイプごとにソートしたプールの値のリストを以下に示します。

共通するプールの値
crash_replay_interval

確認済みであるもののコミットされていない要求の再生をクライアントに許可する秒数。

pg_num

プールの配置グループの数。新しいクラスタにOSDを追加する場合は、新しいOSDの対象に指定されたすべてのプール上にある配置グループの値を確認します。

pgp_num

データ配置を計算する際に使用する配置グループの有効数。

crush_ruleset

クラスタ内のオブジェクト配置のマッピングに使用するルールセット。

hashpspool

指定したプールに対してHASHPSPOOLフラグを設定(1)または設定解除(0)します。このフラグを有効にすると、PGをOSDに効率的に分散するためにアルゴリズムが変更されます。HASHPSPOOLフラグがデフォルトの0に設定されたプールでこのフラグを有効にすると、クラスタは、すべてのPGをもう一度正しく配置するためにバックフィルを開始します。これはクラスタに多大なI/O負荷をかける可能性があるので、非常に負荷が高い運用クラスタでは、0~1のフラグを有効にしないでください。

nodelete

プールの削除を防止します。

nopgchange

プールのpg_numおよびpgp_numの変更を防止します。

noscrub、nodeep-scrub

I/Oの一時的な高負荷を解決するため、特定のプールに対してデータの(ディープ)スクラブを無効にします。

write_fadvise_dontneed

指定したプールの読み込み/書き込み要求のWRITE_FADVISE_DONTNEEDフラグを設定または設定解除して、キャッシュへのデータ格納をバイパスします。デフォルトはfalseです。複製プールとECプールの両方に適用されます。

scrub_min_interval

クラスタの負荷が低い場合にプールをスクラブする最小間隔(秒単位)。デフォルトの0は、Ceph設定ファイルのosd_scrub_min_intervalの値が使用されることを意味します。

scrub_max_interval

クラスタの負荷に関係なくプールをスクラブする最大間隔(秒単位)。デフォルトの0は、Ceph設定ファイルのosd_scrub_max_intervalの値が使用されることを意味します。

deep_scrub_interval

プールの「詳細」スクラブの間隔(秒単位)。デフォルトの0は、Ceph設定ファイルのosd_deep_scrubの値が使用されることを意味します。

複製プールの値
size

プール内のオブジェクトのレプリカ数を設定します。詳細については、18.5.6項 「オブジェクトレプリカの数の設定」を参照してください。複製プール専用です。

min_size

I/Oに必要なレプリカの最小数を設定します。詳細については、18.5.6項 「オブジェクトレプリカの数の設定」を参照してください。複製プール専用です。

nosizechange

プールのサイズの変更を防止します。プールが作成された際にデフォルト値としてosd_pool_default_flag_nosizechangeパラメータの値を取得します。このパラメータはデフォルトではfalseです。複製プールにのみ適用できます。ECプールはサイズを変更できないためです。

hit_set_type

キャッシュプールのヒットセットの追跡を有効にします。詳細については、「Bloom Filter」を参照してください。このオプションに設定できる値は、bloomexplicit_hash、またはexplicit_objectです。デフォルトはbloomで、他の値はテスト専用です。

hit_set_count

キャッシュプールに関して保存するヒットセットの数。値を増やすほど、ceph-osdデーモンのRAM消費量が増えます。デフォルトは0です。

hit_set_period

キャッシュプールのヒットセットの期間(秒単位)。値を増やすほど、ceph-osdデーモンのRAM消費量が増えます。プールが作成された際にデフォルト値としてosd_tier_default_cache_hit_set_periodパラメータの値を取得します。このパラメータのデフォルト値は1200です。複製プールにのみ適用できます。ECプールはキャッシュ層として使用できないためです。

hit_set_fpp

bloomヒットセットタイプの誤検知確率。詳細については、「Bloom Filter」を参照してください。有効な範囲は0.0~1.0で、デフォルトは0.05です。

use_gmt_hitset

キャッシュ階層化のヒットセットを作成する際に、GMT (グリニッジ標準時)のタイムスタンプを使用するようOSDに強制します。これにより、異なるタイムゾーンにあるノードが同じ結果を返すようにします。デフォルトは1です。この値は変更できません。

cache_target_dirty_ratio

キャッシュプールに含まれる変更済みオブジェクトの割合で、この割合を超えると、キャッシュ階層化エージェントは変更済み(ダーティ)オブジェクトをバッキングストレージプールにフラッシュします。デフォルトは0.4です。

cache_target_dirty_high_ratio

キャッシュプールに含まれる変更済みオブジェクトの割合で、この割合を超えると、キャッシュ階層化エージェントは変更済み(ダーティ)オブジェクトをより高速なバッキングストレージプールにフラッシュします。デフォルトは0.6です。

cache_target_full_ratio

キャッシュプールに含まれる未変更オブジェクトの割合で、この割合を超えると、キャッシュ階層化エージェントは未変更(クリーン)オブジェクトをキャッシュプールから削除します。デフォルトは0.8です。

target_max_bytes

max_bytesのしきい値がトリガされた場合、Cephはオブジェクトのフラッシュまたは削除を開始します。

target_max_objects

max_objectsのしきい値がトリガされた場合、Cephはオブジェクトのフラッシュまたは削除を開始します。

hit_set_grade_decay_rate

連続する2つのhit_set間の温度減衰率。デフォルトは20です。

hit_set_search_last_n

温度を計算するために、hit_set内で最大N個の出現をカウントします。デフォルトは1です。

cache_min_flush_age

キャッシュ階層化エージェントがオブジェクトをキャッシュプールからストレージプールへフラッシュするまでの時間(秒単位)。

cache_min_evict_age

キャッシュ階層化エージェントがオブジェクトをキャッシュプールから削除するまでの時間(秒単位)。

イレージャコーディングプールの値
fast_read

イレージャコーディングプールでこのフラグが有効な場合、読み込み要求は、すべてのシャードに対してサブ読み込みを発行し、クライアントの要求を実行するためにデコードする十分なシャードを受け取るまで待機します。イレージャプラグインがjerasureおよびisaの場合、最初のK個の応答が返された時点で、これらの応答からデコードされたデータを使用してただちにクライアントの要求が実行されます。このアプローチでは、CPUの負荷が増え、ディスク/ネットワークの負荷は減ります。現在のところ、このフラグはイレージャコーディングプールでのみサポートされます。デフォルトは0です。

18.5.6 オブジェクトレプリカの数の設定

複製プール上のオブジェクトレプリカの数を設定するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool set poolname size num-replicas

num-replicasにはオブジェクトそのものも含まれます。たとえば、オブジェクトとそのオブジェクトの2つのコピーで合計3つのオブジェクトインスタンスが必要な場合、3を指定します。

警告
警告: 3つ未満のレプリカを設定しない

num-replicasを2に設定した場合、データのコピーは「1つ」だけになります。1つのオブジェクトインスタンスが失われた場合、たとえば回復中の前回のスクラブ以降に、他のコピーが壊れていないことを信頼する必要があります(詳細については、17.6項 「配置グループのスクラブ」を参照)。

プールを1つのレプリカに設定することは、プール内にデータオブジェクトのインスタンスが「1つ」だけ存在することを意味します。OSDに障害発生すると、データは失われます。レプリカが1つのプールの使用法としては、一時データを短時間保存することが考えられます。

ヒント
ヒント: 3つを超えるレプリカの設定

1つのプールに対して4つのレプリカを設定すると、信頼性が25%向上します。

2つのデータセンターの場合、各データセンターで2つのコピーを使用できるよう、1つプールに対してレプリカを4つ以上設定します。これにより、一方のデータセンターが失われてもまだ2つのコピーが存在し、さらにディスクが1つ失われてもデータが失われないようにします。

注記
注記

1つのオブジェクトが、機能低下モードにおいてレプリカがpool size未満の状態でI/Oを受け付ける場合があります。I/Oに必要なレプリカの最小数を設定するには、min_size設定を使用する必要があります。次に例を示します。

cephuser@adm > ceph osd pool set data min_size 2

これにより、データプール内のオブジェクトはレプリカがmin_size未満の場合、I/Oを受け取らなくなります。

ヒント
ヒント: オブジェクトレプリカの数の取得

オブジェクトレプリカの数を取得するには、次のコマンドを実行します。

cephuser@adm > ceph osd dump | grep 'replicated size'

replicated size属性が強調表示された状態でプールが一覧にされます。デフォルトでは、Cephはオブジェクトのレプリカを2つ作成します(合計で3つのコピー、またはサイズ3)。

18.6 プールのマイグレーション

プールを作成する際(18.1項 「プールの作成」を参照)、プールのタイプや配置グループの数など、初期パラメータを指定する必要があります。後でこれらのパラメータのいずれかを変更する場合(たとえば、複製プールをイレージャコーディングプールに変換したり、配置グループの数を減らしたりする場合)、プールのデータを、展開に適したパラメータを持つ別のプールに移行する必要があります。

このセクションでは、2つのマイグレーション方法を説明します。1つは「キャッシュ層」を使う方法で一般的なプールのデータマイグレーションに使用します。もう1つはrbd migrateサブコマンドを使用する方法で、RBDイメージを新しいプールに移行します。どちらの方法にもその詳細と制限があります。

18.6.1 制限

  • 「キャッシュ層」の方法を使用して、複製プールからECプールまたは別の複製プールに移行できます。ECプールからの移行はサポートされていません。

  • RBDイメージとCephFSエクスポートを複製プールからECプールに移行することはできません。その理由として、RBDとCephFSはomapを使用してメタデータを保存していますが、ECプールはomapをサポートしていないためです。たとえば、RBDのヘッダオブジェクトはフラッシュできません。それでも、メタデータを複製プールに残したまま、データをECプールに移行することは可能です。

  • rbd migrationによる方法を使用すると、クライアントのダウンタイムを最小限に抑えてイメージを移行できます。必要なのは、prepareステップの前にクライアントを停止して、後でクライアントを起動することだけです。prepareステップの直後にイメージを開くことができるのは、この機能をサポートするlibrbdクライアント(Ceph Nautilus以降)のみであり、それ以前のlibrbdクライアントやkrbdクライアントはcommitステップが実行されるまでイメージを開くことができないことに注意してください。

18.6.2 キャッシュ層を使用した移行

原理は単純で、移行する必要があるプールを逆の順番でキャッシュ層に含めます。次の例では、「testpool」という名前の複製プールをイレージャコーディングプールに移行します。

手順 18.1: 複製プールからイレージャコーディングプールへの移行
  1. 「newpool」という名前の新しいイレージャコーディングプールを作成します。プールの作成パラメータの詳細な説明については、18.1項 「プールの作成」を参照してください。

     cephuser@adm > ceph osd pool create newpool erasure default

    使用されているクライアントキーリングが「testpool」と少なくとも同じ機能を「newpool」に提供することを確認します。

    これでプールが2つできました。データが入った元の複製プール「testpool」と、新しい空のイレージャコーディングプール「newpool」です。

    マイグレーション前のプール
    図 18.1: マイグレーション前のプール
  2. キャッシュ層をセットアップして、複製プール「testpool」をキャッシュプールとして設定します。-force-nonemptyオプションを使用すると、プールにすでにデータがある場合にもキャッシュ層を追加できます。

    cephuser@adm > ceph tell mon.* injectargs \
     '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=1'
    cephuser@adm > ceph osd tier add newpool testpool --force-nonempty
    cephuser@adm > ceph osd tier cache-mode testpool proxy
    キャッシュ層のセットアップ
    図 18.2: キャッシュ層のセットアップ
  3. キャッシュプールからすべてのオブジェクトを新しいプールに強制的に移動します。

    cephuser@adm > rados -p testpool cache-flush-evict-all
    データのフラッシュ
    図 18.3: データのフラッシュ
  4. すべてのデータが新しいイレージャコーディングプールにフラッシュされるまでは、オーバーレイを指定してオブジェクトが古いプールで検索されるようにする必要があります。

    cephuser@adm > ceph osd tier set-overlay newpool testpool

    このオーバーレイにより、すべての操作が古い複製プール「testpool」に転送されます。

    オーバーレイの設定
    図 18.4: オーバーレイの設定

    これで、新しいプールのオブジェクトにアクセスするようすべてのクライアントを切り替えることができます。

  5. すべてのデータがイレージャコーディングプール「newpool」に移行されたら、オーバーレイと古いキャッシュプール「testpool」を削除します。

    cephuser@adm > ceph osd tier remove-overlay newpool
    cephuser@adm > ceph osd tier remove newpool testpool
    マイグレーションの完了
    図 18.5: マイグレーションの完了
  6. 実行

    cephuser@adm > ceph tell mon.* injectargs \
     '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'

18.6.3 RBDイメージの移行

次に、RBDイメージを1つの複製プールから別の複製プールに移行する場合に推奨する方法を示します。

  1. クライアント(仮想マシンなど)がRBDイメージにアクセスしないようにします。

  2. 新しいイメージをターゲットプール内に作成し、親をソースイメージに設定します。

    cephuser@adm > rbd migration prepare SRC_POOL/IMAGE TARGET_POOL/IMAGE
    ヒント
    ヒント: イレージャコーディングプールにデータだけを移行する

    イメージデータのみを新しいECプールに移行し、メタデータを元の複製プールに残す必要がある場合は、代わりに次のコマンドを実行します。

    cephuser@adm > rbd migration prepare SRC_POOL/IMAGE \
     --data-pool TARGET_POOL/IMAGE
  3. クライアントがターゲットプール内のイメージにアクセスできるようにします。

  4. データをターゲットプールに移行します。

    cephuser@adm > rbd migration execute SRC_POOL/IMAGE
  5. 古いイメージを削除します。

    cephuser@adm > rbd migration commit SRC_POOL/IMAGE

18.7 プールのスナップショット

プールのスナップショットは、Cephのプール全体の状態のスナップショットです。プールのスナップショットにより、プールの状態の履歴を保持できます。プールのスナップショットを作成すると、プールサイズに比例したストレージ領域が消費されます。プールのスナップショットを作成する前に、必ず関連するストレージに十分なディスク領域があることを確認してください。

18.7.1 プールのスナップショットの作成

プールのスナップショットを作成するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool mksnap POOL-NAME SNAP-NAME

以下に例を示します。

cephuser@adm > ceph osd pool mksnap pool1 snap1
created pool pool1 snap snap1

18.7.2 プールのスナップショットの一覧

プールの既存のスナップショットを一覧にするには、次のコマンドを実行します。

cephuser@adm > rados lssnap -p POOL_NAME

以下に例を示します。

cephuser@adm > rados lssnap -p pool1
1	snap1	2018.12.13 09:36:20
2	snap2	2018.12.13 09:46:03
2 snaps

18.7.3 プールのスナップショットの削除

プールのスナップショットを削除するには、次のコマンドを実行します。

cephuser@adm > ceph osd pool rmsnap POOL-NAME SNAP-NAME

18.8 データ圧縮

BlueStore (詳細については、1.4項 「BlueStore」を参照)は、オンザフライでデータを圧縮してディスク容量を節約できます。圧縮率は、システムに保存されるデータによって異なります。圧縮/圧縮解除には、追加のCPUパワーが必要になることに注意してください。

データ圧縮をグローバルに設定し(18.8.3項 「グローバル圧縮オプション」を参照)、その後、個々のプールに対して固有の圧縮設定を上書きできます。

プールにデータが含まれるかどうかに関係なく、プールのデータ圧縮を有効/無効にしたり、圧縮アルゴリズムやモードをいつでも変更したりできます。

プールの圧縮を有効にすると、既存のデータに圧縮は適用されなくなります。

プールの圧縮を無効にすると、そのプールのすべてのデータの圧縮が解除されます。

18.8.1 圧縮の有効化

POOL_NAMEという名前のプールのデータ圧縮を有効にするには、次のコマンドを実行します。

cephuser@adm > ceph osd pool set POOL_NAME compression_algorithm COMPRESSION_ALGORITHM
cephuser@adm > ceph osd pool set POOL_NAME compression_mode COMPRESSION_MODE
ヒント
ヒント: プール圧縮の無効化

プールのデータ圧縮を無効にするには、圧縮アルゴリズムとして「none」を使用します。

cephuser@adm > ceph osd pool set POOL_NAME compression_algorithm none

18.8.2 プール圧縮オプション

次に、すべての圧縮設定のリストを示します。

compression_algorithm

使用可能な値は、nonezstdsnappyです。デフォルトはsnappyです。

どの圧縮アルゴリズムを使用するかは、特定の使用事例によって異なります。次に、推奨事項をいくつか示します。

  • 変更する妥当な理由がない限り、デフォルトのsnappyを使用してください。

  • zstdは、圧縮率は優れていますが、少量のデータを圧縮する場合にはCPUオーバーヘッドが高くなります。

  • クラスタのCPUとメモリの使用量に注意しながら、実際のデータのサンプルに対してこれらのアルゴリズムのベンチマークを実行します。

compression_mode

使用可能な値は、noneaggressivepassiveforceです。デフォルトはnoneです。

  • none: 圧縮しません。

  • passive: COMPRESSIBLEと表示されている場合、圧縮します。

  • aggressive: INCOMPRESSIBLEと表示されている場合以外、圧縮します。

  • force: 常に圧縮します。

compression_required_ratio

値: 倍精度、比率= SIZE_COMPRESSED / SIZE_ORIGINAL。デフォルトは0.875です。これは、占有されている容量が圧縮によって12.5%以上削減されない場合は、オブジェクトは圧縮されないことを意味します。

この率を上回るオブジェクトは、圧縮効果が低いため圧縮状態では保存されません。

compression_max_blob_size

値: 符号なし整数、バイト単位のサイズ。デフォルト: 0

圧縮されるオブジェクトの最大サイズ。

compression_min_blob_size

値: 符号なし整数、バイト単位のサイズ。デフォルト: 0

圧縮されるオブジェクトの最小サイズ。

18.8.3 グローバル圧縮オプション

次の設定オプションはCeph設定で指定でき、1つのプールだけでなくすべてのOSDに適用されます。18.8.2項 「プール圧縮オプション」に一覧にされているプール固有の設定が優先されます。

bluestore_compression_algorithm

compression_algorithmを参照してください。

bluestore_compression_mode

compression_modeを参照してください。

bluestore_compression_required_ratio

compression_required_ratioを参照してください。

bluestore_compression_min_blob_size

値: 符号なし整数、バイト単位のサイズ。デフォルト: 0

圧縮されるオブジェクトの最大サイズ。この設定はデフォルトでは無視され、bluestore_compression_min_blob_size_hddと​bluestore_compression_min_blob_size_ssdが優先されます。0以外の値に設定した場合は、この設定が優先されます。

bluestore_compression_max_blob_size

値: 符号なし整数、バイト単位のサイズ。デフォルト: 0

圧縮されるオブジェクトの最大サイズ。このサイズを超えると、オブジェクトはより小さいチャンクに分割されます。この設定はデフォルトでは無視され、bluestore_compression_max_blob_size_hddと​bluestore_compression_max_blob_size_ssdが優先されます。0以外の値に設定した場合は、この設定が優先されます。

bluestore_compression_min_blob_size_ssd

値: 符号なし整数、バイト単位のサイズ。デフォルト: 8K

圧縮してソリッドステートドライブに保存されるオブジェクトの最小サイズ。

bluestore_compression_max_blob_size_ssd

値: 符号なし整数、バイト単位のサイズ。デフォルト: 64K

圧縮してソリッドステートドライブに保存されるオブジェクトの最大サイズ。このサイズを超えると、オブジェクトはより小さいチャンクに分割されます。

bluestore_compression_min_blob_size_hdd

値: 符号なし整数、バイト単位のサイズ。デフォルト: 128K

圧縮してハードディスクに保存されるオブジェクトの最小サイズ。

bluestore_compression_max_blob_size_hdd

値: 符号なし整数、バイト単位のサイズ。デフォルト: 512K

圧縮してハードディスクに保存されるオブジェクトの最大サイズ。このサイズを超えると、オブジェクトはより小さいチャンクに分割されます。