9.8.5. 使用整个节点替换方法从 FileStore 迁移到 BlueStore

通过将每个存储的数据副本从 FileStore 迁移到 BlueStore,可以逐个节点执行。此迁移可以使用存储集群中的备用节点完成,或者有足够的可用空间从存储集群中清空整个节点,以便将其用作备用节点。理想情况下,节点必须与您要迁移的其他节点大致相同。

前提条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 访问节点。
  • 没有数据的空节点。

流程

  • 将下面的变量 NEWNODE 替换为新节点名称。
  • 将以下变量 EXISTING_NODE_TO_CONVERT 替换为存储集群中已存在的节点名称。
  • 将下列变量 OSD_ID 替换为 OSD 标识号。

    1. 使用不在存储集群中的新节点。对于在存储集群中使用现有节点,请跳至第 3 步。

      1. 将节点添加到 CRUSH 层次结构中:

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

        不要将它附加到 root 用户。

      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 map 中的即时维护器。

    4. 跳至第 8 步。
    5. 为所有设备置备新的 BlueStore OSD:

      [root@mon ~]# ceph-volume lvm create --bluestore --data /dev/DEVICE
    6. 验证 OSD 是否加入集群:

      [root@mon ~]# ceph osd tree

      您应当会在节点名称下看到新节点名称及所有 OSD,但 不得将 节点嵌套在层次结构中任何其他节点。

      Example

      [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,停止并卸载 now-empty 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
      重要

      成为 EXTREMELY CAREFUL,因为这会销毁设备的内容。在继续之前,不需要在该设备上使用这些数据,即存储集群处于健康状态。

      注意

      如果 OSD 被加密,则卸载 osd-lockbox 并在使用 dmsetup 删除 OSD 前删除加密。

      注意

      如果 OSD 包含逻辑卷,则在 ceph-volume lvm zap 命令中使用 --destroy 选项。

    12. 使用 now-empty 旧节点作为新节点,再重复这个过程。