第6章 director を使用した Ceph Storage クラスターのさまざまなワークロード用のパフォーマンス層の定義

Red Hat OpenStack Platform (RHOSP) director を使用して、異なる Red Hat Ceph Storage パフォーマンス層をデプロイすることができます。Ceph CRUSH ルールと CephPools director パラメーターを組み合わせ、デバイスクラス機能を使用して異なる層を構築して、異なるパフォーマンス要件のあるワークロードに対応することができます。たとえば、通常のワークロード用に HDD クラスと、高パフォーマンスのロードのために SSD 上でのみデータを分散する SSD クラスを定義できます。このシナリオでは、新規の Block Storage ボリュームを作成する場合には、HDD または SSD のいずれかのパフォーマンス層を選択することができます。

警告
既存の環境でパフォーマンス層を定義すると、Ceph クラスター内で大量のデータが移動する場合があります。スタックの更新時に director がトリガーする ceph-ansible には、プールがクラスターにすでに定義されているかどうかや、データが含まれるかどうかを確認するロジックはありません。つまり、プールに関連付けられたデフォルトの CRUSH ルールを変更すると、データの移動が行われるため、既存の環境でパフォーマンス層を定義することは危険となる可能性があります。ノードの追加または削除に関する支援または推奨事項が必要な場合は、Red Hat サポートにお問い合わせください。
注記

Ceph はディスク種別を自動検出し、Linux カーネルが公開するハードウェアプロパティーに基づいて、これを対応するデバイスクラス (HDD、SSD、または NVMe のいずれか) に割り当てます。ただし、必要に応じてカテゴリーをカスタマイズすることもできます。

前提条件

  • 新規デプロイメントでは、Red Hat Ceph Storage (RHCS) バージョン 4.1 以降
  • 既存のデプロイメントの場合は、Red Hat Ceph Storage (RHCS) バージョン 4.2 以降

異なる Red Hat Ceph Storage パフォーマンス層をデプロイするには、CRUSH マップの詳細が含まれる新規の環境ファイルを作成し、これをデプロイメントコマンドに追加します。

以下の手順では、各 Ceph Storage ノードには OSD が 3 つ含まれます。sdb および sdc は動作中のディスクで、sdd は SSD です。Ceph は正しいディスク種別を自動的に検出します。次に、HDD および SSD の 2 つの CRUSH ルールを設定し、2 つのデバイスクラスにそれぞれマッピングします。HDD ルールはデフォルトで、別のルールでプールを設定しない限り、すべてのプールに適用されます。

最後に、fastpool と呼ばれる追加のプールを作成し、SSD ルールにマッピングします。このプールは、最終的に Block Storage (cinder) バックエンドを通じて公開されます。この Block Storage バックエンドを使用するすべてのワークロードは、パフォーマンスを高速にする場合にのみ SSD によってサポートされます。これは、データまたはボリュームから起動 (boot from volume) のいずれかに活用できます。

6.1. パフォーマンス層の設定

警告
既存の環境でパフォーマンス層を定義すると、Ceph クラスター内で大量のデータが移動する場合があります。スタックの更新時に director がトリガーする ceph-ansible には、プールがクラスターにすでに定義されているかどうかや、データが含まれるかどうかを確認するロジックはありません。つまり、プールに関連付けられたデフォルトの CRUSH ルールを変更すると、データの移動が行われるため、既存の環境でパフォーマンス層を定義することは危険となる可能性があります。ノードの追加または削除に関する支援または推奨事項が必要な場合は、Red Hat サポートにお問い合わせください。

director はこの機能に対応するための特定のパラメーターを公開しませんが、以下の手順に従って ceph-ansible の想定される変数を生成することができます。

手順

  1. アンダークラウドノードに stack ユーザーとしてログインします。
  2. Ceph config パラメーターおよびデバイスクラス変数を含む環境ファイル (/home/stack/templates/ceph-config.yaml 等) を作成します。あるいは、既存の環境ファイルに以下の設定を追加することができます。
  3. 環境ファイルで CephAnsibleDisksConfig パラメーターを使用して、Ceph OSD として使用するブロックデバイスをリスト表示します。

    CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
        osd_scenario: lvm
        osd_objectstore: bluestore
  4. オプション: Ceph はディスクの種別を自動的に検出して、対応するデバイスクラスに割り当てます。ただし、crush_device_class プロパティーを使用して、特定のデバイスを特定のクラスに属するように強制したり、独自のカスタムクラスを作成したりすることもできます。以下の例は、指定したクラスを持つ OSD のリストと同じです。

    CephAnsibleDisksConfig:
        lvm_volumes:
          - data: ‘/dev/sdb’
            crush_device_class: ‘hdd’
          - data: ‘/dev/sdc’
            crush_device_class: ‘hdd’
          - data: ‘/dev/sdd’
            crush_device_class: ‘ssd’
        osd_scenario: lvm
        osd_objectstore: bluestore
  5. CephAnsibleExtraVars パラメーターを追加します。crush_rules パラメーターには、定義した各クラスまたは Ceph が自動検出する各クラスにルールが含まれている必要があります。新しいプールを作成する際にルールが指定されていない場合は、Ceph が使用するルールがデフォルトとして選択されます。

    CephAnsibleExtraConfig:
        crush_rule_config: true
        create_crush_tree: true
        crush_rules:
          - name: HDD
            root: default
            type: host
            class: hdd
            default: true
          - name: SSD
            root: default
            type: host
            class: ssd
            default: false
  6. CephPools パラメーターを追加します。

    • rule_name パラメーターを使用して、デフォルトのルールを使用しない各プールの層を指定します。以下の例では、fastpool プールは、fast tier として設定された SSD デバイスクラスを使用して Block Storage ボリュームを管理します。
    • <appropriate_PG_num> を配置グループ (PG) の適切な数に置き換えます。あるいは、配置グループの自動スケーラーを使用して、Ceph プールの PG の数を計算します。

      詳細は、異なる Ceph プールへのカスタム属性の割り当て を参照してください。

    • CinderRbdExtraPools パラメーターを使用して、fastpool を Block Storage バックエンドとして設定します。

      CephPools:
        - name: fastpool
          pg_num: <appropraiate_PG_num>
          rule_name: SSD
          application: rbd
      CinderRbdExtraPools: fastpool
  7. 以下の例を使用して、環境ファイルに正しい値が含まれることを確認します。

    parameter_defaults:
        CephAnsibleDisksConfig:
            devices:
                - '/dev/sdb'
                - '/dev/sdc'
                - '/dev/sdd'
            osd_scenario: lvm
            osd_objectstore: bluestore
        CephAnsibleExtraConfig:
            crush_rule_config: true
            create_crush_tree: true
            crush_rules:
                - name: HDD
                  root: default
                  type: host
                  class: hdd
                  default: true
                - name: SSD
                  root: default
                  type: host
                  class: ssd
                  default: false
        CinderRbdExtraPools: fastpool
        CephPools:
            - name: fastpool
              pg_num: <appropriate_PG_num>
              rule_name: SSD
              application: rbd
  8. openstack overcloud deploy コマンドで新規の環境ファイルを指定します。

    $ openstack overcloud deploy \
    --templates \
    …
    -e <other_overcloud_environment_files> \
    -e /home/stack/templates/ceph-config.yaml  \
    …

    <other_overcloud_environment_files> をデプロイメントに追加する他の環境ファイルのリストに置き換えます。

重要

既存の Ceph クラスターに環境ファイルを適用すると、既存の Ceph プールは新しいルールで更新されません。このため、デプロイメントの完了後に以下のコマンドを入力して、指定したプールにルールを設定する必要があります。

$ ceph osd pool set <pool> crush_rule <rule>
  • <pool> を新しいルールを適用するプールの名前に置き換えます。
  • <rule> を crush_rules パラメーターで指定したルール名の 1 つに置き換えます。
  • <appropriate_PG_num> を配置グループの適切な数または target_size_ratio に置き換え、pg_autoscale_modetrue に設定します。

このコマンドを使用してルールを変更するたびに、既存のエントリーを更新するか、既存のテンプレートの CephPools パラメーターに新しいエントリーを追加します。

CephPools:
    - name: <pool>
      pg_num: <appropriate_PG_num>
      rule_name: <rule>
      application: rbd