3.5. 配置グループの自動スケーリング

プール内の配置グループ (PG) 数では、クラスターのピアがデータおよびリバランスの分散方法などの重要なロールを果たします。

PG 数の自動スケーリングにより、クラスターの管理が容易になります。pg-autoscaling コマンドは、PG のスケーリングの推奨事項を示します。または、クラスターの使用状況に応じて PG を自動的にスケーリングします。

3.5.1. 配置グループの自動スケーリング

auto-scaler の仕組み

auto-scaler はプールを分析し、サブツリーごとに調整します。各プールは異なる CRUSH ルールにマップされ、各ルールは異なるデバイスにデータを分散できるため、Ceph は階層の各サブツリーを独立して使用することを考慮します。たとえば、クラス ssd の OSD にマップするプールと hdd クラスの OSD にマップするプールは、それぞれがそれぞれのデバイスタイプの数に依存する最適な PG 数を持ちます。

3.5.2. 配置グループの分割とマージ

分割

Red Hat Ceph Storage は既存の配置グループ (PG) を小規模な PG に分割することができます。これにより、特定のプールの PG の合計数が増加します。既存の配置グループ (PG) を分割すると、ストレージ要件の増加に伴って、少数の Red Hat Ceph Storage クラスターを徐々にスケーリングできます。PG の自動スケーリング機能により、pg_num 値を増やすことができます。これにより、既存の PG がストレージクラスターを拡張するように分割されます。PG の自動スケーリング機能が無効な場合には、PG 分割プロセスを開始する pg_num 値を手動で増やすことができます。たとえば、pg_num の値を 4 から 16 に増やすと、4 つの部分に分割されます。pg_num 値を増やすと、pgp_num 値も増えますが、pgp_num 値は徐々に増加します。この段階の拡張は、オブジェクトデータを移行するため、ストレージクラスターのパフォーマンスおよびクライアントワークロードへの影響を最小限に抑えるために行われます。オブジェクトデータがシステムに大きな負荷が発生するためです。デフォルトでは、Ceph は misplaced の状態にあるオブジェクトデータの 5% を超えてキューを発行したり、移行したりしません。このデフォルトのパーセンテージは、target_max_misplaced_ratio オプションで調整できます。

149 Ceph Auto scalling 0321 splitting

マージ

Red Hat Ceph Storage は、既存の PG をサイズの大きい PG にマージすることもできるので、PG の合計が減少します。2 つの PG を 1 つにまとめると、プールの相対的な量が徐々に減少したときや、選択した PG の初期数が大きすぎたときに特に役に立ちます。PG のマージは便利ですが、複雑で繊細なプロセスでもあります。マージ時に、I/O の PG への一時停止が発生し、ストレージクラスターのパフォーマンスへの影響を最小限に抑えるために一度に PG を 1 つだけマージします。新しい pg_num 値に達するまで、Ceph はオブジェクトデータのマージにゆっくり機能します。

149 Ceph Auto scalling 0321 merging

3.5.3. 配置グループの自動スケーリングモードの設定

Red Hat Ceph Storage クラスターの各プールには PG の pg_autoscale_mode プロパティーがあり、これを offon、または warn に設定することができます。

  • off: プールの自動スケーリングを無効にします。各プールに適切な PG 数を選択するのは管理者次第です。詳細は PG の数 セクションを参照してください。
  • on: 指定プールの PG 数の自動調整を有効にします。
  • warn: PG 数の調整が必要な場合にヘルスアラートを示します。
注記

Red Hat Ceph Storage 5.0 以降のリリースでは、pg_autoscale_mode がデフォルトで オン になっています。アップグレードされたストレージクラスターは、既存の pg_autoscale_mode 設定を保持します。新しく作成されたプールでは、pg_auto_scale モードが オン になっています。PG カウントは自動的に調整され、Ceph ステータス が PG カウント調整中に回復中と表示される場合があります。

オートスケーラーは bulk フラグを使用して、PG の完全な補完で開始するプールを決定し、プール全体の使用率が均一でない場合にのみスケールダウンします。ただし、プールに bulk フラグがない場合、プールは最小限の PG で開始され、プールでの使用量が多い場合にのみ開始されます。

注記

オートスケーラーは重複するルートを特定し、そのルートが含まれるプールがスケーリングされないようにします。これは、root が重複しているとスケーリングプロセスに問題がある可能性があるためです。

手順

  • 既存のプールで自動スケーリングを有効にします。

    構文

    ceph osd pool set POOL_NAME pg_autoscale_mode on

    例:

    [ceph: root@host01 /]# ceph osd pool set testpool pg_autoscale_mode on

  • 新規作成されたプールで自動スケーリングを有効にします。

    構文

    ceph config set global osd_pool_default_pg_autoscale_mode MODE

    例:

    [ceph: root@host01 /]# ceph config set global osd_pool_default_pg_autoscale_mode on

  • bulk フラグでプールを作成します。

    構文

    ceph osd pool create POOL_NAME --bulk

    例:

    [ceph: root@host01 /]#  ceph osd pool create testpool --bulk

  • 既存プールの bulk フラグを設定または設定解除します。

    重要

    値は truefalse1、または 0 として書き込む必要があります。1true に相当し、0false に相当します。大文字と小文字が異なるか、他の内容で書かれている場合、エラーが発生します。

    以下は、間違った構文で記述されたコマンドの例です。

    [ceph: root@host01 /]# ceph osd pool set ec_pool_overwrite bulk True
    Error EINVAL: expecting value 'true', 'false', '0', or '1'

    構文

    ceph osd pool set POOL_NAME bulk true/false/1/0

    例:

    [ceph: root@host01 /]# ceph osd pool set testpool bulk true

  • 既存プールの bulk フラグを取得します。

    構文

    ceph osd pool get POOL_NAME bulk

    例:

    [ceph: root@host01 /]# ceph osd pool get testpool bulk
    bulk: true

3.5.4. 配置グループのスケーリングの推奨事項

プール、その相対的な使用率、およびストレージクラスター内の PG カウントに対する推奨の変更を表示できます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • すべてのノードへの root レベルのアクセス。

手順

  • 以下を使用して、各プール、その相対使用率、および推奨される変更をすべて表示できます。

    [ceph: root@host01 /]# ceph osd pool autoscale-status

    出力は以下のようになります。

    POOL                     SIZE  TARGET SIZE  RATE  RAW CAPACITY   RATIO  TARGET RATIO  EFFECTIVE RATIO  BIAS  PG_NUM  NEW PG_NUM  AUTOSCALE  BULK
    device_health_metrics      0                 3.0        374.9G  0.0000                                  1.0       1              on         False
    cephfs.cephfs.meta     24632                 3.0        374.9G  0.0000                                  4.0      32              on         False
    cephfs.cephfs.data         0                 3.0        374.9G  0.0000                                  1.0      32              on         False
    .rgw.root               1323                 3.0        374.9G  0.0000                                  1.0      32              on         False
    default.rgw.log         3702                 3.0        374.9G  0.0000                                  1.0      32              on         False
    default.rgw.control        0                 3.0        374.9G  0.0000                                  1.0      32              on         False
    default.rgw.meta         382                 3.0        374.9G  0.0000                                  4.0       8              on         False

SIZE は、プールに保存されているデータ量です。

TARGET SIZE は、管理者が指定したデータ量を指しますが、最終的にこのプールに格納されることが予想されます。システムは、計算には、 2 つの値の大きいほうを使用します。

RATE は、プールが使用する RAW ストレージ容量を決定するプールの乗数です。たとえば、3 つのレプリカプールは 3.0 の比率を持ち、k=4,m=2 イレイジャーコードプールの比率は 1.5 になります。

RAW CAPACITY は、プールのデータを保存する OSD 上の RAW ストレージ容量の合計量です。

RATIO は、プールが消費している合計容量の比率です。つまり、ratio = size * rate / raw capacity になります。

TARGET RATIO (存在する場合) は、ターゲット比率が設定された他のプールと相対的にプールが消費することが予想されるストレージの比率です。ターゲットサイズバイトと比率の両方が指定される場合、比率が優先されます。プールの作成時に指定されていない限り、TARGETRATIO のデフォルト値は 0 です。プールで指定する --target_ratio が多いほど、プールで必要な PG は大きくなります。

EFFECTIVE RATIO は、次の 2 つの方法で調整した後の目標比率です。1 (目標サイズが設定されたプールで使用されると予想される容量を差し引く)。2. ターゲット比率が設定されたプール間でターゲット比率を正規化し、残りの領域を結合します。たとえば、target ratio が 1.0 の 4 つのプールの effective ratio は 0.25 になります。システムは、実際の比率が大きい場合と、その計算に効果的な比率を使用します。

BIAS は、特定のプールで必要とする PG 数に関する事前情報に基づいて、プールの PG を手動で調整するための乗数として使用されます。デフォルトでは、プールの作成時に指定されていない限り、値は 1.0 です。プールに指定する --bias が多いほど、プールで必要な PG は大きくなります。

PG_NUM は、プールの現在の PG 数、または pg_num の変更が進行中である場合にプールが現在操作している PG 数です。NEW PG_NUM が存在する場合は、推奨される PG 数 (pg_num) です。これは常に 2 の累乗となり、推奨される値は現在の値のみによって 3 倍以上になります。

AUTOSCALE はプール pg_autoscale_mode で、onoff、または warn のいずれかになります。

BULK は、どのプールが PG の完全な補完で開始するかを決定するために使用されます。BULK は、プール全体の使用率が均等でない場合にのみスケールダウンします。プールにこのフラグがない場合、プールは最小量の PG で開始され、プールの使用量が増加した場合にのみ使用されます。

BULK 値は truefalse1、または 0 です。1true に相当し、0false に相当します。デフォルト値は false です。

BULK 値は、プールの作成中または作成後に設定します。

バルクフラグの使用の詳細は、プールの作成 および 配置グループの自動スケールモードの設定 を参照してください。

3.5.5. 配置グループの自動スケーリングの設定

クラスターの使用状況に基づいて PG を自動的にスケーリングできるようにするのは、PG をスケーリングする最も簡単な方法です。Red Hat Ceph Storage は、利用可能なストレージと、全システムにおける PG のターゲット数を取得して、各プールに保存されたデータ量を比較し、それに応じて PG を評価します。このコマンドは、現在の PG 数 (pg_num) が計算または提案された PG 数から 3 倍以上ずれているプールにのみ変更を加えます。

各 OSD の PG のターゲット数は、mon_target_pg_per_osd 設定に基づいています。デフォルト値は 100 に設定されています。

手順

  1. mon_target_pg_per_osd を調整するには、以下を実行します。

    ceph config set global mon_target_pg_per_osd number

    以下に例を示します。

    $ ceph config set global mon_target_pg_per_osd 150

3.5.5.1. プールの配置グループの最小数および最大数の設定

自動スケーリングの範囲を制限するために、配置グループ(PG)の最小および最大値を指定します。

最小値が設定されている場合、Ceph は自動的に減らさないか、または減らすことを推奨しません。PG の数は、設定された最小値を下回ります。

最小値が設定されている場合、Ceph は自動的に増加しないか、または増やすことを推奨しません。PG の数は、設定された最大値を上回ります。

最小値と最大値は、一緒に設定するか、個別に設定できます。

この手順に加えて、ceph osd pool create コマンドには、プールの作成時に最小または最大 PG 数を指定するために使用できる 2 つのコマンドラインオプションがあります。

構文

ceph osd pool create --pg-num-min NUMBER
ceph osd pool create --pg-num-max NUMBER

例:

ceph osd pool create --pg-num-min 50
ceph osd pool create --pg-num-max 150

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • ノードへのルートレベルのアクセス。

手順

  • プールの最小 PG 数を設定します。

    構文

    ceph osd pool set POOL_NAME pg_num_min NUMBER

    例:

    [ceph: root@host01 /]# ceph osd pool set testpool pg_num_min 50

  • プールの最大 PG 数を設定します。

    構文

    ceph osd pool set POOL_NAME pg_num_max NUMBER

    [ceph: root@host01 /]# ceph osd pool set testpool pg_num_max 150

関連情報

  • 詳細は、Red Hat Ceph Storage Storage Strategies GuideSetting placement group auto-scaling modes を参照してください。
  • 詳細は、Red Hat Ceph Storage ストラテジーガイドPG 数 を参照してください。

3.5.6. noautoscale フラグの更新

すべてのプールに対して同時にオートスケーラーを有効または無効にする場合は、noautoscale グローバルフラグを使用できます。このグローバルフラグは、一部の OSD がバウンスされたとき、またはクラスターがメンテナンス中、ストレージクラスターのアップグレード中に役立ちます。アクティビティーの前にフラグを設定し、アクティビティーが完了したらフラグを解除できます。

デフォルトでは、noautoscale フラグは off に設定されています。このフラグが設定されている場合には、すべてのプールで pg_autoscale_modeオフ になり、すべてのプールでオートスケーラーが無効になります。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • すべてのノードへの root レベルのアクセス。

手順

  1. noautoscale フラグの値を取得します。

    例:

    [ceph: root@host01 /]# ceph osd pool get noautoscale

  2. アクティビティーの前に noautoscale フラグを設定します。

    例:

    [ceph: root@host01 /]# ceph osd pool set noautoscale

  3. アクティビティーの完了時に noautoscale フラグの設定を解除します。

    例:

    [ceph: root@host01 /]# ceph osd pool unset noautoscale

3.5.7. ターゲットプールサイズの指定

新規作成されたプールは、クラスター容量の合計を少少なく、システムが PG の数を必要とするシステムに表示されます。ただし、ほとんどの場合、クラスター管理者は、どのプールが時間とともにシステム容量を消費することを認識します。Red Hat Ceph Storage への ターゲットサイズ として知られるこの情報を提供する場合、このようなプールは最初からより適切な数の PG (pg_num) を使用できます。このアプローチは、調整を行う際に、pg_num における後続の変更やデータの移動に関連するオーバーヘッドを防ぎます。

プールの target size は、以下の方法で指定できます。

3.5.7.1. プールの絶対サイズ (バイト単位) を使用して target size を設定します。

手順

  1. プールの絶対サイズ (バイト単位) を使用して target size を設定します。

    ceph osd pool set pool-name target_size_bytes value

    たとえば、mypool が 100T の領域を消費することが予想されるようにシステムに指示します。

    $ ceph osd pool set mypool target_size_bytes 100T

また、任意の --target-size-bytes <bytes> 引数を ceph osd pool create コマンドに追加すると、作成時にプールのターゲットサイズを設定することもできます。

3.5.7.2. クラスター合計容量を使用したターゲットサイズの指定

手順

  1. クラスター容量の合計の比率を使用して target size を設定します。

    ceph osd pool set pool-name target_size_ratio ratio

    以下に例を示します。

    $ ceph osd pool set mypool target_size_ratio 1.0

    システムに、target_size_ratio が設定された他のプールと比較して、プール mypool が 1.0 を消費することが予想されることをシステムに指示します。mypool がクラスター内の唯一のプールである場合、これは、合計容量の 100% が予想される使用を意味します。target_size_ratio が 1.0 である 2 番目のプールがある場合、両方のプールはクラスター容量の 50% の使用を想定します。

また、任意の --target-size-ratio <ratio> 引数を ceph osd pool create コマンドに追加すると、作成時にプールのターゲットサイズを設定することもできます。

注記

不可能なターゲットサイズ値 (クラスターの合計よりも大きな容量、または 1.0 を超える合計の割合) を指定した場合、クラスターは POOL_TARGET_SIZE_RATIO_OVERCOMMITTED または POOL_TARGET_SIZE_BYTES_OVERCOMMITTED の警告を発生させます。

プールに target_size_ratiotarget_size_bytes の両方を指定すると、クラスターは比率のみを考慮し、POOL_HAS_TARGET_SIZE_BYTES_AND_RATIO 正常性の警告を出します。