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 -wCeph 集群完成重新平衡后,以
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 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 步。
退出节点,以
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从堆栈中删除节点:
(undercloud)$ openstack overcloud node delete --stack <overcloud> <node>-
将
<overcloud>替换为 overcloud 堆栈的名称或 UUID。 -
将 &
lt;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 节点被替换为新节点。