第11章 Ceph Storage クラスターのスケーリング
11.1. Ceph Storage クラスターのスケールアップ
必要な Ceph Storage ノードの数でデプロイメントを再度実行して、オーバークラウド内の Ceph Storage ノードの数をスケールアップすることができます。
この操作を実行する前に、更新するデプロイメント用に十分なノードがあることを確認してください。これらのノードは、director に登録済みで、適宜にタグ付けされている必要があります。
新規 Ceph Storage ノードの登録
新しい Ceph Storage ノードを director に登録するには、以下の手順を実施します。
手順
アンダークラウドに
stack
ユーザーとしてログインし、director の設定を初期化します。$ source ~/stackrc
-
新規ノードの定義テンプレート (例:
instackenv-scale.json
) で、新しいノードのハードウェアと電源管理の詳細を定義します。 このファイルを director にインポートします。
$ openstack overcloud node import ~/instackenv-scale.json
ノードの定義テンプレートをインポートすると、そのテンプレートで定義されている各ノードが director に登録されます。
カーネルと ramdisk イメージを全ノードに割り当てます。
$ openstack overcloud node configure
新規ノードの登録に関する詳しい情報は、「ノードの登録」を参照してください。
手動による新規ノードのタグ付け
各ノードの登録後、ハードウェアを検査して、ノードを特定のプロファイルにタグ付けする必要があります。プロファイルタグを使用してノードをフレーバーに照合してから、フレーバーをデプロイメントロールに割り当てます。
手順
ハードウェアのイントロスペクションをトリガーして、各ノードのハードウェア属性を取得します。
$ openstack overcloud node introspect --all-manageable --provide
-
--all-manageable
オプションを使用して、管理状態にあるノードのみをイントロスペクションします。ここでは、すべてのノードが管理状態にあります。 --provide
オプションは、イントロスペクション後に全ノードをactive
の状態にリセットします。重要このプロセスが正常に完了したことを確認します。ベアメタルノードの場合には、通常 15 分ほどかかります。
-
ノード一覧を取得して UUID を識別します。
$ openstack baremetal node list
各ノードの
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 ノードの数をスケールアップすることができます。
手順
オーバークラウドを再デプロイする前に、環境ファイル (ここでは
~/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
- オーバークラウドを再デプロイします。オーバークラウドには、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 の削除」を参照してください。
手順
-
コントローラーノードに
heat-admin
ユーザーとしてログインします。director のstack
ユーザーには、heat-admin
ユーザーにアクセスするための SSH キーがあります。 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
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
Ceph Storage クラスターがリバランスを開始します。このプロセスが完了するまで待機してください。以下のコマンドを使用して、ステータスを確認できます。
[heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph -w
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
OSD を停止します。
[heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@0 [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@1
コントローラーノードにログインしたら、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
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
クラスターから 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
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 を再度実施してください。
ノードからログアウトして、
stack
ユーザーとしてアンダークラウドに戻ります。[heat-admin@overcloud-controller-0 ~]$ exit [stack@director ~]$
director が再度プロビジョニングしないように、Ceph Storage ノードを無効にします。
[stack@director ~]$ openstack baremetal node list [stack@director ~]$ openstack baremetal node maintenance set UUID
Ceph Storage ノードを削除するには、ローカルのテンプレートファイルを使用して、director の
overcloud
スタックへの更新が必要です。最初にオーバークラウドスタックの UUID を特定します。$ openstack stack list
削除する Ceph Storage ノードの UUID を特定します。
$ openstack server list
スタックからノードを削除し、それに応じてプランを更新します。
重要オーバークラウドの作成時に追加の環境ファイルを渡した場合には、予定外の変更がオーバークラウドに加えられないように、ここで
-e
オプションを使用して環境ファイルを再度渡します。詳しい情報は、『director のインストールと使用方法』ガイドの「オーバークラウド環境の変更」を参照してください。$ openstack overcloud node delete / --stack <stack-name> / --templates / -e <other-environment-files> / <node_UUID>
-
stack が更新を完了するまで待機します。
heat stack-list --show-nested
コマンドを使用して、stack の更新を監視します。 新規ノードを director のノードプールに追加して、Ceph Storage ノードとしてデプロイします。環境ファイル (ここでは
~/templates/storage-config.yaml
) のparameter_defaults
のCephStorageCount
パラメーターを使用して、オーバークラウド内の Ceph Storage ノードの合計数を定義します。parameter_defaults: ControllerCount: 3 OvercloudControlFlavor: control ComputeCount: 3 OvercloudComputeFlavor: compute CephStorageCount: 3 OvercloudCephStorageFlavor: ceph-storage CephMonCount: 3 OvercloudCephMonFlavor: ceph-mon
注記ロールごとのノード数を定義する方法の詳細は、「ロールへのノードとフレーバーの割り当て」を参照してください。
環境ファイルを更新したら、オーバークラウドを再デプロイします。
$ openstack overcloud deploy --templates -e <ENVIRONMENT_FILE>
director は、新しいノードをプロビジョニングし、新しいノードの詳細を用いて stack 全体を更新します。
heat-admin
ユーザーとしてコントローラーノードにログインし、Ceph Storage ノードのステータスを確認します。[heat-admin@overcloud-controller-0 ~]$ sudo ceph status
-
osdmap
セクションの値がクラスターで必要なノード数と一致していることを確認します。削除した Ceph Storage ノードは新規ノードに置き換えられます。
11.3. OSD の Ceph Storage ノードへの追加
この手順では、OSD をノードに追加する方法を説明します。Ceph OSD に関する詳細は、『Red Hat Ceph Storage Operations Guide』の「Ceph OSDs」を参照してください。
手順
以下の heat テンプレートは、OSD デバイスを 3 つ持つ Ceph Storage をデプロイします。
parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd osd_scenario: lvm osd_objectstore: bluestore
OSD を追加するには、「Ceph Storage ノードのディスクレイアウトのマッピング」の説明に従って、ノードのディスクレイアウトを更新します。以下の例では、
/dev/sde
をテンプレートに追加します。parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd - /dev/sde osd_scenario: lvm osd_objectstore: bluestore
-
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」を参照してください。
手順
-
ceph-storage0
に SSH 接続し、root
でログインします。 OSD サービスを無効にし、停止します。
[root@ceph-storage0 ~]# systemctl disable ceph-osd@4 [root@ceph-stoarge0 ~]# systemctl stop ceph-osd@4
-
ceph-storage0
からの接続を切断します。 -
controller0
に SSH 接続し、root
でログインします。 Ceph monitor コンテナーの名前を特定します。
[root@controller0 ~]# podman ps | grep ceph-mon ceph-mon-controller0 [root@controller0 ~]#
Ceph monitor コンテナーを有効にして、望ましくない OSD を
out
とマークします。[root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd out 4
注記このコマンドにより、Ceph はストレージクラスターをリバランスし、データをクラスター内の他の OSD にコピーします。クラスターは、リバランスが完了するまで、一時的に
active+clean
状態から離れます。以下のコマンドを実行し、ストレージクラスターの状態が
active+clean
になるまで待機します。[root@controller0 ~]# podman exec ceph-mon-controller0 ceph -w
CRUSH マップから OSD を削除して、データを受信しないようにします。
[root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd crush remove osd.4
OSD 認証キーを削除します。
[root@controller0 ~]# podman exec ceph-mon-controller0 ceph auth del osd.4
OSD を削除します。
[root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd rm 4
-
controller0
からの接続を切断します。 -
stack
ユーザーとしてアンダークラウドに SSH 接続し、CephAnsibleDisksConfig
パラメーターを定義した heat 環境ファイルを見つけます。 heat テンプレートに OSD が 4 つ含まれています。
parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd - /dev/sde osd_scenario: lvm osd_objectstore: bluestore
テンプレートを変更して
/dev/sde
を削除します。parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd osd_scenario: lvm osd_objectstore: bluestore
openstack overcloud deploy
を実行してオーバークラウドを更新します。注記この例では、OSD を使用するすべてのホストから
/dev/sde
デバイスを削除していることを前提としています。すべてのノードから同じデバイスを削除しない場合は、以下に示すように heat テンプレートを更新し、異なるdevices
一覧を持つホストを定義する方法について、「異なる構成の Ceph Storage ノードへのディスクレイアウトのマッピング」を参照してください。