5.5. OSD ドライブの交換

Ceph は耐障害性を確保できるように設計されているため、データを損失せずに動作が degraded の状態になっています。そのため、データストレージドライブに障害が発生しても、Ceph は動作します。障害が発生したドライブのコンテキストでは、パフォーマンスが degraded した状態は、他の OSD に保存されているデータの追加コピーが、クラスター内の他の OSD に自動的にバックフィルされることを意味します。ただし、このような場合は、障害の発生した OSD ドライブを交換し、手動で OSD を再作成します。

ドライブに障害が発生すると、Ceph は OSD を down として報告します。

HEALTH_WARN 1/3 in osds are down
osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
注記

Ceph は、ネットワークやパーミッションの問題により OSD を down とマークすることもできます。詳細は、Down OSD を参照してください。

最近のサーバーは、ホットスワップ対応のドライブを搭載しているのが一般的であり、ノードをダウンさせることなく、障害が発生したドライブを抜き取り、新しいドライブと交換することができます。手順全体には、以下のステップが含まれます。

  1. Ceph クラスターから OSD を取り除きます。詳細は、Ceph クラスターからの OSD の削除の手順を参照してください。
  2. ドライブを交換します。詳細は、物理ドライブの置き換え セクションを参照してください。
  3. OSD をクラスターに追加します。詳細は、OSD の Ceph クラスターへの追加の手順を参照してください。

前提条件

  • Ceph Monitor ノードへのルートレベルのアクセス。
  • down になっている OSD を特定します。

    [root@mon ~]# ceph osd tree | grep -i down
    ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY
     0 0.00999         osd.0     down  1.00000          1.00000
  • OSD プロセスが停止していることを確認します。OSD ノードから以下のコマンドを使用します。

    [root@mon ~]# systemctl status ceph-osd@_OSD_NUMBER_
  • OSD_NUMBERdown とマークされた OSD の ID に置き換えます。以下に例を示します。

    [root@mon ~]# systemctl status ceph-osd@osd.0
    ...
       Active: inactive (dead)

    ceph-osd デーモンが実行しているかどうか。down とマークされているが対応する ceph-osd デーモンが実行している OSD のトラブルシューティングに関する詳細は、Down OSDs を参照してください。

手順: Ceph クラスターからの OSD の削除

  1. OSD を out としてマークを付けます。

    [root@mon ~]# ceph osd out osd.OSD_NUMBER

    OSD_NUMBER を、down とマークされている OSD の ID に置き換えます。以下に例を示します。

    [root@mon ~]# ceph osd out osd.0
    marked out osd.0.
    注記

    OSD が down している場合、OSD からハートビートパケットを受信しない場合、Ceph は 600 秒後に自動的に out とマークします。この場合、障害が発生した OSD データのコピーを持つ他の OSD がバックフィルを開始し、クラスター内部に必要な数のコピーが存在するようにします。クラスターがバックフィル状態である間、クラスターの状態は degraded します。

  2. 障害が発生した OSD がバックフィルされていることを確認します。出力には、以下のような情報が含まれます。

    [root@mon ~]# ceph -w | grep backfill
    2017-06-02 04:48:03.403872 mon.0 [INF] pgmap v10293282: 431 pgs: 1 active+undersized+degraded+remapped+backfilling, 28 active+undersized+degraded, 49 active+undersized+degraded+remapped+wait_backfill, 59 stale+active+clean, 294 active+clean; 72347 MB data, 101302 MB used, 1624 GB / 1722 GB avail; 227 kB/s rd, 1358 B/s wr, 12 op/s; 10626/35917 objects degraded (29.585%); 6757/35917 objects misplaced (18.813%); 63500 kB/s, 15 objects/s recovering
    2017-06-02 04:48:04.414397 mon.0 [INF] pgmap v10293283: 431 pgs: 2 active+undersized+degraded+remapped+backfilling, 75 active+undersized+degraded+remapped+wait_backfill, 59 stale+active+clean, 295 active+clean; 72347 MB data, 101398 MB used, 1623 GB / 1722 GB avail; 969 kB/s rd, 6778 B/s wr, 32 op/s; 10626/35917 objects degraded (29.585%); 10580/35917 objects misplaced (29.457%); 125 MB/s, 31 objects/s recovering
    2017-06-02 04:48:00.380063 osd.1 [INF] 0.6f starting backfill to osd.0 from (0'0,0'0] MAX to 2521'166639
    2017-06-02 04:48:00.380139 osd.1 [INF] 0.48 starting backfill to osd.0 from (0'0,0'0] MAX to 2513'43079
    2017-06-02 04:48:00.380260 osd.1 [INF] 0.d starting backfill to osd.0 from (0'0,0'0] MAX to 2513'136847
    2017-06-02 04:48:00.380849 osd.1 [INF] 0.71 starting backfill to osd.0 from (0'0,0'0] MAX to 2331'28496
    2017-06-02 04:48:00.381027 osd.1 [INF] 0.51 starting backfill to osd.0 from (0'0,0'0] MAX to 2513'87544
  3. CRUSH マップから OSD を削除します。

    [root@mon ~]# ceph osd crush remove osd.OSD_NUMBER

    OSD_NUMBER を、down とマークされている OSD の ID に置き換えます。以下に例を示します。

    [root@mon ~]# ceph osd crush remove osd.0
    removed item id 0 name 'osd.0' from crush map
  4. OSD に関連する認証キーを削除します。

    [root@mon ~]# ceph auth del osd.OSD_NUMBER

    OSD_NUMBER を、down とマークされている OSD の ID に置き換えます。以下に例を示します。

    [root@mon ~]# ceph auth del osd.0
    updated
  5. Ceph Storage Cluster から OSD を削除します。

    [root@mon ~]# ceph osd rm osd.OSD_NUMBER

    OSD_NUMBER を、down とマークされている OSD の ID に置き換えます。以下に例を示します。

    [root@mon ~]# ceph osd rm osd.0
    removed osd.0

    OSD を正常に削除した場合は、以下のコマンドの出力には表示されません。

    [root@mon ~]# ceph osd tree
  6. ベアメタルデプロイメントの場合は、障害が発生したドライブをアンマウントします。

    [root@mon ~]# umount /var/lib/ceph/osd/CLUSTER_NAME-OSD_NUMBER

    クラスターの名前と OSD の ID を指定します。以下に例を示します。

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

    ドライブを正常にアンマウントした場合は、次のコマンドの出力には表示されません。

    [root@mon ~]# df -h

手順: 物理ドライブの交換

物理ドライブの交換方法の詳細については、ハードウェアノードのマニュアルを参照してください。

  1. ドライブがホットスワップ可能な場合は、故障したドライブを新しいものと交換します。
  2. ドライブがホットスワップに対応しておらず、ノードに複数の OSD が含まれる場合は、ノード全体をシャットダウンして物理ドライブを交換する必要がある場合があります。クラスターのバックフィルを防ぐことを検討してください。詳細は、Red Hat Ceph Storage トラブルシューティングガイドリバランスの停止および開始 の章を参照してください。
  3. ドライブが /dev/ ディレクトリー配下に表示されたら、ドライブパスを書き留めます。
  4. OSD を手動で追加する必要がある場合には、OSD ドライブを見つけ、ディスクをフォーマットします。

手順: OSD の Ceph クラスターへの追加

  1. OSD を再度追加します。

    1. Ansible を使用してクラスターをデプロイしている場合は、Ceph 管理サーバーから Playbook ceph-ansible を再度実行します。

      • ベアメタルデプロイメント

        Syntax

        ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME

        [user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03

      • コンテナーデプロイメント

        Syntax

        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 を手動で追加した場合には、Red Hat Ceph Storage 4 Operations Guideコマンドラインインターフェイスで Ceph OSD の追加 セクションを参照してください。
  2. CRUSH 階層が正確であることを確認します。

    [root@mon ~]# ceph osd tree
  3. CRUSH 階層の OSD の場所が適切でない場合は、OSD を希望の場所に移動します。

    [root@mon ~]# ceph osd crush move BUCKET_TO_MOVE BUCKET_TYPE=PARENT_BUCKET

    たとえば、sdd:row1 にあるバケットを root バケットに移動するには、以下を実行します。

    [root@mon ~]# ceph osd crush move ssd:row1 root=ssd:root

関連情報