1.5. Ceph OSD
Red Hat Ceph Storage クラスターが稼働している場合は、ランタイム時に OSD をストレージクラスターに追加できます。
Ceph OSD は、通常 1 つのストレージドライブおよびノード内の関連付けられたジャーナル用に 1 つの ceph-osd
デーモンで設定されます。ノードに複数のストレージドライブがある場合は、ドライブごとに 1 つの ceph-osd
デーモンをマッピングします。
Red Hat は、クラスターの容量を定期的に確認して、ストレージ容量の最後に到達するかどうかを確認することを推奨します。ストレージクラスターが ほぼ完全
の比率に達すると、1 つ以上の OSD を追加してストレージクラスターの容量を拡張します。
Red Hat Ceph Storage クラスターのサイズを縮小したり、ハードウェアを置き換える場合は、ランタイム時に OSD を削除することも可能です。ノードに複数のストレージドライブがある場合には、そのドライブ用に ceph-osd
デーモンのいずれかを削除する必要もあります。通常、ストレージクラスターの容量を確認して、容量の上限に達したかどうかを確認することが推奨されます。ストレージクラスターが ほぼ完全
の比率ではないことを OSD を削除する場合。
OSD を追加する前に、ストレージクラスターが 完全な
比率を超えないようにします。ストレージクラスターが ほぼ完全な
比率に達した後に OSD の障害が発生すると、ストレージクラスターが 完全な
比率を超過する可能性があります。Ceph は、ストレージ容量の問題を解決するまでデータを保護するための書き込みアクセスをブロックします。完全な
比率の影響を考慮せずに OSD を削除しないでください。
1.5.1. Ceph OSD ノードの設定
OSD を使用するプールのストレージストラテジーとして同様に Ceph OSD とサポートするハードウェアを設定します。Ceph は、一貫性のあるパフォーマンスプロファイルを確保するために、プール全体でハードウェアを統一します。最適なパフォーマンスを得るには、同じタイプまたはサイズのドライブのある CRUSH 階層を検討してください。
異なるサイズのドライブを追加する場合は、それに応じて重量を調整してください。OSD を CRUSH マップに追加する場合は、新規 OSD の重みを考慮してください。ハードドライブの容量は、1 年あたり約 40% 増加するため、新しい OSD ノードはストレージクラスターの古いノードよりも大きなハードドライブを持つ可能性があります。つまり、重みが大きくなる可能性があります。
新たにインストールを行う前に、インストールガイド のRed Hat Ceph Storage のインストール要件の章を確認してください。
関連情報
- 詳しい情報は、Red Hat Ceph Storage 戦略ガイド を参照してください。*
1.5.2. コンテナーの OSD ID のドライブへのマッピング
場合によっては、コンテナー化された OSD が使用しているドライブを特定する必要がある場合があります。たとえば、OSD に問題がある場合には、ドライブのステータスを検証するために使用するドライブを把握しなければならない場合があります。また、コンテナー化されていない OSD の場合は、OSD ID を参照して開始および停止しますが、コンテナー化された OSD を開始および停止するには、使用するドライブを参照します。
以下の例は、Red Hat Enterprise Linux 8 で実行しています。Red Hat Enterprise Linux 8 では、podman
がデフォルトのサービスとなり、古い docker
サービスに置き換えられています。Red Hat Enterprise Linux 7 で実行している場合は、podman
を docker
に置き換え、指定したコマンドを実行します。
前提条件
- コンテナー化環境で実行中の Red Hat Ceph Storage クラスター
-
コンテナーノードへの
root
アクセスがあること。
手順
コンテナー名を見つけます。たとえば、
osd.5
に関連付けられたドライブを特定するには、osd.5
が実行中のコンテナーノードでターミナルを開き、podman ps
を実行してすべてのコンテナーをリスト表示します。例
[root@ceph3 ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3a866f927b74 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" About an hour ago Up About an hour ceph-osd-ceph3-sdd 4e242d932c32 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" About an hour ago Up About an hour ceph-osd-ceph3-sdc 91f3d4829079 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 22 hours ago Up 22 hours ceph-osd-ceph3-sdb 73dfe4021a49 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-osd-ceph3-sdf 90f6d756af39 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-osd-ceph3-sde e66d6e33b306 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-mgr-ceph3 733f37aafd23 registry.redhat.io/rhceph/rhceph-4-rhel8:latest "/entrypoint.sh" 7 days ago Up 7 days ceph-mon-ceph3
podman exec
を使用して、直前の出力から OSD コンテナー名上でceph-volume lvm list
を実行します。例
[root@ceph3 ~]# podman exec ceph-osd-ceph3-sdb ceph-volume lvm list ====== osd.5 ======= [journal] /dev/journals/journal1 journal uuid C65n7d-B1gy-cqX3-vZKY-ZoE0-IEYM-HnIJzs osd id 1 cluster fsid ce454d91-d748-4751-a318-ff7f7aa18ffd type journal osd fsid 661b24f8-e062-482b-8110-826ffe7f13fa data uuid SlEgHe-jX1H-QBQk-Sce0-RUls-8KlY-g8HgcZ journal device /dev/journals/journal1 data device /dev/test_group/data-lv2 devices /dev/sda [data] /dev/test_group/data-lv2 journal uuid C65n7d-B1gy-cqX3-vZKY-ZoE0-IEYM-HnIJzs osd id 1 cluster fsid ce454d91-d748-4751-a318-ff7f7aa18ffd type data osd fsid 661b24f8-e062-482b-8110-826ffe7f13fa data uuid SlEgHe-jX1H-QBQk-Sce0-RUls-8KlY-g8HgcZ journal device /dev/journals/journal1 data device /dev/test_group/data-lv2 devices /dev/sdb
この出力から、
osd.5
が/dev/sdb
に関連付けられていることがわかります。
関連情報
- 詳細は、失敗した OSD ディスクの置き換え を参照してください。
1.5.3. 同じディスクトポロジーを持つ Ansible を使用した Ceph OSD の追加
同じディスクトポロジーを持つ Ceph OSD の場合、Ansible は /usr/share/ceph-ansible/group_vars/osds.yml
ファイルの devices:
セクションで指定されている同じデバイスパスを使用して、他の OSD ノードと同じ OSD 数を追加します。
新しい Ceph OSD ノードは、残りの OSD と同じ設定になります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Red Hat Ceph Storage インストールガイド のRed Hat Ceph Storage のインストール要件の章を参照してください。
-
新規ノードへの
root
アクセスがあること。 - ストレージクラスター内の他の OSD ノードと同じ数の OSD データドライブ。
手順
[osds]
セクションの下に Ceph OSD ノードを/etc/ansible/hosts
ファイルに追加します。構文
[osds] ... osd06 NEW_OSD_NODE_NAME
Ansible が Ceph ノードに到達できることを確認します。
[user@admin ~]$ ansible all -m ping
Ansible 設定ディレクトリーに移動します。
[user@admin ~]$ cd /usr/share/ceph-ansible
ベアメタル および コンテナー のデプロイメントには、Ansible Playbook の
add-osd.yml
を実行します。注記新しい OSD ホストの場合、
osds.yml
Playbook ではノードにnode-exporter
とceph-crash
サービスがデプロイされないため、--limit
オプションを使用してsite.yml
またはsite-container.yml
Playbook を実行する必要があります。例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/add-osd.yml -i hosts
新しい OSD ホストの場合、
site.yml
またはsite-container.yml
Ansible Playbook を実行します。ベアメタル デプロイメント:
構文
ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME
例
[user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03
コンテナー デプロイメント:
構文
ansible-playbook site-container.yml -i hosts --limit NEW_OSD_NODE_NAME
例
[user@admin ceph-ansible]$ ansible-playbook site-container.yml -i hosts --limit node03
OSD を追加する際に、PGs were not reported as active+clean
で Playbook が失敗する場合は、all.yml
ファイルに以下の変数を設定し、再試行と遅延を調整します。
# OSD handler checks handler_health_osd_check_retries: 50 handler_health_osd_check_delay: 30
関連情報
- Ansible インベントリー設定の詳細は、{storage_product} インストールガイド の Ansible のインベントリーの場所の設定 セクションを参照してください。
1.5.4. 異なるディスクトポロジーが設定された Ansible を使用した Ceph OSD の追加
異なるディスクトポロジーを持つ Ceph OSD については、新しい OSD ノードを既存のストレージクラスターに追加する 2 つの方法があります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Red Hat Ceph Storage インストールガイド のRed Hat Ceph Storage のインストール要件の章を参照してください。
-
新規ノードへの
root
アクセスがあること。
手順
最初の操作
[osds]
セクションの下に、新しい Ceph OSD ノードを/etc/ansible/hosts
ファイルに追加します。例
[osds] ... osd06 NEW_OSD_NODE_NAME
ストレージクラスターに追加される新しい Ceph OSD ノードを
/etc/ansible/host_vars/
ディレクトリーに作成します。構文
touch /etc/ansible/host_vars/NEW_OSD_NODE_NAME
例
[root@admin ~]# touch /etc/ansible/host_vars/osd07
新しいファイルを編集し、
devices:
およびdedicated_devices:
セクションをファイルに追加します。以下の各セクションに、-
およびスペースを追加してから、この OSD ノードのブロックデバイス名への完全パスを追加します。例
devices: - /dev/sdc - /dev/sdd - /dev/sde - /dev/sdf dedicated_devices: - /dev/sda - /dev/sda - /dev/sdb - /dev/sdb
Ansible がすべての Ceph ノードに到達できることを確認します。
[user@admin ~]$ ansible all -m ping
ディレクトリーを Ansible 設定ディレクトリーに移動します。
[user@admin ~]$ cd /usr/share/ceph-ansible
ベアメタル および コンテナー のデプロイメントには、Ansible Playbook の
add-osd.yml
を実行します。注記新しい OSD ホストの場合、
osds.yml
Playbook ではノードにnode-exporter
とceph-crash
サービスがデプロイされないため、--limit
オプションを使用してsite.yml
またはsite-container.yml
Playbook を実行する必要があります。例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/add-osd.yml -i hosts
新しい OSD ホストの場合、
site.yml
またはsite-container.yml
Ansible Playbook を実行します。ベアメタル デプロイメント:
構文
ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME
例
[user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03
コンテナー デプロイメント:
構文
ansible-playbook site-container.yml -i hosts --limit NEW_OSD_NODE_NAME
例
[user@admin ceph-ansible]$ ansible-playbook site-container.yml -i hosts --limit node03
2 つ目の方法
新しい OSD ノード名を
/etc/ansible/hosts
ファイルに追加し、devices
オプションおよびdedicated_devices
オプションを使用して、異なるディスクトポロジーを指定します。例
[osds] ... osd07 devices="['/dev/sdc', '/dev/sdd', '/dev/sde', '/dev/sdf']" dedicated_devices="['/dev/sda', '/dev/sda', '/dev/sdb', '/dev/sdb']"
Ansible がすべての Ceph ノードに到達できることを確認します。
[user@admin ~]$ ansible all -m ping
ディレクトリーを Ansible 設定ディレクトリーに移動します。
[user@admin ~]$ cd /usr/share/ceph-ansible
ベアメタル および コンテナー のデプロイメントには、Ansible Playbook の
add-osd.yml
を実行します。注記新しい OSD ホストの場合、
osds.yml
Playbook ではノードにnode-exporter
とceph-crash
サービスがデプロイされないため、--limit
オプションを使用してsite.yml
またはsite-container.yml
Playbook を実行する必要があります。例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/add-osd.yml -i hosts
新しい OSD ホストの場合、
site.yml
またはsite-container.yml
Ansible Playbook を実行します。ベアメタル デプロイメント:
構文
ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME
例
[user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03
コンテナー デプロイメント:
構文
ansible-playbook site-container.yml -i hosts --limit NEW_OSD_NODE_NAME
例
[user@admin ceph-ansible]$ ansible-playbook site-container.yml -i hosts --limit node03
関連情報
- Ansible インベントリー設定の詳細は、{storage_product} インストールガイド の Ansible のインベントリーの場所の設定 セクションを参照してください。
1.5.5. ceph-volume
を使用した Ceph OSD の作成
create
サブコマンドは prepare
サブコマンドを呼び出し、activate
サブコマンドを呼び出します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph OSD ノードへのルートレベルのアクセス。
作成プロセスに対する制御を強化する場合は、サブコマンドの prepare
および activate
を個別に使用して、create
を使用する代わりに OSD を作成できます。この 2 つのサブコマンドを使用すると、大量のデータをリバランスせずに、新規 OSD をストレージクラスターに段階的に導入することができます。create
サブコマンドを使用すると、完了直後に OSD が up および in になりますが、どちらのアプローチも同じように機能します。
手順
新規 OSD を作成するには、以下を実行します。
構文
ceph-volume lvm create --bluestore --data VOLUME_GROUP/LOGICAL_VOLUME
例
[root@osd ~]# ceph-volume lvm create --bluestore --data example_vg/data_lv
関連情報
- 詳細はRed Hat Ceph Storage 管理ガイドの `ceph-volume` を使用した Ceph OSD の準備 セクションを参照してください。
- 詳細は、Red Hat Ceph Storage 管理ガイドの `ceph-volume` を使用した Ceph OSD の有効化 セクションを参照してください。
1.5.6. ceph-volume
でのバッチモードの使用
batch
サブコマンドは、単一デバイスが提供されると複数の OSD の作成を自動化します。
ceph-volume
コマンドは、ドライブタイプに基づいて OSD の作成に使用する最適な方法を決定します。Ceph OSD の最適化は、利用可能なデバイスによって異なります。
-
すべてのデバイスが従来のハードドライブの場合、
batch
はデバイスごとに OSD を 1 つ作成します。 -
すべてのデバイスがソリッドステートドライブの場合は、
バッチ
によりデバイスごとに OSD が 2 つ作成されます。 -
従来のハードドライブとソリッドステートドライブが混在している場合、
バッチ
はデータに従来のハードドライブを使用し、ソリッドステートドライブに可能な限り大きいジャーナル (block.db
) を作成します。
batch
サブコマンドは、write-ahead-log (block.wal
) デバイスに別の論理ボリュームを作成することに対応していません。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph OSD ノードへのルートレベルのアクセス。
手順
複数のドライブに OSD を作成するには、以下の手順を実行します。
構文
ceph-volume lvm batch --bluestore PATH_TO_DEVICE [PATH_TO_DEVICE]
例
[root@osd ~]# ceph-volume lvm batch --bluestore /dev/sda /dev/sdb /dev/nvme0n1
関連情報
- 詳細は、Red Hat Ceph Storage 管理ガイドの `ceph-volume` を使用した Ceph OSD の作成 セクションを参照してください。
1.5.7. コマンドラインインターフェイスを使用した Ceph OSD の追加
OSD を Red Hat Ceph Storage に手動で追加するハイレベルのワークフローを以下に示します。
-
ceph-osd
パッケージをインストールして、新規 OSD インスタンスを作成します。 - OSD データおよびジャーナルドライブを準備してマウントします。
- ボリュームグループおよび論理ボリュームを作成します。
- 新規 OSD ノードを CRUSH マップに追加します。
- 所有者およびグループパーミッションを更新します。
-
ceph-osd
デーモンを有効にして起動します。
ceph-disk
コマンドは非推奨となりました。ceph-volume
コマンドは、コマンドラインインターフェイスから OSD をデプロイするのに推奨される方法です。現在、ceph-volume
コマンドは lvm
プラグインのみをサポートしています。Red Hat は、本ガイドで両方のコマンドを参照として使用している例を提供します。これにより、ストレージ管理者は ceph-disk
に依存するカスタムスクリプトを ceph-volume
に変換できます。
カスタムストレージクラスター名の場合は、ceph
コマンドおよび ceph-osd
コマンドで --cluster CLUSTER_NAME
オプションを使用します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Red Hat Ceph Storage インストールガイド のRed Hat Ceph Storage のインストール要件の章を参照してください。
-
新規ノードへの
root
アクセス。 -
任意です。
ceph-volume
ユーティリティーでボリュームグループと論理ボリュームを自動的に作成しない場合は、手動で作成します。Red Hat Enterprise Linux 8 の 論理ボリュームの設定および管理 を参照してください。
手順
Red Hat Ceph Storage 4 OSD ソフトウェアリポジトリーを有効にします。
Red Hat Enterprise Linux 7
[root@osd ~]# subscription-manager repos --enable=rhel-7-server-rhceph-4-osd-rpms
Red Hat Enterprise Linux 8
[root@osd ~]# subscription-manager repos --enable=rhceph-4-osd-for-rhel-8-x86_64-rpms
/etc/ceph/
ディレクトリーを作成します。[root@osd ~]# mkdir /etc/ceph
新しい OSD ノードで、Ceph 管理キーリングと設定ファイルを Ceph Monitor ノードの 1 つからコピーします。
構文
scp USER_NAME @ MONITOR_HOST_NAME :/etc/ceph/CLUSTER_NAME.client.admin.keyring /etc/ceph scp USER_NAME @ MONITOR_HOST_NAME :/etc/ceph/CLUSTER_NAME.conf /etc/ceph
例
[root@osd ~]# scp root@node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ [root@osd ~]# scp root@node1:/etc/ceph/ceph.conf /etc/ceph/
ceph-osd
パッケージを新しい Ceph OSD ノードにインストールします。Red Hat Enterprise Linux 7
[root@osd ~]# yum install ceph-osd
Red Hat Enterprise Linux 8
[root@osd ~]# dnf install ceph-osd
OSD を準備します。
作成した論理ボリュームを使用するには、以下を実行します。
構文
ceph-volume lvm prepare --bluestore --data VOLUME_GROUP/LOGICAL_VOLUME
ceph-volume
が論理ボリュームを自動的に作成する RAW デバイスを指定するには、以下のコマンドを実行します。構文
ceph-volume lvm prepare --bluestore --data /PATH_TO_DEVICE
詳細は、OSD の準備 セクションを参照してください。
noup
オプションを設定します。[root@osd ~]# ceph osd set noup
新しい OSD をアクティベートします。
構文
ceph-volume lvm activate --bluestore OSD_ID OSD_FSID
例
[root@osd ~]# ceph-volume lvm activate --bluestore 4 6cc43680-4f6e-4feb-92ff-9c7ba204120e
詳細は、OSD のアクティベート セクションを参照してください。
注記1 つのコマンドで OSD を準備してアクティベートできます。詳細は、OSD の作成 セクションを参照してください。または、1 つのコマンドで、複数のドライブを指定し、OSD を作成することもできます。
batch
モードの使用 を参照してください。OSD を CRUSH マップに追加します。複数のバケットを指定する場合、コマンドは OSD を指定したバケットから最も具体的なバケットに配置、および 指定した他のバケットに従ってバケットを移動します。
構文
ceph osd crush add OSD_ID WEIGHT [ BUCKET_TYPE = BUCKET_NAME ...]
例
[root@osd ~]# ceph osd crush add 4 1 host=node4
注記複数のバケットを指定する場合、コマンドは OSD を指定したバケットから最も具体的なバケットに配置、および 指定した他のバケットに従ってバケットを移動します。
注記CRUSH マップを手動で編集することもできます。Red Hat Ceph Storage 戦略ガイドの CRUSH マップの編集 セクションを参照してください。
重要ルートバケットのみを指定する場合、OSD はルートに直接アタッチしますが、CRUSH ルールは OSD がホストバケット内に置かれることを想定します。
noup
オプションの設定を解除します。[root@osd ~]# ceph osd unset noup
新規作成されたディレクトリーの所有者とグループのパーミッションを更新します。
構文
chown -R OWNER : GROUP PATH_TO_DIRECTORY
例
[root@osd ~]# chown -R ceph:ceph /var/lib/ceph/osd [root@osd ~]# chown -R ceph:ceph /var/log/ceph [root@osd ~]# chown -R ceph:ceph /var/run/ceph [root@osd ~]# chown -R ceph:ceph /etc/ceph
カスタムでストレージクラスターを使用する場合は、以下の行を適切なファイルに追加します。
[root@osd ~]# echo "CLUSTER=CLUSTER_NAME" >> /etc/sysconfig/ceph
CLUSTER_NAME
は、カスタムストレージクラスター名に置き換えます。新規 OSD が
起動
し、データを受信する準備ができていることを確認するには、OSD サービスを有効にして起動します。構文
systemctl enable ceph-osd@OSD_ID systemctl start ceph-osd@OSD_ID
例
[root@osd ~]# systemctl enable ceph-osd@4 [root@osd ~]# systemctl start ceph-osd@4
関連情報
- 詳細は、Red Hat Ceph Storage 戦略ガイドの CRUSH マップの編集 セクションを参照してください。
-
ceph-volume
コマンドの使用に関する詳細は、Red Hat Ceph Storage 管理ガイド を参照してください。
1.5.8. コンテナー化された環境でのコマンドラインインターフェイスを使用した Ceph OSD の追加
コンテナー化された Red Hat Ceph Storage クラスターのコマンドラインインターフェイスを使用して、1 つまたは複数の Ceph OSD を手動で追加できます。
Red Hat は、Ceph OSD を手動で追加する必要がある例外や特定のユースケースがない場合は、ceph-ansible
を使用して Ceph OSD を追加することを推奨します。不明な場合は、Red Hat サポート にお問い合わせください。
前提条件
- コンテナー化環境で実行中の Red Hat Ceph Storage クラスター
- コンテナーノードへの root アクセスがある。
- 既存の OSD ノード。
以下の例は、Red Hat Enterprise Linux 8 で実行しています。Red Hat Enterprise Linux 8 では、podman がデフォルトのサービスとなり、古い docker サービスに置き換えられています。Red Hat Enterprise Linux 7 で実行している場合は、podman を docker に置き換え、指定したコマンドを実行します。
手順
1 つの OSD を作成するには、
lvm prepare
コマンドを実行します。構文
podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume PATH_TO_IMAGE --cluster CLUSTER_NAME lvm prepare --bluestore --data PATH_TO_DEVICE --no-systemd
例
[root@osd ~]# podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume registry.redhat.io/rhceph/rhceph-4-rhel8:latest --cluster ceph lvm prepare --bluestore --data /dev/sdh --no-systemd
この例では、
/dev/sdh
のデータを使用して、単一の Bluestore Ceph OSD を準備します。注記OSD を有効にして起動するには、以下のコマンドを実行します。
例
[root@osd ~]# systemctl enable ceph-osd@4 [root@osd ~]# systemctl start ceph-osd@4
以下の任意の引数を使用することもできます。
- dmcrypt
- 説明
- 基盤となる OSD デバイスの暗号化を有効にします。
- block.db
- 説明
- bluestore block.db 論理ボリュームまたはパーティションへのパス。
- block.wal
- 説明
- bluestore block.wal 論理ボリュームまたはパーティションへのパス。
複数の Ceph OSD を作成するには、
lvm batch
コマンドを実行します。構文
podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume PATH_TO_IMAGE --cluster CLUSTER_NAME lvm batch --bluestore --yes --prepare _PATH_TO_DEVICE PATH_TO_DEVICE --no-systemd
例
[root@osd ~]# podman run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume registry.redhat.io/rhceph/rhceph-4-rhel8:latest --cluster ceph lvm batch --bluestore --yes --prepare /dev/sde /dev/sdf --no-systemd
この例では、
/dev/sde
および/dev/sdf
のデータを使用して、複数の Bluestore Ceph OSD を準備します。以下の任意の引数を使用することもできます。
- dmcrypt
- 説明
- 基盤となる OSD デバイスの暗号化を有効にします。
- db-devices
- 説明
- bluestore block.db 論理ボリュームまたはパーティションへのパス。
- wal-devices
- 説明
- bluestore block.wal 論理ボリュームまたはパーティションへのパス。
1.5.9. Ansible を使用した Ceph OSD の削除
Red Hat Ceph Storage クラスターの容量をスケールダウンしないといけない場合があります。Ansible を使用して Red Hat Ceph Storage クラスターから OSD を削除するには、Playbook の shrink-osd.yml
を実行します。
ストレージクラスターから OSD を削除すると、その OSD に含まれるすべてのデータが破棄されます。
OSD を削除する前に、クラスターにリバランスするのに十分な容量があることを確認します。
配置グループが active+clean
状態にあり、OSD に同じオブジェクトのレプリカやイレイジャーコーディングシャードが含まれない限り、OSD を同時に削除しないでください。不明な場合は、Red Hat サポート にお問い合わせください。
前提条件
- Ansible によりデプロイされた実行中の Red Hat Ceph Storage
- 実行中の Ansible 管理ノード
手順
/usr/share/ceph-ansible/
ディレクトリーに移動します。構文
[user@admin ~]$ cd /usr/share/ceph-ansible
-
Ceph Monitor ノードの
/etc/ceph/
から、削除する OSD が含まれるノードに管理キーリングをコピーします。 Ceph の通常のデプロイメントまたはコンテナー化されたデプロイメント向けに Ansible Playbook を実行します。
構文
ansible-playbook infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=ID -u ANSIBLE_USER_NAME -i hosts
以下を置き換えます。
-
ID
は、OSD ノードの ID に置き換えます。複数の OSD を削除するには、OSD ID をコンマで区切ります。 -
ANSIBLE_USER_NAME
は、Ansible ユーザーの名前に置き換えてください。
例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/shrink-osd.yml -e osd_to_kill=1 -u user -i hosts
-
OSD が正常に削除されていることを確認します。
構文
[root@mon ~]# ceph osd tree
関連情報
- Red Hat Ceph Storage インストールガイド
- Ansible インベントリー設定の詳細は、{storage_product} インストールガイド の Ansible のインベントリーの場所の設定 セクションを参照してください。
1.5.10. コマンドラインインターフェイスを使用した Ceph OSD の削除
ストレージクラスターから OSD を削除するには、以下のステップを実行する必要があります *クラスターマップの更新* 認証キーの削除* OSD の OSD マップからの削除* ceph.conf
ファイルから OSD を削除します。
OSD ノードに複数のドライブがある場合は、削除する OSD ごとにこの手順を繰り返して、それぞれのドライブについて OSD を削除する必要がある場合があります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
-
利用可能な OSD が十分になるようにして、ストレージクラスターが
ほぼ完全
な比率にならないようにしてください。 - OSD ノードへのルートレベルのアクセス。
手順
OSD サービスを無効にし、停止します。
構文
systemctl disable ceph-osd@OSD_ID systemctl stop ceph-osd@OSD_ID
例
[root@osd ~]# systemctl disable ceph-osd@4 [root@osd ~]# systemctl stop ceph-osd@4
OSD が停止したら、
停止
します。ストレージクラスターから OSD を削除します。
構文
ceph osd out OSD_ID
例
[root@osd ~]# ceph osd out 4
重要OSD が削除されると、Ceph は再バランス調整を開始し、データをストレージクラスター内の残りの OSD にコピーします。Red Hat は、次の手順に進む前に、ストレージクラスターが
active+clean
になるまで待つことを推奨します。データの移行を確認するには、以下のコマンドを実行します。構文
[root@mon ~]# ceph -w
CRUSH マップから OSD を削除して、データを受信しないようにします。
構文
ceph osd crush remove OSD_NAME
例
[root@osd ~]# ceph osd crush remove osd.4
注記OSD およびこれを含むバケットを手動で削除するには、CRUSH マップをコンパイルし、デバイス一覧から OSD を削除して、ホストバケットの項目としてデバイスを削除するか、ホストバケットを削除することもできます。CRUSH マップにあり、ホストを削除するには、マップを再コンパイルしてからこれを設定します。詳細は、ストレージ戦略ガイド の CRUSH マップのデコンパイルを参照してください。
OSD 認証キーを削除します。
構文
ceph auth del osd.OSD_ID
例
[root@osd ~]# ceph auth del osd.4
OSD を削除します。
構文
ceph osd rm OSD_ID
例
[root@osd ~]# ceph osd rm 4
ストレージクラスターの設定ファイルを編集します。このファイルのデフォルト名は
/etc/ceph/ceph.conf
です。ファイルの OSD エントリーが存在する場合は削除します。例
[osd.4] host = _HOST_NAME_
-
OSD を手動で追加している場合は、
/etc/fstab
ファイルで OSD への参照を削除します。 更新された設定ファイルを、ストレージクラスター内の他のすべてのノードの
/etc/ceph/
ディレクトリーにコピーします。構文
scp /etc/ceph/CLUSTER_NAME.conf USER_NAME@HOST_NAME:/etc/ceph/
例
[root@osd ~]# scp /etc/ceph/ceph.conf root@node4:/etc/ceph/
1.5.11. コマンドラインインターフェイスを使用した BlueStore データベースディスクの置き換え
BlueStore OSD の内部メタデータが含まれる BlueStore DB デバイス (block.db
) を置き換える場合、Red Hat は Ansible およびコマンドラインインターフェイス (CLI) を使用したすべての OSD の再デプロイをサポートします。破損した block.db
ファイルは、その block.db
ファイルに含まれるすべての OSD に影響を与えます。
BlueStore block.db
ディスクを交換する手順として、各デバイスを順番に out とマークし、データがクラスター全体に複製されるのを待って、OSD を交換し、再度 in とマークします。OSD_ID
を維持し、置き換えられたディスクで新しい block.db
パーティションで OSD を再作成できます。これは簡単な手順ですが、多くのデータ移行が必要になります。
block.db
デバイスに複数の OSD がある場合は、block.db
デバイスの OSD ごとにこの手順を実行します。ceph-volume lvm
リストを実行して、block.db
を表示して関係をブロックします。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- パーティションを持つストレージデバイス。
- すべてのノードへの root レベルのアクセス。
手順
モニターノードで現在の Ceph クラスターのステータスを確認します。
[root@mon ~]# ceph status [root@mon ~]# ceph df
置き換える障害のある OSD を特定します。
[root@mon ~]# ceph osd tree | grep -i down
OSD ノードで OSD サービスを停止し、無効にします。
構文
systemctl disable ceph-osd@OSD_ID systemctl stop ceph-osd@OSD_ID
例
[root@osd1 ~]# systemctl stop ceph-osd@1 [root@osd1 ~]# systemctl disable ceph-osd@1
モニターノードで OSD を
out
に設定します。構文
ceph osd out OSD_ID
例
[root@mon ~]# ceph osd out 1
データが OSD から移行されるまで待機します。
構文
while ! ceph osd safe-to-destroy OSD_ID ; do sleep 60 ; done
例
[root@mon ~]# while ! ceph osd safe-to-destroy 1 ; do sleep 60 ; done
OSD ノードで OSD デーモンを停止します。
構文
systemctl kill ceph-osd@OSD_ID
例
[root@osd1 ~]# systemctl kill ceph-osd@1
この OSD が使用しているデバイスについて書き留めておいてください。
構文
mount | grep /var/lib/ceph/osd/ceph-OSD_ID
例
[root@osd1 ~]# mount | grep /var/lib/ceph/osd/ceph-1
OSD ノードの失敗したドライブパスのマウントポイントのマウントを解除します。
構文
umount /var/lib/ceph/osd/CLUSTER_NAME-OSD_ID
例
[root@osd1 ~] #umount /var/lib/ceph/osd/ceph-1
バックフィルおよびリバランスを回避するために、
noout
およびnorebalance
を設定します。[root@mon ~]# ceph osd set noout [root@mon ~]# ceph osd set norebalance
-
物理ドライブを置き換えます。ノードのハードウェアベンダーのドキュメントを参照してください。新しいドライブを
/dev/
ディレクトリーの下に表示されるように、ドライブパスを書き留めて作業を続行します。 monitor ノード上の OSD を破棄します。
構文
ceph osd destroy OSD_ID --yes-i-really-mean-it
例
[root@mon ~]# ceph osd destroy 1 --yes-i-really-mean-it
重要このステップにより、デバイスの内容を破棄します。デバイスのデータが不要であり、クラスターが正常であることを確認します。
OSD ディスクの論理ボリュームマネージャーを削除します。
構文
lvremove /dev/VOLUME_GROUP/LOGICAL_VOLUME vgremove VOLUME_GROUP pvremove /dev/DEVICE
例
[root@osd1 ~]# lvremove /dev/data-vg1/data-lv1 [root@osd1 ~]# vgremove data-vg1 [root@osd1 ~]# pvremove /dev/sdb
OSD ノードの OSD ディスクを消去します。
構文
ceph-volume lvm zap DEVICE
例
[root@osd1 ~]# ceph-volume lvm zap /dev/sdb
OSD ディスクに lvm を再作成します。
構文
pvcreate /dev/DEVICE vgcreate VOLUME_GROUP /dev/DEVICE lvcreate -l SIZE -n LOGICAL_VOLUME VOLUME_GROUP
例
[root@osd1 ~]# pvcreate /dev/sdb [root@osd1 ~]# vgcreate data-vg1 /dev/sdb [root@osd1 ~]# lvcreate -l 100%FREE -n data-lv1 data-vg1
新しい
block.db
ディスクに lvm を作成します。構文
pvcreate /dev/DEVICE vgcreate VOLUME_GROUP_DATABASE /dev/DEVICE lvcreate -Ll SIZE -n LOGICAL_VOLUME_DATABASE VOLUME_GROUP_DATABASE
例
[root@osd1 ~]# pvcreate /dev/sdb [root@osd1 ~]# vgcreate db-vg1 /dev/sdb [root@osd1 ~]# lvcreate -l 100%FREE -n lv-db1 db-vg1
OSD ノードで OSD を再作成します。
構文
ceph-volume lvm create --bluestore --osd-id OSD_ID --data VOLUME_GROUP/LOGICAL_VOLUME --block.db VOLUME_GROUP_DATABASE/LOGICAL_VOLUME_DATABASE
例
[root@osd1 ~]# ceph-volume lvm create --bluestore --osd-id 1 --data data-vg1/data-lv1 --block.db db-vg1/db-lv1
注記Red Hat は、以前の手順で破棄されたものと同じ OSD_ID を使用することを推奨します。
OSD ノードで OSD サービスを起動し、有効にします。
構文
systemctl start ceph-osd@OSD_ID systemctl enable ceph-osd@OSD_ID
例
[root@osd1 ~]# systemctl start ceph-osd@1 [root@osd1 ~]# systemctl enable ceph-osd@1
CRUSH 階層をチェックして、OSD がクラスターにあることを確認します。
[root@mon ~]# ceph osd tree
noout および norebalance の設定を解除します。
[root@mon ~]# ceph osd unset noout [root@mon ~]# ceph osd unset norebalance
HEALTH_OK
までクラスターステータスをモニターします。[root@mon ~]# watch -n2 ceph -s
関連情報
- 詳細は、Red Hat Ceph Storage インストールガイド の Red Hat Ceph Storage クラスターのインストールガイド の章を参照してください。
1.5.12. データ移行の監視
OSD を CRUSH マップに追加または削除すると、Ceph は配置グループを新規または既存の OSD に移行してデータのリバランスを開始します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- 最近 OSD を追加または削除した。
手順
データの移行を確認するには、以下を実行します。
[root@monitor ~]# ceph -w
-
配置グループのステータスが
active+clean
からactive, some degraded objects
し、最後に移行の完了時にactive+clean
に変わるのを確認します。 -
ユーティリティーを終了するには、
Ctrl + C
を押します。