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

重要
現時点では、この手順は新規の director デプロイメントのみを対象としています。

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

注記

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

前提条件

  • Red Hat Ceph Storage (RHCS) バージョン 4.1 以降。

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

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

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

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

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 コマンドで新規の環境ファイルを指定します。<existing_overcloud_environment_files> を既存のデプロイメントに含まれる環境ファイルの一覧に置き換えます。

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

6.2. Block Storage (cinder) 種別の新しい Ceph プールへのマッピング

設定手順を完了したら、Block Storage (cinder) を使用して作成した fastpool 層にマッピングされた種別を作成して、RHOSP テナントにパフォーマンス層の機能を使用できるようにします。

手順

  1. アンダークラウドノードに stack ユーザーとしてログインします。
  2. source コマンドで overcloudrc ファイルを読み込みます。

    $ source overcloudrc
  3. Block Storage ボリュームの既存種別を確認します。

    $ cinder type-list
  4. 新規の Block Storage ボリューム fast_tier を作成します。

    $ cinder type-create fast_tier
  5. Block Storage 種別が作成されていることを確認します。

    $ cinder type-list
  6. fast_tier Block Storage 種別が利用可能な場合は、作成した新しい層の Block Storage ボリュームバックエンドとして fastpool を設定します。

    $ cinder type-key fast_tier set volume_backend_name=tripleo_ceph_fastpool
  7. 新しい層を使用して、新しいボリュームを作成します。

    $ cinder create 1 --volume-type fast_tier --name fastdisk
重要

既存の 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

6.3. CRUSH ルールが作成され、プールが正しい CRUSH ルールに設定されていることの確認

手順

  1. オーバークラウドコントローラーノードに heat-admin ユーザーとしてログインします。
  2. OSD 層が正常に設定されていることを確認するには、以下のコマンドを入力します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。

    $ sudo podman exec -it ceph-mon-<controller_hostname> ceph osd tree
  3. 作成されるツリービューで、各 OSD に設定したデバイスクラスが CLASS コラムに正しく表示されることを確認します。
  4. また、以下のコマンドで、OSD がデバイスクラスに適切に割り当てられていることを確認します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。

    $ sudo podman exec -it ceph-mon-<controller hostname> ceph osd crush tree --show-shadow
  5. 作成された階層を以下のコマンドによる結果と比較し、ルールごとに同じ値が適用されることを確認します。

    • <controller_hostname> を、ホストコントローラーノードの名前に置き換えます。
    • <rule_name> を、チェックするルールの名前に置き換えます。

      $ sudo podman exec <controller hostname> ceph osd crush rule dump <rule_name>
  6. 作成したルール名と ID が、デプロイメント中に使用した crush_rules パラメーターに準じて正しいことを確認します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。

    $ sudo podman exec -it ceph-mon-<controller_hostname>  ceph osd crush rule dump | grep -E "rule_(id|name)"
  7. Ceph プールが、ステップ 3 で取得した正しい CRUSH ルール ID に関連付けられていることを確認します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。

    $ sudo podman exec -it ceph-mon-<controller_hostname> ceph osd dump | grep pool
  8. 各プールについて、ルール ID が想定するルール名と一致することを確認してください。