第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
の想定される変数を生成することができます。
手順
-
アンダークラウドノードに
stack
ユーザーとしてログインします。 -
Ceph config パラメーターおよびデバイスクラス変数を含む環境ファイル (
/home/stack/templates/ceph-config.yaml
等) を作成します。あるいは、既存の環境ファイルに以下の設定を追加することができます。 環境ファイルで
CephAnsibleDisksConfig
パラメーターを使用して、Ceph OSD として使用するブロックデバイスを一覧表示します。CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd osd_scenario: lvm osd_objectstore: bluestore
オプション: 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
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
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
-
以下の例を使用して、環境ファイルに正しい値が含まれることを確認します。
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
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 テナントにパフォーマンス層の機能を使用できるようにします。
手順
-
アンダークラウドノードに
stack
ユーザーとしてログインします。 source コマンドで
overcloudrc
ファイルを読み込みます。$ source overcloudrc
Block Storage ボリュームの既存種別を確認します。
$ cinder type-list
新規の Block Storage ボリューム fast_tier を作成します。
$ cinder type-create fast_tier
Block Storage 種別が作成されていることを確認します。
$ cinder type-list
fast_tier
Block Storage 種別が利用可能な場合は、作成した新しい層の Block Storage ボリュームバックエンドとしてfastpool
を設定します。$ cinder type-key fast_tier set volume_backend_name=tripleo_ceph_fastpool
新しい層を使用して、新しいボリュームを作成します。
$ 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_mode
をtrue
に設定します。
このコマンドを使用してルールを変更するたびに、既存のエントリーを更新するか、既存のテンプレートの CephPools
パラメーターに新しいエントリーを追加します。
CephPools: - name: <pool> pg_num: <appropriate_PG_num> rule_name: <rule> application: rbd
6.3. CRUSH ルールが作成され、プールが正しい CRUSH ルールに設定されていることの確認
手順
-
オーバークラウドコントローラーノードに
heat-admin
ユーザーとしてログインします。 OSD 層が正常に設定されていることを確認するには、以下のコマンドを入力します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。
$ sudo podman exec -it ceph-mon-<controller_hostname> ceph osd tree
- 作成されるツリービューで、各 OSD に設定したデバイスクラスが CLASS コラムに正しく表示されることを確認します。
また、以下のコマンドで、OSD がデバイスクラスに適切に割り当てられていることを確認します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。
$ sudo podman exec -it ceph-mon-<controller hostname> ceph osd crush tree --show-shadow
作成された階層を以下のコマンドによる結果と比較し、ルールごとに同じ値が適用されることを確認します。
- <controller_hostname> を、ホストコントローラーノードの名前に置き換えます。
<rule_name> を、チェックするルールの名前に置き換えます。
$ sudo podman exec <controller hostname> ceph osd crush rule dump <rule_name>
作成したルール名と ID が、デプロイメント中に使用した
crush_rules
パラメーターに準じて正しいことを確認します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。$ sudo podman exec -it ceph-mon-<controller_hostname> ceph osd crush rule dump | grep -E "rule_(id|name)"
Ceph プールが、ステップ 3 で取得した正しい CRUSH ルール ID に関連付けられていることを確認します。<controller_hostname> を、ホストコントローラーノードの名前に置き換えます。
$ sudo podman exec -it ceph-mon-<controller_hostname> ceph osd dump | grep pool
- 各プールについて、ルール ID が想定するルール名と一致することを確認してください。