替换或移除存储节点
本文档介绍如何从由 Container Platform 管理的 Rook-Ceph 集群中移除一个存储节点。根据剩余 OSD 是否有足够容量吸收正在移除节点上的数据,您可能需要先添加一个替换节点。
此操作步骤适用于永久移除存储节点及其 OSD 数据。不适用于 Immutable Infrastructure 节点替换。对于由提供商管理持久磁盘、并通过池槽重新挂载的 Immutable Infrastructure worker,请不要将 OSD 标记为 out、删除 CephCluster 节点条目、清理 OSD,或将持久磁盘视为替换磁盘。请改为遵循 Immutable Infrastructure 上部署 Rook-Ceph 的前提条件 以及提供商的节点替换操作步骤。
前提条件
-
除故障节点(如果适用)外,集群所有组件均正常运行。
-
开始之前,请记录旧节点上的磁盘数量以及每个磁盘所属的 device class。
约束与限制
-
在三节点 Ceph 集群中,丢失一个节点已经会降低冗余性。请尽快完成此操作步骤,以尽量缩小风险窗口。
-
在数据重新均衡期间,集群 I/O 性能可能会暂时下降。
-
如果集群处于
HEALTH_ERR,且原因不是即将移除的节点,则不要继续。在这种状态下继续操作可能会进一步降低数据韧性。
操作步骤
检查集群状态和容量
-
标识要移除节点上运行的所有 OSD ID 及其磁盘使用情况。
-
验证整体集群健康状态。
-
检查所有 OSD 的容量。
计算要移除节点上所有 OSD 的 USE 值总和。然后确认其他所有剩余节点上的所有 OSD 的 AVAIL 总和大于该总和。这样可以确保在节点移除后,剩余 OSD 有足够的可用空间吸收数据。
如果剩余容量不足,请先执行下一步添加替换节点。否则,跳到 调整组件部署配置。
添加替换节点(如需要)
如果剩余 OSD 没有足够的可用容量,请先添加替换节点,然后再移除旧节点。
-
进入 Container Platform。
-
使用平台的节点管理功能将替换机器添加为新的集群节点。
-
节点加入集群后,将其添加为存储节点。导航到 Storage Management > Distributed Storage > Device Classes。
-
单击 Add Device,选择新节点,并选择合适的磁盘。如果旧节点在不同的 device class 中有多个磁盘,请针对每个磁盘/device-class 组合重复此步骤,直到所有磁盘都已添加。
-
等待新的 OSD 变为活动状态,并等待数据重新均衡完成。监控进度:
请等待集群恢复为
HEALTH_OK,并且没有 misplaced 或 recovering 的 PG 后再继续。
调整组件部署配置
Rook 管理的 Ceph 守护进程(MON、MGR、MDS)可能会调度到旧节点上。请将旧节点从组件调度中排除,以便 operator 将这些组件重新调度到其他节点。
-
在 Container Platform 中,导航到 Storage Management > Distributed Storage > Storage Components > Component Deployment Configuration。
-
启用节点绑定,并仅选择应保留在集群中的节点(排除要移除的节点)。
-
在继续之前,等待所有 MON、MGR 和 MDS pod 运行在剩余节点上。
将所有 OSD 标记为 out 并等待数据迁移
-
如果 rook-ceph-tools pod 尚未运行,请启用它。
-
进入 tools pod。
-
将旧节点上的每个 OSD 标记为
out。这会指示 Ceph 将这些 OSD 上的所有数据迁移到其余 OSD。对该节点上的每个 OSD ID 重复此操作。
-
监控重新均衡进度,直到集群恢复为
HEALTH_OK,且没有 misplaced 或 recovering 的 PG。在数据迁移完全完成之前,不要继续。 在迁移完成前移除 OSD 将导致数据丢失。
移除旧节点的 OSD
-
编辑 CephCluster 资源以移除旧节点条目。
在
spec.storage.nodes下找到旧节点并删除整个节点条目。保存并退出。 -
删除旧节点上每个 OSD 对应的 OSD deployment。
对该节点上的每个 OSD ID 重复此操作。
-
进入 tools pod,并从集群中永久移除每个 OSD。
在 tools pod 中,对每个 OSD 执行以下命令:
验证集群健康状态
-
确认所有已移除的 OSD 不再出现在集群中。
-
验证集群已恢复到健康状态。
输出应显示
HEALTH_OK,且所有 PG 均处于active+clean状态。