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 映射中删除存储节点:

    [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 树中,确保 items 列表为空。如果列表不为空,请重新访问第 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. 从堆栈中删除节点并相应地更新计划:

    重要

    如果您在创建 overcloud 时传递任何额外的环境文件,请使用 -e 选项再次传递它们,以避免对 overcloud 进行不必要的更改。有关更多信息,请参阅 Director 安装和使用指南中的修改 overcloud 环境

    $ openstack overcloud node delete /
    --stack <stack-name> /
    --templates /
    -e <other-environment-files> /
    <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
返回顶部