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
このバランサーモードは、
upmap
とread
モードの両方の最適化の利点を組み合わせたものです。read
モードと同様に、upmap-read
はpg-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 クラスターがある。
手順
バランサーモジュールが有効になっているかどうかを確認します。
例
[ceph: root@host01 /]# ceph mgr module enable balancer
balancer モジュールをオンにします。
例
[ceph: root@host01 /]# ceph balancer on
モードを変更するには、次のコマンドを使用します。デフォルトのモードは
upmap
です。例
[ceph: root@host01 /]# ceph balancer mode crush-compat
あるいは、以下のような場合もあります。
例
[ceph: root@host01 /]# ceph balancer mode upmap
バランサーの現在の状態を確認します。
例
[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 操作はいくつかの異なるフェーズに分類されます。
-
プラン
の構築。 -
現在の PG ディストリビューションまたは
プラン
実行後に得られる PG ディストリビューションに対するデータ分散の品質の評価。 プラン
の実行。現在のディストリビューションを評価し、スコアを付けます。
例
[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 クラスターが実行中であることを確認してください。
手順
バランサーモジュールを有効にします。
構文
[ceph: root@host01 /]# ceph mgr module enable balancer
バランサーモジュールをオンにします。
構文
[ceph: root@host01 /]# ceph balancer on
クラスター上の
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
読み取りの負荷を分散するために、モードを
upmap-read
またはread
に変更します。デフォルトのモードは
upmap
です。これらのモードを有効にするには、次のいずれかのコマンドを実行します。構文
ceph balancer mode upmap-read ceph balancer mode read
バランサーの現在の状態を確認します。
構文
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 の容量の負荷を分散させます。次の手順を実行して容量の負荷を分散します。
osdmap の最新コピーを取得します。
[ceph: root@host01 /]# ceph osd getmap -o map
アップマップバランサーを実行します。
[ceph: root@host01 /]# ospmaptool map –upmap out.txt
out.txt ファイルには、提案されたソリューションが含まれています。
この手順のコマンドは、クラスターに変更を適用するために実行する通常の Ceph CLI コマンドです。
out.txt ファイルに推奨事項がある場合は、次のコマンドを実行します。
[ceph: root@host01 /]# source out.txt
手順
各プールで利用可能な
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
osdmap
の最新のコピーを取得します。[ceph: root@host01 /]# ceph osd getmap -o om
出力例:
got osdmap epoch 56
オプティマイザーを実行します。
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
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
のいずれかに設定します。