9.8. オブジェクトストアを FileStore から BlueStore に移行する方法

ストレージ管理者は、従来のオブジェクトストアである FileStore から新しいオブジェクトストアである BlueStore に移行できます。

9.8.1. 前提条件

  • 正常かつ稼働中の Red Hat Ceph Storage クラスター

9.8.2. FileStore から BlueStore への移行

BlueStore は従来の FileStore と比較すると、パフォーマンスと堅牢性が向上しています。1 つの Red Hat Ceph Storage クラスターには、FileStore デバイスと BlueStore デバイスの両方の組み合わせを含めることができます。

個々の OSD を変換することは、その場ではできませんし、単独でもできません。変換プロセスは、ストレージクラスターの通常のレプリケーションおよびヒーリングプロセス、または古い (FileStore) デバイスから新しい (BlueStore) デバイスに OSD コンテンツをコピーするツールや戦略のいずれかに依存します。FileStore から BlueStore に移行する方法は 2 つあります。

最初の操作

1 つ目は、各デバイスを順番に out とマークし、ストレージクラスター全体でデータの複製を待って、OSD を再プロビジョニングしてから再度 in のマークに戻すことです。以下は、この方法のメリットとデメリットです。

利点
  • 簡単です。
  • デバイスごとに実行できます。
  • 予備のデバイスやノードは必要ありません。
デメリット
  • ネットワーク上のデータのコピーは 2 回行われます。

    注記

    1 つのコピーをストレージクラスター内の他の OSD にコピーすることで、希望する数のレプリカを維持し、さらにもう 1 つのコピーを再プロビジョニングされた BlueStore OSD に戻すことができます。

2 つ目の方法

2 つ目は、ノード全体を置き換えます。データがない空のノードが必要です。

これを実行するには 2 つの方法を使用できます。*ストレージクラスターの一部ではない新規の空のノードから開始します。* ストレージクラスターの既存ノードからデータをオフロードする

利点
  • データは一度だけネットワーク上でコピーされます。
  • ノードの OSD 全体を一度に変換します。
  • 一度に複数のノードを並行して変換できます。
  • 各ノードでは、予備のデバイスは必要ありません。
デメリット
  • スペアノードが必要です。
  • ノード全体の OSD は、データを一度に移行します。これは、クラスター全体のパフォーマンスに影響を与える可能性が高くなります。
  • 移行されたデータはすべて、ネットワーク上で 1 つの完全ホップを行います。

9.8.3. Ansible を使用した FileStore から BlueStore への移行

Ansible を使用して FileStore から BlueStore に移行すると、ノード上のすべての OSD が縮小され、再デプロイされます。Ansible Playbook は、移行を開始する前に容量チェックを実行します。ceph-volume ユーティリティーは OSD を再デプロイします。

前提条件

  • 正常かつ稼働中の Red Hat Ceph Storage 4 クラスター
  • Ansible アプリケーションで使用する ansible ユーザーアカウント。

手順

  1. Ansible 管理ノードで ansible ユーザーとしてログインします。
  2. group_vars/osd.yml ファイルを編集し、以下のオプションを追加し、設定します。

    nb_retry_wait_osd_up: 50
    delay_wait_osd_up: 30
  3. 以下の Ansible Playbook を実行します。

    構文

    ansible-playbook infrastructure-playbooks/filestore-to-bluestore.yml --limit OSD_NODE_TO_MIGRATE

    [ansible@admin ~]$ ansible-playbook infrastructure-playbooks/filestore-to-bluestore.yml --limit osd1

    警告

    Ceph 設定ファイルで osd_crush_update_on_start = False を明示的に設定すると、変換は失敗します。別の ID で新しい OSD を作成し、それを CRUSH ルールに置き忘れます。また、古い OSD データディレクトリーはクリアされません。

  4. ストレージクラスターの次の OSD ノードで開始する前に、移行が完了するまで待ちます。

9.8.4. マークアウトと置換のアプローチを使用して FileStore から BlueStore への移行

FileStore から BlueStore に移行する最も簡単な方法は、各デバイスを順次マークアウトし、ストレージクラスター全体でデータが複製されるのを待ち、OSD を再プロビジョニングし、再度 in のマークに戻すことです。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • ノードへの root アクセス。

手順

以下の変数 OSD_ID を ODS の識別番号に置き換えます。

  1. 置き換える FileStore OSD を検索します。

    1. OSD 識別番号を取得します。

      [root@ceph-client ~]# ceph osd tree
    2. OSD が FileStore または BlueStore を使用しているかどうかを特定します。

      構文

      ceph osd metadata OSD_ID | grep osd_objectstore

      [root@ceph-client ~]# ceph osd metadata 0 | grep osd_objectstore
          "osd_objectstore": "filestore",

    3. FileStore デバイスと BlueStore デバイス数の現在の数を表示するには、次のコマンドを実行します。

      [root@ceph-client ~]# ceph osd count-metadata osd_objectstore
  2. FileStore OSD にマークが付けられます。

    ceph osd out OSD_ID
  3. データが OSD から移行されるまで待機します。

    while ! ceph osd safe-to-destroy OSD_ID ; do sleep 60 ; done
  4. OSD を停止します。

    systemctl stop ceph-osd@OSD_ID
  5. この OSD が使用しているデバイスを取得します。

    mount | grep /var/lib/ceph/osd/ceph-OSD_ID
  6. OSD をアンマウントします。

    umount /var/lib/ceph/osd/ceph-OSD_ID
  7. 手順 5 からの値を DEVICE として使用して、OSD データを破棄します。

    ceph-volume lvm zap DEVICE
    重要

    デバイスの内容が破壊されますので、非常に注意 してください。先に進む前に、デバイスのデータが不要で、ストレージクラスターが正常であることを確認してください。

    注記

    OSD が暗号化されている場合は、dmsetup remove を使用して OSD をザッピングする前に、osd-lockbox をアンマウントして暗号化を削除します。

    注記

    OSD に論理ボリュームが含まれている場合は、ceph-volume lvm zap コマンドで --destroy オプションを使用します。

  8. OSD が破棄されていることをストレージクラスターに認識させます。

    [root@ceph-client ~]# ceph osd destroy OSD_ID --yes-i-really-mean-it
  9. ステップ 5 の DEVICE と、同じ OSD_ID を使用して、OSD を BlueStore OSD として再プロビジョニングします。

    [root@ceph-client ~]# ceph-volume lvm create --bluestore --data DEVICE --osd-id OSD_ID
  10. この手順を繰り返します。

    注記

    新規 BlueStore OSD の再入力は、OSD を破棄する前にストレージクラスターが HEALTH_OK であることを確認していれば、次の FileStore OSD のドレイン (枯渇) と同時に発生する可能性があります。これを行わないと、データの冗長性が軽減され、リスクが高まるか、データ損失の可能性が高まります。

9.8.5. ノード全体の置き換え方法を使用した FileStore から BlueStore への移行

FileStore から BlueStore への移行は、保存されているデータの各コピーを一度だけ転送することで、ノード単位で行うことができます。このマイグレーションは、ストレージクラスター内に予備のノードがある場合や、予備として使用するためにストレージクラスターからノード全体を退避させるのに十分な空き領域を持っている場合に行うことができます。理想的には、移行する他のノードとほぼ同じ容量のノードでなければなりません。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスターがある。
  • ノードへの root アクセス。
  • データがない空のノード。

手順

  • 以下の変数 NEWNODE を、新しいノード名に置き換えます。
  • 以下の変数 EXISTING_NODE_TO_CONVERT を、ストレージクラスターにすでに存在するノード名に置き換えます。
  • 以下の変数 OSD_ID を、OSD 識別番号に置き換えます。

    1. ストレージクラスターにない新規ノードを使用する。ストレージクラスターに存在するノードを使用するには、ステップ 3 に進みます。

      1. ノードを CRUSH 階層に追加します。

        [root@mon ~]# ceph osd crush add-bucket NEWNODE node
        重要

        ルートには接続しないでください。

      2. Ceph ソフトウェアパッケージをインストールします。

        [root@mon ~]# yum install ceph-osd
        注記

        Ceph 設定ファイル (デフォルトでは /etc/ceph/ceph.conf) およびキーリングを新しいノードにコピーします。

    2. ステップ 5 に進みます。
    3. ストレージクラスターで既存のノードを使用している場合は、以下のコマンドを使用します。

      [root@mon ~]# ceph osd crush unlink EXISTING_NODE_TO_CONVERT default
      注記

      ここでの default は、CRUSH マップの直系先祖です。

    4. ステップ 8 に進みます。
    5. すべてのデバイスに対して新しい BlueStore OSD をプロビジョニングします。

      [root@mon ~]# ceph-volume lvm create --bluestore --data /dev/DEVICE
    6. OSD がクラスターに参加していることを確認します。

      [root@mon ~]# ceph osd tree

      新しいノード名の下にすべての OSD が表示されるはずですが、階層内の他のノードの下に入れ子に なってはいけません

      [root@mon ~]# ceph osd tree
      ID CLASS WEIGHT  TYPE NAME     STATUS REWEIGHT PRI-AFF
      -5             0 node newnode
      10   ssd 1.00000     osd.10        up  1.00000 1.00000
      11   ssd 1.00000     osd.11        up  1.00000 1.00000
      12   ssd 1.00000     osd.12        up  1.00000 1.00000
      -1       3.00000 root default
      -2       3.00000     node oldnode1
      0   ssd 1.00000         osd.0     up  1.00000 1.00000
      1   ssd 1.00000         osd.1     up  1.00000 1.00000
      2   ssd 1.00000         osd.2     up  1.00000 1.00000

    7. 新規ノードを、クラスター内の古いノードの位置にスワップします。

      [root@mon ~]# ceph osd crush swap-bucket NEWNODE EXISTING_NODE_TO_CONVERT

      この時点で、EXISTING_NODE_TO_CONVERT のすべてのデータは NEWNODE 上の OSD への移行を開始します。

      注記

      古いノードと新規ノードの合計容量に違いがある場合は、ストレージクラスター内の他のノードへのデータ移行も表示されますが、ノードのサイズが同じであれば、これは比較的少ないデータ量になります。

    8. データの移行が完了するまで待ちます。

      while ! ceph osd safe-to-destroy $(ceph osd ls-tree EXISTING_NODE_TO_CONVERT); do sleep 60 ; done
    9. EXISTING_NODE_TO_CONVERT にログインし、現時点で空の EXISTING_NODE_TO_CONVERT にある古い OSD をすべて停止およびアンマウントします。

      [root@mon ~]# systemctl stop ceph-osd@OSD_ID
      [root@mon ~]# umount /var/lib/ceph/osd/ceph-OSD_ID
    10. 古い OSD を破棄してパージします。

      for osd in ceph osd ls-tree EXISTING_NODE_TO_CONVERT; do ceph osd purge $osd --yes-i-really-mean-it ; done
    11. 古い OSD デバイスを削除します。これには、手動で消去するデバイスを特定する必要があります。各デバイスに対して、次のコマンドを実行します。

      [root@mon ~]# ceph-volume lvm zap DEVICE
      重要

      デバイスの内容が破壊されますので、非常に注意 してください。次のステップに進む前に、デバイスのデータが不要で、ストレージクラスターが正常であることを確認してください。

      注記

      OSD が暗号化されている場合は、dmsetup remove を使用して OSD をザッピングする前に、osd-lockbox をアンマウントして暗号化を削除します。

      注記

      OSD に論理ボリュームが含まれている場合は、ceph-volume lvm zap コマンドで --destroy オプションを使用します。

    12. 現在空になっている古いノードを新しいノードとして使用し、処理を繰り返します。