5.4. Ceph Manager バランサーモジュールの使用


バランサーは、Ceph Manager (ceph-mgr) のモジュールで、OSD 全体の配置グループ (PG) の配置を最適化することで、自動または監視された方法で負荷分散を実現します。

バランサーモジュールを無効にできません。これをオフにして設定をカスタマイズすることしかできません。

モード

サポートされているバランサーモードは次のとおりです。

crush-compat

CRUSH compat モードは、Ceph Luminous で導入された compat の weight-set 機能を使用して、CRUSH 階層のデバイスの別の重みセットを管理します。通常の重みは、デバイスに保存する目的のデータ量を反映するために、デバイスのサイズに設定したままにする必要があります。その後バランサーは、可能な限り目的のディストリビューションに一致するディストリビューションを達成するために、weight-set の値を少しずつ増減させ、値を最適化します。PG の配置は擬似ランダムプロセスであるため、配置には自然なばらつきが伴います。重みを最適化することで、バランサーはこの自然なばらつきに対応します。

このモードは、古いクライアントと完全に後方互換性があります。OSDMap および CRUSH マップが古いクライアントと共有されると、バランサーは最適化された weightsff を実際の重みとして提示します。

このモードの主な制限は、階層のサブツリーが OSD を共有する場合に、バランサーが配置ルールの異なる複数の CRUSH 階層を処理できないことです。この設定では、共有 OSD での領域の使用を管理するのが困難になるため、一般的には推奨されません。そのため、通常、この制限は問題にはなりません。

upmap

Luminous 以降、OSDMap は、通常の CRUSH 配置計算への例外として、個々の OSD の明示的なマッピングを保存できます。これらの upmap エントリーにより、PG マッピングを細かく制御できます。この CRUSH モードは、負荷分散を実現するために、個々の PG の配置を最適化します。多くの場合、この分散は各 OSD の PG 数 +/-1 PG で “完璧“ です。これは割り切れない場合があるためです。

重要

この機能の使用を許可するには、次のコマンドを使用して、luminous 以降のクライアントのみをサポートする必要があることをクラスターに伝える必要があります。

[ceph: root@host01 /]# ceph osd set-require-min-compat-client luminous

このコマンドは、luminous 以前のクライアントまたはデーモンがモニターに接続されていると失敗します。

既知の問題により、カーネル CephFS クライアントは自身を jewel クライアントとして報告します。この問題を回避するには、--yes-i-really-mean-it フラグを使用します。

[ceph: root@host01 /]# ceph osd set-require-min-compat-client luminous --yes-i-really-mean-it

使用しているクライアントのバージョンは、以下で確認できます。

[ceph: root@host01 /]# ceph features
read

OSDMap は、通常の CRUSH 配置計算の例外として、個々のプライマリー OSD の明示的なマッピングを保存できます。これらの pg-upmap-primary エントリーは、プライマリー PG マッピングに対するきめ細かい制御を提供します。このモードでは、読み取りの負荷がクラスター内で分散されるように (またはプライマリー PG)、個々のプライマリー PG の配置が最適化されます。read モードでは upmap の動作は実行されないため、このモードは読み取りの負荷分散のみが必要とされるユースケースに最適です。

重要

この機能の使用を許可するには、次のコマンドを使用して、クラスターに Reef 以降のクライアントのみをサポートする必要があることを通知する必要があります。

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef

モニターに Reef 以前のクライアントまたはデーモンが接続されている場合は、このコマンドは失敗します。

この問題を回避するには、--yes-i-really-mean-it フラグを使用します。

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it

使用しているクライアントのバージョンは、以下で確認できます。

[ceph: root@host01 /]# ceph features
upmap-read

このバランサーモードは、upmapread モードの両方の最適化の利点を組み合わせたものです。read モードと同様に、upmap-readpg-upmap-primary を使用します。

upmap モードの PG の負荷分散と、read モードの読み取り負荷の分散を実現するには upmap-read を使用します。

重要

この機能の使用を許可するには、次のコマンドを使用して、クラスターに Reef 以降のクライアントのみをサポートする必要があることを通知する必要があります。

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef

モニターに Reef 以前のクライアントまたはデーモンが接続されている場合は、このコマンドは失敗します。

この問題を回避するには、--yes-i-really-mean-it フラグを使用します。

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it

使用しているクライアントのバージョンは、以下で確認できます。

[ceph: root@host01 /]# ceph features

5.4.1. キャパシティーバランサーを使用した Red Hat Ceph クラスターの負荷分散

キャパシティバランサーを使用して、Red Hat Ceph Storage クラスターの負荷を分散します。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。

手順

  1. バランサーモジュールが有効になっているかどうかを確認します。

    [ceph: root@host01 /]# ceph mgr module enable balancer

  2. balancer モジュールをオンにします。

    [ceph: root@host01 /]# ceph balancer on

  3. モードを変更するには、次のコマンドを使用します。デフォルトのモードは upmap です。

    [ceph: root@host01 /]# ceph balancer mode crush-compat

    あるいは、以下のような場合もあります。

    [ceph: root@host01 /]# ceph balancer mode upmap

  4. バランサーの現在の状態を確認します。

    [ceph: root@host01 /]# ceph balancer status

自動バランシング

バランサーモジュールをオンにするときは、自動分散を使用します。ceph balancer on コマンドを使用して、容量バランサーをオンにします。デフォルトでは、バランサーモジュールをオンにすると、自動分散が使用され、upmap モードが有効になります。

[ceph: root@host01 /]# ceph balancer on

バランサーモードを upmap から crush-compact モードに変更できます。crush-compat モードは古いクライアントとの下位互換性があり、OSD が均等に使用されるようにデータの分散に若干変更を加えます。

バランサーをオンにすると、バランサーの状態を確認できます。

[ceph: root@host01 /]# ceph balancer on
[ceph: root@host01 /]# ceph balancer mode crush-compat
[ceph: root@host01 /]# ceph balancer status
{
    "active": true,
    "last_optimize_duration": "0:00:00.001174",
    "last_optimize_started": "Fri Nov 22 11:09:18 2024",
    "mode": "crush-compact",
    "no_optimization_needed": false,
    "optimize_result": "Unable to find further optimization, change balancer mode and retry might help",
    "plans": []
}

バランサーモジュールを無効にするには、ceph balancer off コマンドを使用します。

[ceph: root@host01 /]# ceph balancer off
[ceph: root@host01 /]#  ceph balancer status
{
    "active": false,
    "last_optimize_duration": "",
    "last_optimize_started": "",
    "mode": "crush-compat",
    "no_optimization_needed": false,
    "optimize_result": "",
    "plans": []
}

スロットリング

たとえば、OSD が失敗し、システムがまだ修復していない場合などに、クラスターのパフォーマンスが低下する場合は、PG ディストリビューションには調整は行われません。

クラスターが正常な場合、バランサーは変更を調整して、置き間違えた、または移動する必要のある PG の割合がデフォルトで 5% のしきい値を下回るようにします。この割合は、target_max_misplaced_ratio の設定を使用して調整できます。

構文

ceph config-key set mgr target_max_misplaced_ratio THRESHOLD_PERCENTAGE

以下の例では、しきい値を 7% に増やします。

[ceph: root@host01 /]# ceph config-key set mgr target_max_misplaced_ratio .07

自動バランシングの場合:

  • 自動バランサーの実行間におけるスリープ時間を秒単位で設定します。

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/sleep_interval 60

  • 自動バランシングを開始する時刻を HHMM 形式で設定します。

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_time 0000

  • 自動バランシングを終了する時刻を HHMM 形式で設定します。

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_time 2359

  • 自動バランシングをこの曜日以降に制限します。0 は日曜日、1 は月曜日というように、crontab と同じ規則を使用します。

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_weekday 0

  • 自動バランシングをこの曜日以前に制限します。0 は日曜日、1 は月曜日というように、crontab と同じ規則を使用します。

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_weekday 6

  • 自動バランシングを制限するプール ID を定義します。これのデフォルトは空の文字列で、すべてのプールが均衡していることを意味します。数値のプール ID は、ceph osd pool ls detail コマンドで取得できます。

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/pool_ids 1,2,3

監視付き最適化

balancer 操作はいくつかの異なるフェーズに分類されます。

  1. プラン の構築。
  2. 現在の PG ディストリビューションまたは プラン 実行後に得られる PG ディストリビューションに対するデータ分散の品質の評価。
  3. プラン の実行。

    • 現在のディストリビューションを評価し、スコアを付けます。

      [ceph: root@host01 /]# ceph balancer eval

    • 単一プールのディストリビューションを評価するには、以下を実行します。

      構文

      ceph balancer eval POOL_NAME

      [ceph: root@host01 /]# ceph balancer eval rbd

    • 評価の詳細を表示するには、以下を実行します。

      [ceph: root@host01 /]# ceph balancer eval-verbose ...

    • 現在設定されているモードを使用してプランを生成するには、以下を実行します。

      構文

      ceph balancer optimize PLAN_NAME

      PLAN_NAME は、カスタムプラン名に置き換えます。

      [ceph: root@host01 /]# ceph balancer optimize rbd_123

    • プランの内容を表示するには、以下を実行します。

      構文

      ceph balancer show PLAN_NAME

      [ceph: root@host01 /]# ceph balancer show rbd_123

    • 古いプランを破棄するには、以下を実行します。

      構文

      ceph balancer rm PLAN_NAME

      [ceph: root@host01 /]# ceph balancer rm rbd_123

    • 現在記録されているプランを表示するには、status コマンドを使用します。

      [ceph: root@host01 /]# ceph balancer status
    • プラン実行後に生じるディストリビューションの品質を計算するには、以下を実行します。

      構文

      ceph balancer eval PLAN_NAME

      [ceph: root@host01 /]# ceph balancer eval rbd_123

    • プランを実行するには、以下を実行します。

      構文

      ceph balancer execute PLAN_NAME

      [ceph: root@host01 /]# ceph balancer execute rbd_123

      注記

      ディストリビューションの改善が想定される場合にのみ、プランを実行します。実行後、計画は破棄されます。

5.4.2. 読み取りバランサーを使用した Red Hat Ceph クラスターの負荷分散

クラスター内のプライマリー配置グループ (PG) の負荷を分散します。バランサーは、OSD 間での配置グループの割り当てを最適化して、負荷分散を実現します。バランサーは、自動 (オンライン)、オフライン、または監視付き (オフライン) で動作できます。

5.4.2.1. オンライン最適化

バランサモジュールを使用して、クラスター内のプライマリー PG の負荷を分散します。

前提条件

始める前に、Red Hat Ceph Storage クラスターが実行中であることを確認してください。

手順

  1. バランサーモジュールを有効にします。

    構文

    [ceph: root@host01 /]# ceph mgr module enable balancer

  2. バランサーモジュールをオンにします。

    構文

    [ceph: root@host01 /]# ceph balancer on

  3. クラスター上の min_compact_client を更新します。オンライン最適化を使用するには、クラスターで Reef 以降のクライアントのサポートが指定されている必要があります。

    構文

    ceph osd set-require-min-compat-client reef

    注記

    モニターに Reef 以前のクライアントまたはデーモンが接続されている場合は、このコマンドは失敗します。この問題を回避するには、--yes-i-really-mean-it フラグを使用します。

    構文

    [ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it

    You can check what client versions are in use with: the ceph features command.

    構文

    [ceph: root@host01 /]# ceph features

  4. 読み取りの負荷を分散するために、モードを upmap-read または read に変更します。

    デフォルトのモードは upmap です。これらのモードを有効にするには、次のいずれかのコマンドを実行します。

    構文

    ceph balancer mode upmap-read
    ceph balancer mode read

  5. バランサーの現在の状態を確認します。

    構文

    ceph balancer status

    [ceph: root@host01 /]# ceph balancer status
    {
    "active": true,
    "last_optimize_duration": "0:00:00.013640",
    "last_optimize_started": "Mon Nov 22 14:47:57 2024",
    "mode": "upmap-read",
    "no_optimization_needed": true,
    "optimize_result": "Unable to find further optimization, or pool(s) pg_num is decreasing, or distribution is already perfect",
    "plans": []
    }

5.4.2.2. オフライン最適化 (テクノロジープレビュー)

重要

テクノロジープレビュー機能は、実稼働環境での Red Hat サービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。詳細は、Red Hat テクノロジープレビュー機能のサポート範囲 を参照してください。

アンバランスなプライマリー OSD がある場合は、osdmaptool に組み込まれているオフラインオプティマイザーを使用してそれらを更新できます。

Red Hat では、最適な結果を確保するために、読み取りバランサーを実行する前にキャパシティーバランサーを実行することを推奨します。

読み取りバランサーを使用してクラスターの負荷を分散するには、次の手順に従います。

前提条件

始める前に、次の前提条件が満たされていることを確認してください。

  • 実行し、容量の負荷が分散された Red Hat Ceph Storage クラスター。
  • 最適な結果を確保するために、読み取りバランサーを実行する前に容量バランサーを実行して各 OSD の容量の負荷を分散させます。次の手順を実行して容量の負荷を分散します。

    1. osdmap の最新コピーを取得します。

      [ceph: root@host01 /]# ceph osd  getmap -o map
    2. アップマップバランサーを実行します。

      [ceph: root@host01 /]# ospmaptool map –upmap out.txt
    3. out.txt ファイルには、提案されたソリューションが含まれています。

      この手順のコマンドは、クラスターに変更を適用するために実行する通常の Ceph CLI コマンドです。

      out.txt ファイルに推奨事項がある場合は、次のコマンドを実行します。

      [ceph: root@host01 /]# source out.txt

手順

  1. 各プールで利用可能な read_balance_score を確認します。

    [ceph: root@host01 /]# ceph osd pool ls detail

    read_balance_score が 1 を大幅に上回っている場合、プールには負荷が分散されていないプライマリー OSD があります。

    同種のクラスターの場合、最適なスコアは [Ceil{(PG の数/OSD の数)}/(PG の数/OSD の数]/[PG の数/OSD の数)/(PG の数/OSD の数値)] です。たとえば、32 個の PG と 10 個の OSD を含むプールがある場合は、(PG の数/OSD の数) = 32/10 = 3.2 となります。したがって、すべてのデバイスが同一である場合の最適なスコアは、上限値 3.2 を (PG の数/OSD の数) で割った値、つまり 4/3.2 = 1.25 になります。同じシステム内に 64 PG を持つ別のプールがある場合、最適なスコアは 7/6.4 =1.09375 です。

    出力例:

    $ ceph osd pool ls detail
    pool 1 '.mgr' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 17 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr read_balance_score 3.00
    pool 2 'cephfs.a.meta' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 16 pgp_num 16 autoscale_mode on last_change 55 lfor 0/0/25 flags hashpspool stripe_width 0 pg_autoscale_bias 4 pg_num_min 16 recovery_priority 5 application cephfs read_balance_score 1.50
    pool 3 'cephfs.a.data' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode on last_change 27 lfor 0/0/25 flags hashpspool,bulk stripe_width 0 application cephfs read_balance_score 1.31

  2. osdmap の最新のコピーを取得します。

    [ceph: root@host01 /]# ceph osd getmap -o om

    出力例:

    got osdmap epoch 56

  3. オプティマイザーを実行します。

    out.txt ファイルには、提案されたソリューションが含まれています。

    [ceph: root@host01 /]# osdmaptool om --read out.txt --read-pool _POOL_NAME_ [--vstart]

    出力例:

    $ osdmaptool om --read out.txt --read-pool cephfs.a.meta
    ./bin/osdmaptool: osdmap file 'om'
    writing upmap command output to: out.txt
    ---------- BEFORE ------------
     osd.0 | primary affinity: 1 | number of prims: 4
     osd.1 | primary affinity: 1 | number of prims: 8
     osd.2 | primary affinity: 1 | number of prims: 4
    
    read_balance_score of 'cephfs.a.meta': 1.5
    
    ---------- AFTER ------------
     osd.0 | primary affinity: 1 | number of prims: 5
     osd.1 | primary affinity: 1 | number of prims: 6
     osd.2 | primary affinity: 1 | number of prims: 5
    
    read_balance_score of 'cephfs.a.meta': 1.13
    
    
    num changes: 2

  4. out.txt ファイルには、提案されたソリューションが含まれています。

    この手順のコマンドは、クラスターに変更を適用するために実行する通常の Ceph CLI コマンドです。vstart クラスターで作業している場合は、--vstart パラメーターを渡すと、CLI コマンドが ./bin/ 接頭辞でフォーマットされるようになります。

    [ceph: root@host01 /]# source out.txt

    出力例:

    $ cat out.txt
    ceph osd pg-upmap-primary 2.3 0
    ceph osd pg-upmap-primary 2.4 2
    
    $ source out.txt
    change primary for pg 2.3 to osd.0
    change primary for pg 2.4 to osd.2

    注記

    ceph osd pg-upmap-primary コマンドを初めて実行すると、次のような警告が表示される場合があります。

    Error EPERM: min_compat_client luminous < reef, which is required for pg-upmap-primary. Try 'ceph osd set-require-min-compat-client reef' before using the new interface

    この場合、推奨コマンド ceph osd set-require-min-compat-client reef を実行し、クラスターの min-compact-client を調整します。

注記

配置グループ (PG) の数が変更した場合、または OSD がクラスターに追加または削除された場合は、スコアを再チェックしてバランサーを再実行することを検討してください。これらの操作は、プールに対する読み取りバランサーの効果に大きな影響を与える可能性があります。

5.4.2.3. 監視付き最適化

読み取りバランサーは、監視付き最適化でも使用できます。監視付き最適化を使用する場合は、容量バランサーを使用した Red Hat Ceph クラスターの負荷分散 の詳細情報を確認してください。モードを upmap-read または read のいずれかに設定します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.