5.5. 異なる Ceph Storage ノードのパラメーターのオーバーライド

CephStorageComputeHCI など、Ceph OSD をホスティングするロールを持つすべてのノードは、「Ceph Storage ノードのディスクレイアウトのマッピング」 で作成されたグローバルな devices および dedicated_devices リストを使用します。これらのリストは、これらすべてのサーバーが同じハードウェアを持っていることを前提としています。これが異なるハードウェアを備えたサーバーがある場合は、ノード固有のディスク設定を使用して、さまざまな devices および dedicated_devices リストの詳細で Director を更新する必要があります。

注記

Ceph OSD をホスティングするロールには、roles_data.yaml ファイルに OS::TripleO::Services::CephOSD サービスが含まれます。

他のノードと同じハードウェアを持たない Ceph Storage ノードは、パフォーマンスの問題を引き起こす可能性があります。Red Hat OpenStack Platform(RHOSP) 環境で、標準的なノードとノード固有のオーバーライドを使用して設定したノードとの間の差異が大きくなるほど、パフォーマンスが低下する可能性が高くなります。

5.5.1. ノード固有のディスク設定

Director は、同じハードウェアを持たないサービス用に設定する必要があります。これは、ノード固有のディスク設定と呼ばれます。

次のいずれかの方法を使用して、ノード固有のディスク設定を作成できます。

  • 自動: JSON heat 環境ファイルを生成して、ノード固有のディスク設定を自動的に作成できます。
  • 手動: ノードのディスクレイアウトを変更して、ノード固有のディスク設定を作成できます。

5.5.1.1. Ceph デバイス用の JSON heat 環境ファイルの生成

/usr/share/openstack-tripleo-heat-templates/tools/make_ceph_disk_list.py スクリプトを使用すると、Bare Metal Provisioning サービス (ironic) のイントロスペクションデータから有効な JSON heat 環境ファイルを自動的に作成することができます。この JSON ファイルを使用して、ノード固有のディスク設定を director に渡します。

手順

  1. デプロイする Ceph ノードの Bare Metal Provisioning サービスからイントロスペクションデータをエクスポートします。

    openstack baremetal introspection data save oc0-ceph-0 > ceph0.json
    openstack baremetal introspection data save oc0-ceph-1 > ceph1.json
    ...
  2. ユーティリティーをアンダークラウド上の stack ユーザーのホームディレクトリーにコピーし、それを使用して node_data_lookup.json ファイルを生成します。

    ./make_ceph_disk_list.py -i ceph*.json -o node_data_lookup.json -k by_path
  3. NodeDataLookup はデプロイメント中に 1 回しか定義できないため、Ceph OSD をホストするすべてのノードの openstack baremetal introspection data save コマンドからイントロスペクションデータファイルをユーティリティーに渡します。-i オプションには、入力として *.json ような表現またはファイルのリストを指定することができます。

    -k オプションを使用して、OSD ディスクの識別に使用する Bare Metal Provisioning ディスクデータ構造のキーを定義します。name は使用しないでください。/dev/sdd のようなデバイスのファイルを生成し、リブート時に同じデバイスをポイントするとは限らないためです。代わりに by_path を使います。-k を指定しない場合は、この設定がデフォルトとなります。

    Bare Metal Provisioning サービスは、システムで利用可能なディスクのいずれかをルートディスクとして確保します。ユーティリティーは、生成されたデバイスのリストからルートディスクを常に除外します。

  4. (オプション): ./make_ceph_disk_list.py –help を使用すると、他の利用可能なオプションを確認できます。
  5. オーバークラウドをデプロイする際に、ご自分の環境に該当するその他の環境ファイルと共に node_data_lookup.json ファイルを追加します。

    $ openstack overcloud deploy \
    --templates \
    …
    -e <existing_overcloud_environment_files> \
    -e node_data_lookup.json \
    …

5.5.1.2. Ceph Storage ノードのディスクレイアウトの変更

重要

非同種の Ceph Storage ノードは、パフォーマンスの問題を引き起こす可能性があります。Red Hat OpenStack Platform(RHOSP) 環境で、標準的なノードとノード固有のオーバーライドを使用して設定したノードとの間の差異が大きくなるほど、パフォーマンスが低下する可能性が高くなります。

ノード固有のディスク設定を director に渡すには、node-spec-overrides.yaml 等の heat 環境ファイルを openstack overcloud deploy コマンドに渡す必要があります。そして、この環境ファイルの内容で、それぞれのサーバーをマシン固有の UUID およびグローバル変数を上書きするローカル変数のリストで識別する必要があります。

マシン固有の UUID は、個々のサーバー向けに、または Bare Metal Provisioning サービス (ironic) データベースから抽出することができます。

注記
以下の手順では、埋め込まれた有効な JSO が含まれる有効な YAML 環境ファイルを作成します。make_ceph_disk_list.py で完全な JSON ファイルを生成し、それを YAML のようにデプロイメントコマンドに渡すこともできます。詳細については、Ceph デバイス用の JSON heat 環境ファイルの生成 を参照してください。

手順

  1. 個々のサーバーの UUID を把握するには、そのサーバーにログインして以下のコマンドを入力します。

    $ dmidecode -s system-uuid
  2. Bare Metal Provisioning サービスデータベースから UUID を抽出するには、アンダークラウドで以下のコマンドを入力します。

    $ openstack baremetal introspection data save NODE-ID | jq .extra.system.product.uuid
    警告

    アンダークラウドのインストールまたはアップグレードおよびイントロスペクションの前に、undercloud.confinspection_extras = true がない場合には、マシン固有の UUID は Bare Metal Provisioning サービスデータベースには含まれません。

    重要

    マシン固有の UUID は、Bare Metal Provisioning サービスの UUID ではありません。

    有効な node-spec-overrides.yaml ファイルは、以下のようになる可能性があります。

    parameter_defaults:
      NodeDataLookup: {"32E87B4C-C4A7-418E-865B-191684A6883B": {"devices": ["/dev/sdc"]}}
  3. 最初の 2 行以降は、すべて有効な JSON でなければなりません。jq コマンドを使用して、JSON が有効であることを確認します。

    1. 最初の 2 行 (parameter_defaults: および NodeDataLookup:) を一時的にファイルから削除します。
    2. cat node-spec-overrides.yaml | jq . を実行します。
  4. node-spec-overrides.yaml ファイルが大きくなるにつれ、jq コマンドを使用して組み込まれた JSON が有効であることを確認することもできます。たとえば、devices および dedicated_devices のリストは同じ長さでなければならないので、以下のコマンドを使用して、デプロイメントを開始する前に両者が同じ長さであることを確認します。以下の例では、node-spec-c05-h17-h21-h25-6048r.yaml にはラック c05 に 3 つのサーバーがあります。ラック c05 のスロット h17、h21、および h25 にはディスクがありません。

    (undercloud) [stack@b08-h02-r620 tht]$ cat node-spec-c05-h17-h21-h25-6048r.yaml | jq '.[] | .devices | length'
    33
    30
    33
    (undercloud) [stack@b08-h02-r620 tht]$ cat node-spec-c05-h17-h21-h25-6048r.yaml | jq '.[] | .dedicated_devices | length'
    33
    30
    33
    (undercloud) [stack@b08-h02-r620 tht]$
  5. JSON を検証した後に、有効な環境 YAML ファイルとなるように 2 つの行 (parameter_defaults: および NodeDataLookup:) を戻し、-e を使用してこの環境ファイルをデプロイメントに追加します。以下の例では、更新した Heat 環境ファイルは Ceph デプロイメントの NodeDataLookup を使用しています。すべてのサーバーのデバイスリストは 35 のディスクで設定されていましたが、1 つのサーバーだけ 1 つのディスクがありませんでした。この環境ファイルは、その 1 つのノードについてのみデフォルトのデバイスリストを上書きし、グローバルリストの代わりに使用する必要のある 34 のディスクのリストを提供します。
  6. JSON を検証した後に、有効な環境 YAML ファイルとなるように 2 つの行 (parameter_defaults: および NodeDataLookup:) を戻し、-e を使用してこの環境ファイルをデプロイメントコマンドに追加します。

    以下の例では、更新した heat 環境ファイルは Ceph デプロイメントの NodeDataLookup を使用しています。すべてのサーバーのデバイスリストは 35 のディスクで設定されていましたが、1 つのサーバーだけ 1 つのディスクがありませんでした。この環境ファイルは、その 1 つのノードについてのみデフォルトのデバイスリストを上書きし、グローバルリストの代わりに使用する必要のある 34 のディスクのリストをノードに提供します。

    parameter_defaults:
      # c05-h01-6048r is missing scsi-0:2:35:0 (00000000-0000-0000-0000-0CC47A6EFD0C)
      NodeDataLookup: {
        "00000000-0000-0000-0000-0CC47A6EFD0C": {
          "devices": [
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:1:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:32:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:2:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:3:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:4:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:5:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:6:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:33:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:7:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:8:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:34:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:9:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:10:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:11:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:12:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:13:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:14:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:15:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:16:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:17:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:18:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:19:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:20:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:21:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:22:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:23:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:24:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:25:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:26:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:27:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:28:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:29:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:30:0",
        "/dev/disk/by-path/pci-0000:03:00.0-scsi-0:2:31:0"
            ],
          "dedicated_devices": [
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:81:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1",
        "/dev/disk/by-path/pci-0000:84:00.0-nvme-1"
            ]
          }
        }

5.5.2. BlueStore block.db サイズの変更

BlueStore block.db はデータセグメントと BlueStore ログ先行書き込み (WAL) のデータベースです。データベースのサイズを変更するには、2 つの方法があります。これらの方法のいずれかを選択して、サイズを変更します。

5.5.2.1. ceph-volume 使用時の BlueStore block.db サイズの変更

ceph-volume を使用するときに block.db のサイズをオーバーライドするには、次の手順を使用します。ceph-volumeosd_scenario: lvm のときに使用されます。ceph-volumeblock.db のサイズを自動的に設定します。しかし、高度なシナリオでは block.db のサイズをオーバーライドすることができます。

次の例では、使用される block_db_sizeceph-volume コールに渡されるように、Ceph 設定ファイルのオーバーライドではなく、ceph-ansible ホスト変数を使用しています。

手順

  1. 以下のような内容の JSON 環境ファイルを作成しますが、必要に応じて値を置き換えてください。

    {
      "parameter_defaults": {
        "NodeDataLookup": {
          "32e87b4c-c4a7-41be-865b-191684a6883b": {
            "block_db_size": 3221225472
          },
          "ea6a84d6-cf89-4fe2-b7bd-869b3fe4dd6b": {
            "block_db_size": 3221225472
          }
        }
      }
    }
  2. オーバークラウドをデプロイする際に、ご自分の環境に該当するその他の環境ファイルと共に JSON ファイルを追加します。

    $ openstack overcloud deploy \
    --templates \
    …
    -e <existing_overcloud_environment_files> \
    -e <json_environment_file>  \
    …

5.5.2.2. ceph-disk 使用時の BlueStore block.db サイズの変更

ceph-disk を使用するときに block.db のサイズをオーバーライドするには、次の手順を使用します。osd_scenario: non-collocated または osd_scenario: collocated の場合は、ceph-disk が使用されます。

次の例では、特定のノードの Ceph 設定のオーバーライドを使用して、blustore_block_db_size を設定しています。この Ceph 設定オプションは、ceph-volume の使用時には無視されますが、ceph-disk ではこの設定オプションが使用されます。

手順

  1. 以下のような内容の JSON 環境ファイルを作成しますが、必要に応じて値を置き換えてください。

    {
      "parameter_defaults": {
        "NodeDataLookup": {
          "32e87b4c-c4a7-41be-865b-191684a6883b": {
            "ceph_conf_overrides": {
              "osd": {
                "bluestore_block_db_size": 3221225472
              }
            }
          },
          "ea6a84d6-cf89-4fe2-b7bd-869b3fe4dd6b": {
            "ceph_conf_overrides": {
              "osd": {
                "bluestore_block_db_size": 3221225472
              }
            }
          }
        }
      }
    }
  2. オーバークラウドをデプロイする際に、ご自分の環境に該当するその他の環境ファイルと共に JSON ファイルを追加します。

    $ openstack overcloud deploy \
    --templates \
    …
    -e <existing_overcloud_environment_files> \
    -e <json_environment_file>  \
    …