11.2. 缩减并替换 Ceph Storage 节点
在某些情况下,您可能需要缩减 Ceph 集群,甚至替换 Ceph Storage 节点,例如,如果 Ceph Storage 节点有故障。在这两种情况下,您必须禁用并重新平衡您要从 overcloud 中删除的任何 Ceph Storage 节点,以避免数据丢失。
此流程使用 Red Hat Ceph Storage 管理指南中的 步骤来手动删除 Ceph Storage 节点。有关手动删除 Ceph Storage 节点的更多信息,请参阅 启动、停止和重启容器中运行的 Ceph 守护进程 ,以及使用命令行界面删除 Ceph OSD。
流程
-
以
heat-admin用户身份登录 Controller 节点。directorstack用户具有访问heat-admin用户的 SSH 密钥。 列出 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禁用 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 1Ceph Storage 集群开始重新平衡。等待此过程完成。使用以下命令跟踪状态:
[heat-admin@overcloud-controller-0 ~]$ sudo podman exec ceph-mon-<HOSTNAME> ceph -w在 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停止 OSD。
[heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@0 [heat-admin@overcloud-cephstorage-0 ~]$ sudo systemctl stop ceph-osd@1在登录到 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移除 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从集群中移除该 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从 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 步。
保留节点,并以
stack用户身份返回到 undercloud。[heat-admin@overcloud-controller-0 ~]$ exit [stack@director ~]$禁用 Ceph Storage 节点,以便 director 不会重新置备它。
[stack@director ~]$ openstack baremetal node list [stack@director ~]$ openstack baremetal node maintenance set UUID移除 Ceph Storage 节点需要使用本地模板文件更新 director 中的
overcloud堆栈。首先识别 overcloud 堆栈的 UUID:$ openstack stack list识别您要删除的 Ceph Storage 节点的 UUID:
$ openstack server list从堆栈中删除节点并相应地更新计划:
重要如果您在创建 overcloud 时传递任何额外的环境文件,请使用
-e选项再次传递它们,以避免对 overcloud 进行不必要的更改。有关更多信息,请参阅 Director 安装和使用指南中的修改 overcloud 环境。$ openstack overcloud node delete / --stack <stack-name> / --templates / -e <other-environment-files> / <node_UUID>-
等待堆栈完成更新。使用
heat stack-list --show-nested命令来监控堆栈更新。 将新节点添加到 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 节 “为角色分配节点和类别”。
更新环境文件后,重新部署 overcloud:
$ openstack overcloud deploy --templates -e <ENVIRONMENT_FILE>director 置备新节点,并使用新节点的详细信息更新整个堆栈。
以
heat-admin用户身份登录 Controller 节点,并检查 Ceph Storage 节点的状态:[heat-admin@overcloud-controller-0 ~]$ sudo ceph status-
确认
osdmap部分中的值与您想要的集群中的节点数量匹配。您移除的 Ceph Storage 节点会替换为新节点。