2.4. 替换失败的 OSD 磁盘


替换 OSD 的一般步骤涉及从存储集群中移除 OSD,替换驱动器,然后重新创建 OSD。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 一个失败的磁盘。

流程

  1. 检查存储集群健康状况:

    [root@mon ~]# ceph health
  2. 识别 CRUSH 层次结构中的 OSD 位置:

    [root@mon ~]# ceph osd tree | grep -i down
  3. 在 OSD 节点上,尝试启动 OSD:

    语法

    systemctl start ceph-osd@OSD_ID

    如果命令显示 OSD 已在运行,则可能存在心跳或网络问题。如果您无法重启 OSD,则驱动器可能会失败。

    注意

    如果 OSD 为 down,则 OSD 最终将被标记为 out。这是 Ceph 存储的正常行为。当 OSD 标记为 out 时,具有故障 OSD 数据副本的其他 OSD 将开始回填,以确保存储集群中存在所需的副本数。当存储集群进行回填时,集群会 处于降级状态

  4. 对于 Ceph 的容器化部署,请尝试使用 OSD_ID 启动 OSD 容器:

    语法

    systemctl start ceph-osd@OSD_ID

    如果命令显示 OSD 已在运行,则可能存在心跳或网络问题。如果您无法重启 OSD,则驱动器可能会失败。

    注意

    与 OSD 关联的驱动器可以通过将容器 OSD ID 映射到驱动器来确定。

  5. 检查失败的 OSD 的挂载点:

    注意

    对于 Ceph 的容器化部署,如果 OSD 停机,并且 OSD 驱动器将被卸载,因此您无法运行 df 来检查其挂载点。使用另一种方法来确定 OSD 驱动器是否已失败。例如,在容器节点的驱动器上运行 smartctl

    [root@osd ~]# df -h

    如果无法重启 OSD,您可以检查挂载点。如果挂载点不再显示,您可以尝试重新挂载 OSD 驱动器并重新启动 OSD。如果无法恢复挂载点,则可能有一个失败的 OSD 驱动器。

    使用 smartctl 程序 cab 帮助确定驱动器是否健康:

    语法

    yum install smartmontools
    smartctl -H /dev/BLOCK_DEVICE

    示例

    [root@osd ~]# smartctl -H /dev/sda

    如果驱动器失败,则需要替换它。

  6. 停止 OSD 进程:

    语法

    systemctl stop ceph-osd@OSD_ID

  7. 对于 Ceph 的容器化部署,请停止 OSD 容器:

    语法

    systemctl stop ceph-osd@OSD_ID

  8. 从存储集群中移除 OSD:

    语法

    ceph osd out OSD_ID

  9. 确保失败的 OSD 正在回填:

    [root@osd ~]# ceph -w
  10. 从 CRUSH map 移除 OSD:

    语法

    ceph osd crush remove osd.OSD_ID

    注意

    只有在您永久删除 OSD 且没有重新部署时,才需要执行此步骤。

  11. 删除 OSD 的身份验证密钥:

    语法

    ceph auth del osd.OSD_ID

  12. 验证 OSD 的密钥没有被列出:

    示例

    [root@osd ~]# ceph auth list

  13. 从存储集群中移除 OSD:

    语法

    ceph osd rm osd.OSD_ID

  14. 卸载失败的驱动器路径:

    语法

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

    示例

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

    注意

    对于 Ceph 容器化部署,如果 OSD 关闭容器,则将卸载 OSD 驱动器。在这种情况下,没有卸载,并可以跳过此步骤。

  15. 替换物理驱动器。请参阅硬件厂商的文档。如果驱动器是热交换的,只需将故障驱动器替换为新驱动器。如果驱动器不热交换,且节点包含多个 OSD,则 MIGHT 需要关闭节点来取代物理驱动器。如果需要临时关闭节点,您可以将集群设置为 noout 以防止回填:

    示例

    [root@osd ~]# ceph osd set noout

    替换驱动器后,您使节点及其 OSD 重新在线,删除 noout 设置:

    示例

    [root@osd ~]# ceph osd unset noout

    在继续操作前,等待新驱动器出现在 /dev/ 目录下,并记录下驱动器路径。

  16. 查找 OSD 驱动器并格式化磁盘。
  17. 重新创建 OSD:

  18. 检查 CRUSH 层次结构以确保其准确:

    示例

    [root@osd ~]# ceph osd tree

    如果您对 OSD 在 CRUSH 层次结构中的位置不满意,您可以使用 move 命令移动它:

    语法

    ceph osd crush move BUCKET_TO_MOVE BUCKET_TYPE=PARENT_BUCKET

  19. 验证 OSD 是否在线。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.