2.4. 障害のある OSD ディスクの置き換え
OSD を置き換える一般的な手順には、OSD をストレージクラスターから削除し、ドライブを置き換えてから OSD を再作成する必要があります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- 障害の発生したディスク。
手順
ストレージクラスターの正常性を確認します。
[root@mon ~]# ceph health
CRUSH 階層で OSD の場所を特定します。
[root@mon ~]# ceph osd tree | grep -i down
OSD ノードで、OSD の起動を試行します。
構文
systemctl start ceph-osd@OSD_ID
コマンドが OSD がすでに実行されていることを示す場合、ハートビートまたはネットワークの問題がある可能性があります。OSD を再起動できない場合は、ドライブが失敗する可能性があります。
注記OSD が
down
すると、OSD は最終的にout
とマークされます。Ceph Storage では、これは通常の動作です。OSD がout
とマークすると、失敗した OSD のデータのコピーが含まれる他の OSD がバックフィルを開始し、必要な数のコピーがストレージクラスター内に存在していることを確認します。ストレージクラスターがバックフィル状態である間、クラスターの状態はdegraded
になります。Ceph のコンテナー化されたデプロイメントでは、OSD_ID で OSD コンテナーの起動してみてください。
構文
systemctl start ceph-osd@OSD_ID
コマンドが OSD がすでに実行されていることを示す場合、ハートビートまたはネットワークの問題がある可能性があります。OSD を再起動できない場合は、ドライブが失敗する可能性があります。
注記OSD に関連付けられたドライブは、コンテナー OSD ID をドライブにマッピング して判断できます。
失敗した OSD のマウントポイントを確認します。
注記Ceph のコンテナー化されたデプロイメントでは、OSD がダウンし、OSD ドライブのマウントが解除されるため、
df
を実行してマウントポイントを確認することはできません。別の方法を使用して、OSD ドライブが失敗したかどうかを判別します。たとえば、コンテナーノードからドライブでsmartctl
を実行します。[root@osd ~]# df -h
OSD を再起動できない場合は、マウントポイントを確認できます。マウントポイントが表示されない場合は、OSD ドライブを再マウントして OSD を再起動することができます。マウントポイントを復元できない場合は、OSD ドライブが失敗している可能性があります。
smartctl
ユーティリティー cab を使用して、ドライブが正常かどうかを確認します。構文
yum install smartmontools smartctl -H /dev/BLOCK_DEVICE
例
[root@osd ~]# smartctl -H /dev/sda
ドライブに障害が発生した場合は、それを置き換える必要があります。
OSD プロセスを停止します。
構文
systemctl stop ceph-osd@OSD_ID
Ceph のコンテナー化されたデプロイメントの場合は、OSD コンテナーを停止します。
構文
systemctl stop ceph-osd@OSD_ID
ストレージクラスターから OSD を削除します。
構文
ceph osd out OSD_ID
失敗した OSD がバックフィルされていることを確認します。
[root@osd ~]# ceph -w
CRUSH マップから OSD を削除します。
構文
ceph osd crush remove osd.OSD_ID
注記この手順は、OSD を永続的に削除し、再デプロイしない場合にのみ必要になります。
OSD の認証キーを削除します。
構文
ceph auth del osd.OSD_ID
OSD のキーがリスト表示されていないことを確認します。
例
[root@osd ~]# ceph auth list
ストレージクラスターから OSD を削除します。
構文
ceph osd rm osd.OSD_ID
障害が発生したドライブパスのマウントを解除します。
構文
umount /var/lib/ceph/osd/CLUSTER_NAME-OSD_ID
例
[root@osd ~]# umount /var/lib/ceph/osd/ceph-0
注記Ceph のコンテナー化されたデプロイメントでは、OSD がコンテナーがダウンし、OSD ドライブのマウントが解除されます。この場合、マウント解除するものがないため、この手順はスキップできます。
物理ドライブを置き換えます。ノードのハードウェアベンダーのドキュメントを参照してください。ドライブのホットスワップが可能である場合は、障害が発生したドライブを新しいドライブに置き換えます。ドライブがホットスワップできず、ノードに複数の OSD が含まれている場合は、物理ドライブを交換するためにノードを停止する必要がある場合があります。ノードを一時的に停止する必要がある場合は、バックフィルを防ぐためにクラスターを
noout
に設定できます。例
[root@osd ~]# ceph osd set noout
ドライブを置き換えて、ノードとその OSD をオンラインに戻したら、
noout
設定を削除します。例
[root@osd ~]# ceph osd unset noout
新しいドライブを
/dev/
ディレクトリーの下に表示されるように、ドライブパスを書き留めて作業を続行します。- OSD ドライブを特定し、ディスクをフォーマットします。
OSD を再作成します。
- Ceph Ansible の使用
- コマンドラインインターフェイス の使用
CRUSH 階層をチェックして、これが正確であることを確認します。
例
[root@osd ~]# ceph osd tree
CRUSH 階層の OSD の場所が適切でない場合は、
move
コマンドを使用して移動できます。構文
ceph osd crush move BUCKET_TO_MOVE BUCKET_TYPE=PARENT_BUCKET
- OSD がオンラインであることを確認します。