11.2. 缩减和替换 Ceph Storage 节点


在某些情况下,您可能需要缩减 Ceph 集群,甚至替换 Ceph Storage 节点,例如,如果 Ceph Storage 节点出现故障。在这两种情况下,您必须禁用并重新平衡您要从 overcloud 中删除的任何 Ceph Storage 节点,以避免数据丢失。

注意

此流程使用 Red Hat Ceph Storage 管理指南中的 步骤手动删除 Ceph Storage 节点。有关手动删除 Ceph Storage 节点的更多信息,请参阅 启动、停止和重启容器中运行的 Ceph 守护进程 ,并使用命令行界面删除 Ceph OSD

流程

  1. heat-admin 用户身份登录 Controller 节点。director stack 用户具有访问 heat-admin 用户的 SSH 密钥。
  2. 列出 OSD 树,再查找节点的 OSD。例如,您要删除的节点可能包含以下 OSD:

    -2 0.09998     host overcloud-cephstorage-0
    0 0.04999         osd.0                         up  1.00000          1.00000
    1 0.04999         osd.1                         up  1.00000          1.00000
  3. 禁用 Ceph Storage 节点上的 OSD。在本例中,OSD ID 是 0 和 1。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd out 0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd out 1
  4. Ceph Storage 集群开始重新平衡。等待此过程完成。使用以下命令跟踪状态:

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph -w
  5. Ceph 集群完成重新平衡后,以 heat-admin 用户身份登录您要删除的 Ceph Storage 节点,本例中为 overcloud-cephstorage-0,再停止并禁用节点。

    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@0
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@1
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl disable ceph-osd@0
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl disable ceph-osd@1
  6. 停止 OSD。

    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@0
    [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@1
  7. 登录 Controller 节点时,从 CRUSH map 中删除 OSD,以便它们不再接收数据。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd crush remove osd.0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd crush remove osd.1
  8. 移除 OSD 身份验证密钥。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph auth del osd.0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph auth del osd.1
  9. 从集群中移除 OSD。

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd rm 0
    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd rm 1
  10. 从 CRUSH map 中删除存储节点:

    [heat-admin@overcloud-controller-0 ~]$ sudo docker exec ceph-mon-<HOSTNAME> ceph osd crush rm <NODE>
    [heat-admin@overcloud-controller-0 ~]$ sudo ceph osd crush remove <NODE>

    您可以通过搜索 CRUSH 树来确认 CRUSH map 中定义的 <NODE> 名称:

    [heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph osd crush tree | grep overcloud-osd-compute-3 -A 4
                    "name": "overcloud-osd-compute-3",
                    "type": "host",
                    "type_id": 1,
                    "items": []
                },
    [heat-admin@overcloud-controller-0 ~]$

    在 CRUSH 树中,确保项目列表为空。如果列表不为空,请重新查看第 7 步。

  11. 退出节点,以 stack 用户身份返回到 undercloud。

    [heat-admin@overcloud-controller-0 ~]$ exit
    [stack@director ~]$
  12. 禁用 Ceph Storage 节点,以便 director 不会重新置备该节点。

    [stack@director ~]$ openstack baremetal node list
    [stack@director ~]$ openstack baremetal node maintenance set UUID
  13. 移除 Ceph Storage 节点需要利用本地模板文件对 director 中的 overcloud 堆栈进行更新。首先确定 overcloud 堆栈的 UUID:

    $ openstack stack list
  14. 识别您要删除的 Ceph Storage 节点的 UUID:

    $ openstack server list
  15. 从堆栈中删除节点:

    (undercloud)$ openstack overcloud node delete --stack <overcloud> <node>
    • <overcloud> 替换为 overcloud 堆栈的名称或 UUID。
    • 将 & lt;node > 替换为您要删除的节点的主机名或 UUID。
  16. 等待堆栈完成更新。使用 heat stack-list --show-nested 命令监控堆栈更新。
  17. 将新节点添加到 director 节点池中,并将它们部署为 Ceph Storage 节点。使用环境文件的 parameter_defaults 中的 CephStorageCount 参数,本例中为 ~/templates/storage-config.yaml,以在 overcloud 中定义 Ceph Storage 节点总数。

    parameter_defaults:
      ControllerCount: 3
      OvercloudControlFlavor: control
      ComputeCount: 3
      OvercloudComputeFlavor: compute
      CephStorageCount: 3
      OvercloudCephStorageFlavor: ceph-storage
      CephMonCount: 3
      OvercloudCephMonFlavor: ceph-mon
    注意

    有关如何定义每个角色的节点数量的更多信息,请参阅 第 7.1 节 “将节点和类型分配给角色”

  18. 更新环境文件后,重新部署 overcloud:

    $ openstack overcloud deploy --templates -e <ENVIRONMENT_FILE>

    director 置备新节点并使用新节点的详细信息更新整个堆栈。

  19. heat-admin 用户身份登录 Controller 节点,并检查 Ceph Storage 节点的状态:

    [heat-admin@overcloud-controller-0 ~]$ sudo ceph status
  20. 确认 osdmap 部分中的值与您想要的集群中的节点数量匹配。您移除的 Ceph Storage 节点被替换为新节点。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部