2.8. CRUSH の調整可能パラメーター

Ceph プロジェクトでは、多くの変更と新機能が指数関数的に拡張されました。Ceph の最初の商用サポート対象メジャーリリース v0.48 (Argonaut) から始め、Ceph は CRUSH アルゴリズムの特定パラメーターを調整する機能を提供します。つまり、設定はソースコードでフリーズしません。

考慮すべき重要な点を以下に示します。

  • CRUSH の値を調整すると、ストレージノード間で一部の PG の変化が発生することがあります。Ceph クラスターが多数のデータを保存する場合には、移動するデータの一部を準備する必要があります。
  • ceph-osd デーモンおよび ceph-mon デーモンは、更新されたマップを受け取るとすぐに、新しい接続の機能ビットを要求するようになります。ただし、すでに接続済みのクライアントはすでに取得され、新機能をサポートしない場合は誤作動します。Ceph クライアントも更新する Ceph Storage Cluster デーモンをアップグレードする場合を確認してください。
  • CRUSH の調整可能パラメーターがレガシー以外の値に設定され、後でレガシー値に戻された場合は、その機能をサポートするのに ceph-osd デーモンは必要ありません。ただし、OSD ピアリングプロセスでは、古いマップを調べ、理解する必要があります。したがって、クラスターが以前に非レガシー CRUSH 値を使用していた場合は、マップの最新バージョンがレガシーデフォルトの使用に戻されたとしても、古いバージョンの ceph-osd デーモンを実行しないでください。

2.8.1. CRUSH の調整可能パラメーターの進化

バージョン 0.48 より前の Ceph クライアントおよびデーモンは、調整可能を検出せず、バージョン 0.48 以降と互換性がありません。アップグレードする必要があります。調整可能パラメーター CRUSH の値も、主要な Ceph リリースと共に進化しました。

レガシー値

CRUSH Tunables のある新規クラスターにデプロイされたレガシー値は、誤作動する可能性があります。問題には、以下が含まれます。

  • リーフバケット内の少数のデバイスを持つ階層では、PG の一部マップは、必要なレプリカ数より少なく済みます。これは通常、それぞれ 1 つのうちの OSD をネスト化した数 (1-3) のノードに「ホスト」ノードで階層が起こります。
  • 大規模なクラスターの場合、必要な数の OSD よりも小さいために PG マップの割合 (パーセント) です。これは、階層のレイヤーが複数ある場合に広く使われます。たとえば、行、ラック、ホスト、osd などです。
  • OSD の一部にマークが付けられると、階層全体がではなく、OSD に再配布される傾向があります。
重要

Red Hat では、CRUSH の調整可能パラメーターを利用するために、Ceph クライアントと Ceph デーモンの両方を主要なサポートされるリリースにアップグレードすることを強く推奨します。Red Hat は、すべてのクラスターデーモンおよびクライアントが同じリリースバージョンを使用することを推奨しています。

Argonaut (レガシー)

これは、Ceph の最初にサポートされる最初のリリースです。

  • バージョン要件

    • Ceph 0.48、0.49 以降
    • RBD カーネルクライアントを含む Linux カーネル 3.6 以降
  • サポートされている、CRUSH の調整可能パラメーター:

    • choose_local_tries: ローカル再試行の数。レガシー値は 2 で、最適な値は 0 です。
    • choose_local_fallback_tries: レガシー値は 5 で、最適値は 0 です。
    • choose_total_tries: アイテムの選択試行回数の合計。レガシー値は 19 であり、後続のテストは通常のクラスターに対して 50 の値がより適していることを示します。非常に大きなクラスターの場合、大きな値が必要になる場合があります。

Bobtail

  • バージョン要件

    • Ceph 0.55、0.56.x 以降
    • RBD カーネルクライアントを含む Linux カーネル 3.9 以降
  • サポートされている、CRUSH の調整可能パラメーター:

    • chooseleaf_descend_once: 再帰的な chooseleaf の試行で再試行するか、1 回だけ試行して、元の配置の再試行を許可するか。レガシーのデフォルト値は 0 で、最適な値は 1 です。

firefly

これは、Red Hat がサポートする最初の Ceph バージョンです。

  • バージョン要件

    • Red Hat Ceph Storage 1.2.3 以降
    • RBD カーネルクライアントを含む Linux カーネル 7.1 以降
  • サポートされている、CRUSH の調整可能パラメーター:

    • chooseleaf_vary_r: 親がすでに行った試行回数に基づいて、再帰的な chooseleaf 試行がゼロ以外の値の r で開始するかどうか。レガシーデフォルト値は 0 ですが、この値 CRUSH は時折マッピングを見つけられません。計算費や正確性の面での最適な値は 1 です。ただし、既存データが多数あるレガシークラスターの場合、0 から 1 に変更すると、多くのデータが移動します。4 または 5 の値により、CRUSH が有効なマッピングを検索できますが、データの移動は少なくなります。
    • straw_calc_version: ストローバケットの CRUSH マップで計算および保存される内部重みにいくつかの問題がありました。具体的には、CRUSH の重み 0 が指定された項目がある場合、または重みと重複した CRUSH の両方がデータを不適切に分散している場合、これは重みに比例していません。0 の値は以前の内部加重計算を保持します。1 の値は動作を修正します。straw_calc_version を 1 に設定し、アイテムの追加、削除、再重み付けを行うか、reweight-all コマンドを使用して straw バケットを調整すると、クラスターが問題のある状態のいずれかに到達した場合は、データ移動の量を軽減するよう小規模にトリガーできます。この調整可能なオプションは、クライアント側で必要なカーネルバージョンに全く影響を及ぼさないため、特別なものです。

hammer

hammer 調整可能なプロファイルは、調整可能なプロファイルを変更するだけで、既存の CRUSH マップのマッピングには影響しませんが、新規のバケットタイプ straw2 がサポートされるようになりました。

  • バージョン要件

    • Red Hat Ceph Storage 1.3 以降
    • RBD カーネルクライアントを含む Linux カーネル 7.1 以降
  • 新しいバケットタイプ:

    • 新しい straw2 バケットタイプは、元の straw バケットのいくつかの制限を修正します。具体的には、古い straw バケットは重みの調整時に変更する必要のある一部のマッピングを変更し、straw2 バケットは重みが変更されたバケット項目に対して、またはここからのマッピングのみを変更するという元の目的を達成します。straw2 バケットは、新規に作成されたすべてのバケットのデフォルトです。バケットタイプの straw から straw2 への変更により、どの程度バケット項目の重みが相互に異なるかに応じてデータの移動が小さくなります。加重がすべて同じデータで移動しない場合、アイテムの加重が大きく異なる場合は、より多くの移動が必要になります。

Jewel

Red Hat Ceph Storage 2 は Red Hat Enterprise Linux 7.2 以降でサポートされていますが、jewel 調整可能なプロファイルは Red Hat Enterprise Linux 7.3 以降でのみサポートされます。jewel 調整可能なプロファイルは、CRUSH の全体的な動作を改善します。これにより、OSD のマークが付けられる際にマッピングの変更が大幅に削減されます。

  • バージョン要件

    • Red Hat Ceph Storage 2 以降
    • RBD カーネルクライアントおよび CephFS カーネルクライアントを含む Red Hat Enterprise Linux 7.3 以降
  • サポートされている、CRUSH の調整可能パラメーター:

    • chooseleaf_stable: 再帰的な chooseleaf の試行で、OSD がマークアウトされたときのマッピング変更の数を大幅に減らす内部ループにより良い値を使用するかどうか。レガシー値は 0 で、新しい値は 1 で新しいアプローチを使用します。既存クラスターのこの値を変更すると、ほとんどの場合で PG マッピングが変更される可能性が高いため、データの移動が非常に高くなります。