2.4. 障害のある OSD ディスクの置き換え

OSD を置き換える一般的な手順には、OSD をストレージクラスターから削除し、ドライブを置き換えてから OSD を再作成する必要があります。

前提条件

  • 実行中の Red Hat Ceph Storage クラスター
  • 障害の発生したディスク。

手順

  1. ストレージクラスターの正常性を確認します。

    [root@mon ~]# ceph health
  2. CRUSH 階層で OSD の場所を特定します。

    [root@mon ~]# ceph osd tree | grep -i down
  3. OSD ノードで、OSD の起動を試行します。

    構文

    systemctl start ceph-osd@OSD_ID

    コマンドが OSD がすでに実行されていることを示す場合、ハートビートまたはネットワークの問題がある可能性があります。OSD を再起動できない場合は、ドライブが失敗する可能性があります。

    注記

    OSD が down すると、OSD は最終的に out とマークされます。Ceph Storage では、これは通常の動作です。OSD が out とマークすると、失敗した OSD のデータのコピーが含まれる他の OSD がバックフィルを開始し、必要な数のコピーがストレージクラスター内に存在していることを確認します。ストレージクラスターがバックフィル状態である間、クラスターの状態は degraded になります。

  4. Ceph のコンテナー化されたデプロイメントでは、OSD に関連付けられたドライブを参照し、OSD コンテナーを起動します。

    構文

    systemctl start ceph-osd@OSD_DRIVE

    コマンドが OSD がすでに実行されていることを示す場合、ハートビートまたはネットワークの問題がある可能性があります。OSD を再起動できない場合は、ドライブが失敗する可能性があります。

    注記

    OSD に関連付けられたドライブは、「コンテナー OSD ID をドライブにマッピング」して判断できます。

  5. 失敗した 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

    ドライブに障害が発生した場合は、それを置き換える必要があります。

  6. OSD プロセスを停止します。

    構文

    systemctl stop ceph-osd@OSD_ID

  7. Ceph のコンテナー化されたデプロイメントの場合には、OSD に関連付けられたドライブを参照して、OSD コンテナーを停止します。

    構文

    systemctl stop ceph-osd@OSD_DRIVE

  8. ストレージクラスターから OSD を削除します。

    構文

    ceph osd out OSD_ID

  9. 失敗した OSD がバックフィルされていることを確認します。

    [root@osd ~]# ceph -w
  10. CRUSH マップから OSD を削除します。

    構文

    ceph osd crush remove osd.OSD_ID

    注記

    この手順は、OSD を永続的に削除し、再デプロイしない場合にのみ必要になります。

  11. OSD の認証キーを削除します。

    構文

    ceph auth del osd.OSD_ID

  12. OSD のキーが一覧表示されていないことを確認します。

    [root@osd ~]# ceph auth list

  13. ストレージクラスターから OSD を削除します。

    構文

    ceph osd rm osd.OSD_ID

  14. 障害が発生したドライブパスのマウントを解除します。

    構文

    umount /var/lib/ceph/osd/CLUSTER_NAME-OSD_ID

    [root@osd ~]# umount /var/lib/ceph/osd/ceph-0

    注記

    Ceph のコンテナー化されたデプロイメントでは、OSD がコンテナーがダウンし、OSD ドライブのマウントが解除されます。この場合、マウント解除するものがないため、この手順はスキップできます。

  15. 物理ドライブを置き換えます。ノードのハードウェアベンダーのドキュメントを参照してください。ドライブのホットスワップが可能である場合は、障害が発生したドライブを新しいドライブに置き換えます。ドライブがホットスワップできず、ノードに複数の OSD が含まれている場合は、物理ドライブを交換するためにノードを停止する必要がある場合があります。ノードを一時的に停止する必要がある場合は、バックフィルを防ぐためにクラスターを noout に設定できます。

    [root@osd ~]# ceph osd set noout

    ドライブを置き換えて、ノードとその OSD をオンラインに戻したら、noout 設定を削除します。

    [root@osd ~]# ceph osd unset noout

    新しいドライブを /dev/ ディレクトリーの下に表示されるように、ドライブパスを書き留めて作業を続行します。

  16. OSD ドライブを特定し、ディスクをフォーマットします。
  17. OSD を再作成します。

  18. CRUSH 階層をチェックして、これが正確であることを確認します。

    [root@osd ~]# ceph osd tree

    CRUSH 階層の OSD の場所が適切でない場合は、move コマンドを使用して移動できます。

    構文

    ceph osd crush move BUCKET_TO_MOVE BUCKET_TYPE=PARENT_BUCKET

  19. OSD がオンラインであることを確認します。