1.3.10. コマンドラインインターフェースを使用した BlueStore データベースディスクの置き換え

BlueStore OSD のデータベースパーティションが含まれる BlueStore の block.db ディスクを置き換える場合、Red Hat は Ansible を使用したすべての 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 レベルのアクセス。

手順

  1. モニターノードで現在の Ceph クラスターのステータスを確認します。

    [root@mon ~]# ceph status
    [root@mon ~]# ceph df
  2. 置き換える障害のある OSD を特定します。

    [root@mon ~]# ceph osd tree | grep -i down
  3. 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

  4. モニターノードで OSD を out に設定します。

    構文

    ceph osd out OSD_ID

    [root@mon ~]# ceph osd out 1

  5. データが 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

  6. OSD ノードで OSD デーモンを停止します。

    構文

    systemctl kill ceph-osd@OSD_ID

    [root@osd1 ~]# systemctl kill ceph-osd@1

  7. この OSD が使用しているデバイスについて書き留めておいてください。

    構文

    mount | grep /var/lib/ceph/osd/ceph-OSD_ID

    [root@osd1 ~]# mount | grep /var/lib/ceph/osd/ceph-1

  8. OSD ノードの失敗したドライブパスのマウントポイントのマウントを解除します。

    構文

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

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

  9. バックフィルおよびリバランスを回避するために、noout および norebalance を設定します。

    [root@mon ~]# ceph osd set noout
    [root@mon ~]# ceph osd set norebalance
  10. 物理ドライブを置き換えます。ノードのハードウェアベンダーのドキュメントを参照してください。新しいドライブを /dev/ ディレクトリーの下に表示されるように、ドライブパスを書き留めて作業を続行します。
  11. monitor ノード上の OSD を破棄します。

    構文

    ceph osd destroy OSD_ID --yes-i-really-mean-it

    [root@mon ~]# ceph osd destroy 1 --yes-i-really-mean-it

    重要

    このステップにより、デバイスの内容を破棄します。デバイスのデータが不要であり、クラスターが正常であることを確認します。

  12. 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

  13. OSD ノードの OSD ディスクを消去します。

    構文

    ceph-volume lvm zap DEVICE

    [root@osd1 ~]# ceph-volume lvm zap /dev/sdb

  14. 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

  15. 新しい 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 ~]# db-vg1 vgdata /dev/sdb
    [root@osd1 ~]# lvcreate -l 100%FREE -n lv-db1 vg-db1

  16. 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 を使用することを推奨します。

  17. 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

  18. CRUSH 階層をチェックして、OSD がクラスターにあることを確認します。

    [root@mon ~]# ceph osd tree
  19. noout および norebalance の設定を解除します。

    [root@mon ~]# ceph osd unset noout
    [root@mon ~]# ceph osd unset norebalance
  20. HEALTH_OK までクラスターステータスをモニターします。

    [root@mon ~]# watch -n2 ceph -s

関連情報