6.11. 使用 Ceph Orchestrator 替换 OSD

当磁盘出现故障时,您可以替换物理存储设备并重复使用相同的 OSD ID,以避免重新配置 CRUSH map。

您可以使用 --replace 选项替换集群中的 OSD。

注意

如果要替换单个 OSD,请参阅 在特定设备和主机上部署 Ceph OSD。如果要在所有可用设备上部署 OSD,请参阅 在所有可用设备上部署 Ceph OSD

此选项使用 ceph orch rm 命令保留 OSD ID。OSD 不会从 CRUSH 层次结构中永久移除,而是分配有 destroyed 标志。此标志用于确定可在下一个 OSD 部署中重复使用的 OSD ID。destroyed 标记用于决定在下一个 OSD 部署中重复使用哪些 OSD ID。

rm 命令类似,从集群中替换 OSD 涉及两个步骤:

  • 清空集群中的所有放置组(PG)。
  • 从集群中移除 PG-free OSD。

如果您使用 OSD 规格进行部署,则被替换磁盘的 OSD ID 会在插入后马上分配给新添加的磁盘。

注意

在移除 OSD 后,如果 OSD 重新可用时部署 OSD,cephadm 可能会在这些驱动器上自动尝试部署更多 OSD (如果它们与现有 drive组规格匹配)。如果您部署了使用 spec 删除的 OSD,且在移除后不想在驱动器上部署任何新 OSD,请在删除前修改 drivegroup 规格。在部署 OSD 时,如果您使用 --all-available-devices 选项,请将 unmanaged: true 设置为停止它完全获取新驱动器。对于其他部署,修改规格。如需了解更多详细信息 ,请参阅使用高级服务规格部署 Ceph OSD

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 监控、管理器和 OSD 守护进程部署在存储集群中。
  • 替换移除 OSD 的新 OSD 必须在移除 OSD 的同一主机上创建。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 确保转储并保存 OSD 配置的映射,以备将来参考:

    示例

    [ceph: root@node /]# ceph osd metadata -f plain | grep device_paths
    "device_paths": "sde=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:1,sdi=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:1",
    "device_paths": "sde=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:1,sdf=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:1",
    "device_paths": "sdd=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:2,sdg=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:2",
    "device_paths": "sdd=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:2,sdh=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:2",
    "device_paths": "sdd=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:2,sdk=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:2",
    "device_paths": "sdc=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:3,sdl=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:3",
    "device_paths": "sdc=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:3,sdj=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:3",
    "device_paths": "sdc=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:3,sdm=/dev/disk/by-path/pci-0000:03:00.0-scsi-0:1:0:3",
    [.. output omitted ..]

  3. 检查设备和必须从中替换 OSD 的节点:

    示例

    [ceph: root@host01 /]# ceph osd tree

  4. cephadm 受管集群中删除 OSD:

    重要

    如果存储集群关联了 health_warn 或其他错误,请在替换 OSD 前尝试修复任何错误,以避免数据丢失。

    语法

    ceph orch osd rm OSD_ID --replace [--force]

    当存储集群上有持续操作时,可以使用 --force 选项。

    示例

    [ceph: root@host01 /]# ceph orch osd rm 0 --replace

  5. 通过应用以下 OSD 规格来重新创建新 OSD:

    示例

    service_type: osd
    service_id: osd
    placement:
      hosts:
      - myhost
    data_devices:
      paths:
      - /path/to/the/device

  6. 检查 OSD 替换的状态:

    示例

    [ceph: root@host01 /]# ceph orch osd rm status

  7. 停止编配器以应用任何现有 OSD 规格:

    示例

    [ceph: root@node /]# ceph orch pause
    [ceph: root@node /]# ceph orch status
    Backend: cephadm
    Available: Yes
    Paused: Yes

  8. zap 已删除的 OSD 设备:

    示例

    [ceph: root@node /]# ceph orch device zap node.example.com /dev/sdi --force
    zap successful for /dev/sdi on node.example.com
    
    [ceph: root@node /]# ceph orch device zap node.example.com /dev/sdf --force
    zap successful for /dev/sdf on node.example.com

  9. 从暂停模式恢复 Orcestrator

    示例

    [ceph: root@node /]# ceph orch resume

  10. 检查 OSD 替换的状态:

    示例

    [ceph: root@node /]# ceph osd tree
    ID  CLASS  WEIGHT   TYPE NAME      STATUS  REWEIGHT  PRI-AFF
    -1         0.77112  root default
    -3         0.77112      host node
     0    hdd  0.09639          osd.0      up   1.00000  1.00000
     1    hdd  0.09639          osd.1      up   1.00000  1.00000
     2    hdd  0.09639          osd.2      up   1.00000  1.00000
     3    hdd  0.09639          osd.3      up   1.00000  1.00000
     4    hdd  0.09639          osd.4      up   1.00000  1.00000
     5    hdd  0.09639          osd.5      up   1.00000  1.00000
     6    hdd  0.09639          osd.6      up   1.00000  1.00000
     7    hdd  0.09639          osd.7      up   1.00000  1.00000
     [.. output omitted ..]

验证

  • 验证设备的详细信息以及 Ceph OSD 所取代的节点:

    示例

    [ceph: root@host01 /]# ceph osd tree

    您可以看到具有相同 ID 的 OSD,与您在同一主机上运行的 ID 相同。

  • 验证新部署的 OSD 的 db_device 是否为所取代的 db_device:

    示例

    [ceph: root@host01 /]# ceph osd metadata 0 | grep bluefs_db_devices
    "bluefs_db_devices": "nvme0n1",
    
    [ceph: root@host01 /]# ceph osd metadata 1 | grep bluefs_db_devices
    "bluefs_db_devices": "nvme0n1",

其它资源