第11章 Ceph Storage クラスターのスケーリング

11.1. Ceph Storage クラスターのスケールアップ

必要な Ceph Storage ノードの数でデプロイメントを再度実行して、オーバークラウド内の Ceph Storage ノードの数をスケールアップすることができます。

この操作を実行する前に、更新するデプロイメント用に十分なノードがあることを確認してください。これらのノードは、director に登録済みで、適宜にタグ付けされている必要があります。

新規 Ceph Storage ノードの登録

新しい Ceph Storage ノードを director に登録するには、以下の手順を実施します。

手順

  1. アンダークラウドに stack ユーザーとしてログインし、director の設定を初期化します。

    $ source ~/stackrc
  2. 新規ノードの定義テンプレート (例: instackenv-scale.json) で、新しいノードのハードウェアと電源管理の詳細を定義します。
  3. このファイルを director にインポートします。

    $ openstack overcloud node import ~/instackenv-scale.json

    ノードの定義テンプレートをインポートすると、そのテンプレートで定義されている各ノードが director に登録されます。

  4. カーネルと ramdisk イメージを全ノードに割り当てます。

    $ openstack overcloud node configure
注記

新規ノードの登録に関する詳しい情報は、「ノードの登録」を参照してください。

手動による新規ノードのタグ付け

各ノードの登録後、ハードウェアを検査して、ノードを特定のプロファイルにタグ付けする必要があります。プロファイルタグを使用してノードをフレーバーに照合してから、フレーバーをデプロイメントロールに割り当てます。

手順

  1. ハードウェアのイントロスペクションをトリガーして、各ノードのハードウェア属性を取得します。

    $ openstack overcloud node introspect --all-manageable --provide
    • --all-manageable オプションを使用して、管理状態にあるノードのみをイントロスペクションします。ここでは、すべてのノードが管理状態にあります。
    • --provide オプションは、イントロスペクション後に全ノードを active の状態にリセットします。

      重要

      このプロセスが正常に完了したことを確認します。ベアメタルノードの場合には、通常 15 分ほどかかります。

  2. ノード一覧を取得して UUID を識別します。

    $ openstack baremetal node list
  3. 各ノードの properties/capabilities パラメーターに profile オプションを追加して、ノードを特定のプロファイルに手動でタグ付けします。profile オプションを追加すると、適切なプロファイルにノードをタグ付けします。

    注記

    手動でのタグ付けの代わりに、Automated Health Check (AHC) ツールを使用し、ベンチマークデータに基づいて、多数のノードに自動でタグ付けします。たとえば、以下のコマンドは、3 つの追加のノードを ceph-storage プロファイルでタグ付けします。

    $ openstack baremetal node set --property capabilities='profile:baremetal,boot_option:local' 551d81f5-4df2-4e0f-93da-6c5de0b868f7
    $ openstack baremetal node set --property capabilities='profile:baremetal,boot_option:local' 5e735154-bd6b-42dd-9cc2-b6195c4196d7
    $ openstack baremetal node set --property capabilities='profile:baremetal,boot_option:local' 1a2b090c-299d-4c20-a25d-57dd21a7085b
ヒント

タグ付け/登録したノードが複数のディスクを使用している場合には、director が各ノードで特定のルートディスクを使用するように設定できます。詳細は、「マルチディスククラスターのルートディスクの定義」を参照してください。

Ceph Storage ノードを追加したオーバークラウドの再デプロイ

新規ノードを登録してタグ付けした後に、オーバークラウドを再デプロイして Ceph Storage ノードの数をスケールアップすることができます。

手順

  1. オーバークラウドを再デプロイする前に、環境ファイル (ここでは ~/templates/storage-config.yaml) の parameter_defaults にある CephStorageCount パラメーターを設定します。「ロールへのノードとフレーバーの割り当て」では、オーバークラウドは 3 つの Ceph Storage ノードでデプロイするように設定されています。以下の例では、オーバークラウドを 6 つのノードにスケーリングしています。

    parameter_defaults:
      ControllerCount: 3
      OvercloudControlFlavor: control
      ComputeCount: 3
      OvercloudComputeFlavor: compute
      CephStorageCount: 6
      OvercloudCephStorageFlavor: ceph-storage
      CephMonCount: 3
      OvercloudCephMonFlavor: ceph-mon
  2. オーバークラウドを再デプロイします。オーバークラウドには、3 つの Ceph Storage ノードではなく 6 つの Ceph Storage ノードが含まれるようになりました。

11.2. Ceph Storage ノードのスケールダウンと置き換え

場合によっては、Ceph クラスターのスケールダウン、または Ceph Storage ノードのを置き換え (Ceph Storage ノードに問題がある場合など) が必要となる可能性があります。いずれの場合も、データの損失を避けるために、オーバークラウドから削除する Ceph Storage ノードを無効にしてリバランスする必要があります。

注記

以下の手順では、『Red Hat Ceph Storage Administration Guide』からのステップを使用して、手動で Ceph Storage ノードを削除します。Ceph Storage ノードの手動削除に関する詳細は、「コンテナー内で実行される Ceph デーモンの開始、停止、および再起動」および「コマンドラインインターフェースを使用した Ceph OSD の削除」を参照してください。

手順

  1. コントローラーノードに heat-admin ユーザーとしてログインします。director の stack ユーザーには、heat-admin ユーザーにアクセスするための SSH キーがあります。
  2. OSD ツリーを一覧表示して、お使いのノードの OSD を検索します。たとえば、削除するノードには、以下の OSD が含まれる場合があります。

    -2 0.09998     host overcloud-cephstorage-0
    0 0.04999         osd.0                         up  1.00000          1.00000
    1 0.04999         osd.1                         up  1.00000          1.00000
  3. Ceph Storage ノードの OSD を無効化します。今回は、OSD ID は 0 と 1 です。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd out 0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd out 1
  4. Ceph Storage クラスターがリバランスを開始します。このプロセスが完了するまで待機してください。以下のコマンドを使用して、ステータスを確認できます。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph -w
  5. Ceph クラスターのリバランスが完了したら、削除する Ceph Storage ノード (ここでは overcloud-cephstorage-0) に heat-admin ユーザーとしてログインし、ノードを停止し無効にします。

    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@0
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@1
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl disable ceph-osd@0
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl disable ceph-osd@1
  6. OSD を停止します。

    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@0
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@1
  7. コントローラーノードにログインしたら、CRUSH マップから OSD を削除して、データを受信しないようにします。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd crush remove osd.0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd crush remove osd.1
  8. OSD 認証キーを削除します。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph auth del osd.0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph auth del osd.1
  9. クラスターから OSD を削除します。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd rm 0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd rm 1
  10. CRUSH マップからストレージノードを削除します。

    [heat-admin@overcloud-controller-0 ~]$ sudo docker exec ceph-mon-<HOSTNAME> ceph osd crush rm <NODE>
    [heat-admin@overcloud-controller-0 ~]$ sudo ceph osd crush remove <NODE>

    CRUSH ツリーを検索して、CRUSH マップに定義されている <NODE> の名前を確認できます。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd crush tree | grep overcloud-osd-compute-3 -A 4
                    "name": "overcloud-osd-compute-3",
                    "type": "host",
                    "type_id": 1,
                    "items": []
                },
    [heat-admin@overcloud-controller-0 ~]$

    CRUSH ツリーで、アイテム一覧が空であることを確認します。一覧が空でない場合は、ステップ 7 を再度実施してください。

  11. ノードからログアウトして、stack ユーザーとしてアンダークラウドに戻ります。

    [heat-admin@overcloud-controller-0 ~]$ exit
    [stack@director ~]$
  12. director が再度プロビジョニングしないように、Ceph Storage ノードを無効にします。

    [stack@director ~]$ openstack baremetal node list
    [stack@director ~]$ openstack baremetal node maintenance set UUID
  13. Ceph Storage ノードを削除するには、ローカルのテンプレートファイルを使用して、director の overcloud スタックへの更新が必要です。最初にオーバークラウドスタックの UUID を特定します。

    $ openstack stack list
  14. 削除する Ceph Storage ノードの UUID を特定します。

    $ openstack server list
  15. スタックからノードを削除し、それに応じてプランを更新します。

    重要

    オーバークラウドの作成時に追加の環境ファイルを渡した場合には、予定外の変更がオーバークラウドに加えられないように、ここで -e オプションを使用して環境ファイルを再度渡します。詳しい情報は、『director のインストールと使用方法』ガイドの「オーバークラウド環境の変更」を参照してください。

    $ openstack overcloud node delete /
    --stack <stack-name> /
    --templates /
    -e <other-environment-files> /
    <node_UUID>
  16. stack が更新を完了するまで待機します。heat stack-list --show-nested コマンドを使用して、stack の更新を監視します。
  17. 新規ノードを director のノードプールに追加して、Ceph Storage ノードとしてデプロイします。環境ファイル (ここでは ~/templates/storage-config.yaml) の parameter_defaultsCephStorageCount パラメーターを使用して、オーバークラウド内の Ceph Storage ノードの合計数を定義します。

    parameter_defaults:
      ControllerCount: 3
      OvercloudControlFlavor: control
      ComputeCount: 3
      OvercloudComputeFlavor: compute
      CephStorageCount: 3
      OvercloudCephStorageFlavor: ceph-storage
      CephMonCount: 3
      OvercloudCephMonFlavor: ceph-mon
    注記

    ロールごとのノード数を定義する方法の詳細は、「ロールへのノードとフレーバーの割り当て」を参照してください。

  18. 環境ファイルを更新したら、オーバークラウドを再デプロイします。

    $ openstack overcloud deploy --templates -e <ENVIRONMENT_FILE>

    director は、新しいノードをプロビジョニングし、新しいノードの詳細を用いて stack 全体を更新します。

  19. heat-admin ユーザーとしてコントローラーノードにログインし、Ceph Storage ノードのステータスを確認します。

    [heat-admin@overcloud-controller-0 ~]$ sudo ceph status
  20. osdmap セクションの値がクラスターで必要なノード数と一致していることを確認します。削除した Ceph Storage ノードは新規ノードに置き換えられます。

11.3. OSD の Ceph Storage ノードへの追加

この手順では、OSD をノードに追加する方法を説明します。Ceph OSD に関する詳細は、『Red Hat Ceph Storage Operations Guide』「Ceph OSDs」を参照してください。

手順

  1. 以下の heat テンプレートは、OSD デバイスを 3 つ持つ Ceph Storage をデプロイします。

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
        osd_scenario: lvm
        osd_objectstore: bluestore
  2. OSD を追加するには、「Ceph Storage ノードのディスクレイアウトのマッピング」の説明に従って、ノードのディスクレイアウトを更新します。以下の例では、/dev/sde をテンプレートに追加します。

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
          - /dev/sde
        osd_scenario: lvm
        osd_objectstore: bluestore
  3. openstack overcloud deploy を実行してオーバークラウドを更新します。
注記

この例では、OSD を使用するすべてのホストに /dev/sde という新しいデバイスがあることを前提としています。全ノードで新しいデバイスを持つ必要がない場合は、以下に示すように heat テンプレートを更新し、異なる devices 一覧を持つホストを定義する方法について、「異なる構成の Ceph Storage ノードへのディスクレイアウトのマッピング」を参照してください。

11.4. Ceph Storage ノードからの OSD の削除

この手順では、ノードから OSD を削除する方法を説明します。環境について以下を前提とします。

  • サーバー (ceph-storage0) には、/dev/sde で実行している OSD (ceph-osd@4) がある。
  • Ceph monitor サービス (ceph-mon) が controller0 で実行されている。
  • ストレージクラスターの割合がほぼ完全とならないように、利用可能な OSD が十分にある。

Ceph OSD に関する詳細は、『Red Hat Ceph Storage Operations Guide』「Ceph OSDs」を参照してください。

手順

  1. ceph-storage0 に SSH 接続し、root でログインします。
  2. OSD サービスを無効にし、停止します。

    [root@ceph-storage0 ~]# systemctl disable ceph-osd@4
    [root@ceph-stoarge0 ~]# systemctl stop ceph-osd@4
  3. ceph-storage0 からの接続を切断します。
  4. controller0 に SSH 接続し、root でログインします。
  5. Ceph monitor コンテナーの名前を特定します。

    [root@controller0 ~]# podman ps | grep ceph-mon
    ceph-mon-controller0
    [root@controller0 ~]#
  6. Ceph monitor コンテナーを有効にして、望ましくない OSD を out とマークします。

    [root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd out 4
    注記

    このコマンドにより、Ceph はストレージクラスターをリバランスし、データをクラスター内の他の OSD にコピーします。クラスターは、リバランスが完了するまで、一時的に active+clean 状態から離れます。

  7. 以下のコマンドを実行し、ストレージクラスターの状態が active+clean になるまで待機します。

    [root@controller0 ~]# podman exec ceph-mon-controller0 ceph -w
  8. CRUSH マップから OSD を削除して、データを受信しないようにします。

    [root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd crush remove osd.4
  9. OSD 認証キーを削除します。

    [root@controller0 ~]# podman exec ceph-mon-controller0 ceph auth del osd.4
  10. OSD を削除します。

    [root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd rm 4
  11. controller0 からの接続を切断します。
  12. stack ユーザーとしてアンダークラウドに SSH 接続し、CephAnsibleDisksConfig パラメーターを定義した heat 環境ファイルを見つけます。
  13. heat テンプレートに OSD が 4 つ含まれています。

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
          - /dev/sde
        osd_scenario: lvm
        osd_objectstore: bluestore
  14. テンプレートを変更して /dev/sde を削除します。

    parameter_defaults:
      CephAnsibleDisksConfig:
        devices:
          - /dev/sdb
          - /dev/sdc
          - /dev/sdd
        osd_scenario: lvm
        osd_objectstore: bluestore
  15. openstack overcloud deploy を実行してオーバークラウドを更新します。

    注記

    この例では、OSD を使用するすべてのホストから /dev/sde デバイスを削除していることを前提としています。すべてのノードから同じデバイスを削除しない場合は、以下に示すように heat テンプレートを更新し、異なる devices 一覧を持つホストを定義する方法について、「異なる構成の Ceph Storage ノードへのディスクレイアウトのマッピング」を参照してください。