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_TYPE
はreplicated
です。- 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=truecephuser@adm >
ceph osd pool delete pool_name pool_name --yes-i-really-really-mean-itcephuser@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」を参照してください。このオプションに設定できる値は、
bloom
、explicit_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を指定します。
num-replicasを2に設定した場合、データのコピーは「1つ」だけになります。1つのオブジェクトインスタンスが失われた場合、たとえば回復中の前回のスクラブ以降に、他のコピーが壊れていないことを信頼する必要があります(詳細については、17.6項 「配置グループのスクラブ」を参照)。
プールを1つのレプリカに設定することは、プール内にデータオブジェクトのインスタンスが「1つ」だけ存在することを意味します。OSDに障害発生すると、データは失われます。レプリカが1つのプールの使用法としては、一時データを短時間保存することが考えられます。
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
ステップの前にクライアントを停止して、後でクライアントを起動することだけです。librbd
prepareステップの直後にイメージを開くことができるのは、この機能をサポートする
クライアント(Ceph Nautilus以降)のみであり、それ以前のlibrbd
クライアントやkrbd
クライアントはcommit
ステップが実行されるまでイメージを開くことができないことに注意してください。
18.6.2 キャッシュ層を使用した移行 #
原理は単純で、移行する必要があるプールを逆の順番でキャッシュ層に含めます。次の例では、「testpool」という名前の複製プールをイレージャコーディングプールに移行します。
「newpool」という名前の新しいイレージャコーディングプールを作成します。プールの作成パラメータの詳細な説明については、18.1項 「プールの作成」を参照してください。
cephuser@adm >
ceph osd pool create newpool erasure default使用されているクライアントキーリングが「testpool」と少なくとも同じ機能を「newpool」に提供することを確認します。
これでプールが2つできました。データが入った元の複製プール「testpool」と、新しい空のイレージャコーディングプール「newpool」です。
図 18.1: マイグレーション前のプール #キャッシュ層をセットアップして、複製プール「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-nonemptycephuser@adm >
ceph osd tier cache-mode testpool proxy図 18.2: キャッシュ層のセットアップ #キャッシュプールからすべてのオブジェクトを新しいプールに強制的に移動します。
cephuser@adm >
rados -p testpool cache-flush-evict-all図 18.3: データのフラッシュ #すべてのデータが新しいイレージャコーディングプールにフラッシュされるまでは、オーバーレイを指定してオブジェクトが古いプールで検索されるようにする必要があります。
cephuser@adm >
ceph osd tier set-overlay newpool testpoolこのオーバーレイにより、すべての操作が古い複製プール「testpool」に転送されます。
図 18.4: オーバーレイの設定 #これで、新しいプールのオブジェクトにアクセスするようすべてのクライアントを切り替えることができます。
すべてのデータがイレージャコーディングプール「newpool」に移行されたら、オーバーレイと古いキャッシュプール「testpool」を削除します。
cephuser@adm >
ceph osd tier remove-overlay newpoolcephuser@adm >
ceph osd tier remove newpool testpool図 18.5: マイグレーションの完了 #実行
cephuser@adm >
ceph tell mon.* injectargs \ '--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'
18.6.3 RBDイメージの移行 #
次に、RBDイメージを1つの複製プールから別の複製プールに移行する場合に推奨する方法を示します。
クライアント(仮想マシンなど)がRBDイメージにアクセスしないようにします。
新しいイメージをターゲットプール内に作成し、親をソースイメージに設定します。
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クライアントがターゲットプール内のイメージにアクセスできるようにします。
データをターゲットプールに移行します。
cephuser@adm >
rbd migration execute SRC_POOL/IMAGE古いイメージを削除します。
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_ALGORITHMcephuser@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
使用可能な値は、
none
、zstd
、snappy
です。デフォルトはsnappy
です。どの圧縮アルゴリズムを使用するかは、特定の使用事例によって異なります。次に、推奨事項をいくつか示します。
変更する妥当な理由がない限り、デフォルトの
snappy
を使用してください。zstd
は、圧縮率は優れていますが、少量のデータを圧縮する場合にはCPUオーバーヘッドが高くなります。クラスタのCPUとメモリの使用量に注意しながら、実際のデータのサンプルに対してこれらのアルゴリズムのベンチマークを実行します。
- compression_mode
使用可能な値は、
none
、aggressive
、passive
、force
です。デフォルトは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
。圧縮してハードディスクに保存されるオブジェクトの最大サイズ。このサイズを超えると、オブジェクトはより小さいチャンクに分割されます。