Ceph集群中安全删除OSD磁盘指南:Rocky Linux 9.6 + Ceph 17.2.9容器化环境实践
在Ceph分布式存储系统的日常运维中,经常会遇到需要安全地从集群中移除某个OSD(Object Storage Daemon)的场景。这些场景可能包括磁盘故障、硬件升级、容量调整或集群重构等情况。本文将详细介绍在Rocky Linux 9.6环境下使用Ceph 17.2.9 (Quincy)版本时,如何安全地将某个OSD磁盘从容器化集群中退出并进行物理移除。
适用场景
在以下情况下,您可能需要从Ceph集群中安全地删除OSD:
- 磁盘故障:硬盘出现坏道或其他硬件故障,需要更换
- 硬件升级:需要更换更大容量或更高性能的磁盘
- 集群扩容/缩容:根据业务需求调整集群规模
- 节点维护:需要对特定节点进行维护或退役
- 容量优化:重新平衡集群中的数据分布
删除OSD前的准备工作
在开始删除OSD之前,需要进行充分的准备工作以确保操作的安全性。
1. 检查集群状态
# 检查集群整体健康状态
ceph -s
# 查看集群详细健康信息
ceph health detail
# 查看OSD树状结构
ceph osd tree
# 查看数据分布情况
ceph osd df
确保集群处于 HEALTH_OK 或 HEALTH_WARN 状态,避免在集群已有问题时进行OSD删除操作。
2. 确定要删除的OSD
# 列出所有OSD及其状态
ceph osd ls
# 查看特定OSD的详细信息
ceph osd info osd.0
# 查看OSD的使用情况
ceph osd df tree | grep osd.0
# 查看OSD所在的主机
ceph osd tree | grep osd.0
3. 检查数据分布影响
# 查看集群的副本策略
ceph osd pool ls detail
# 检查删除OSD对数据冗余的影响
ceph pg dump | grep -c active+clean
安全删除OSD的详细步骤
步骤1:将OSD标记为out状态
首先需要将目标OSD标记为out状态,让Ceph开始将该OSD上的数据迁移到其他OSD上。
# 将OSD标记为out状态(以osd.0为例)
ceph osd out 0
# 验证OSD状态
ceph osd tree | grep osd.0
当OSD被标记为out后,Ceph会自动开始数据重平衡过程,将该OSD上的数据复制到其他OSD上。
步骤2:监控数据迁移进度
在数据迁移过程中,需要密切关注进度以确保操作顺利完成。
# 查看集群状态,观察数据迁移进度
ceph -s
# 查看PG状态详情
ceph pg stat
# 查看详细的PG状态
ceph pg dump
# 监控特定OSD的使用情况变化
watch -n 5 "ceph osd df | grep osd.0"
等待直到数据迁移完成,集群状态回到 HEALTH_OK 或 HEALTH_WARN 状态。
步骤3:停止OSD容器
数据迁移完成后,需要停止目标OSD的容器进程。
# 查看OSD容器状态
ceph orch ps --daemon-type osd
# 停止特定OSD容器(以osd.0为例)
ceph orch daemon stop osd.0
# 或者停止指定主机上的OSD容器
ceph orch daemon stop osd.node1.hostename.vjpidb
# 验证OSD容器已停止
ceph orch ps --daemon-type osd | grep osd.0
步骤4:从集群中移除OSD
停止容器后,需要将OSD从集群中彻底移除。
# 从CRUSH map中移除OSD
ceph osd crush remove osd.0
# 删除OSD的认证密钥
ceph auth del osd.0
# 最终从OSD map中移除OSD
ceph osd rm 0
# 验证OSD已完全移除
ceph osd tree | grep osd.0 || echo "OSD已成功移除"
步骤5:使用orchestrator删除OSD(推荐方法)
对于使用cephadm/orchestrator管理的容器化集群,推荐使用orchestrator命令来删除OSD:
# 查看OSD守护进程
ceph orch ps --daemon-type osd
# 删除OSD守护进程(以osd.0为例)
ceph orch osd rm 0
# 或者强制删除OSD守护进程
ceph orch daemon rm osd.0 --force
# 查看删除状态
ceph orch osd rm status
# 如果需要取消删除操作
ceph orch osd rm cancel 0
步骤6:清理磁盘设备
最后,需要清理物理磁盘上的数据和元数据,以便磁盘可以重新使用或安全处置。
# 登录到运行OSD的主机
ssh ceph-node-1
# 使用ceph-volume清理设备(如果使用LVM)
cephadm shell -- ceph-volume lvm zap --destroy /dev/sdb
# 或者手动清理磁盘
# 警告:以下操作会彻底清除磁盘上的所有数据
sgdisk --zap-all /dev/sdb
dd if=/dev/zero of=/dev/sdb bs=1M count=100
wipefs -a /dev/sdb
刷新设备状态
有时候,即使已经删除了OSD并清理了磁盘,在ceph orch device ls命令输出中仍然可以看到旧的设备信息。这是因为Orchestrator的设备信息缓存尚未刷新。
# 刷新设备列表缓存
ceph orch device ls --refresh
# 查看刷新后的设备列表
ceph orch device ls
# 只查看特定主机上的可用设备
ceph orch device ls <hostname> --available
使用--refresh参数可以强制刷新设备列表,更新设备的状态信息。这通常需要几秒钟时间来完成。
验证删除结果
完成所有操作后,需要验证OSD确实已从集群中移除:
# 检查集群状态
ceph -s
# 查看OSD列表
ceph osd ls | grep 0 || echo "OSD 0 已成功移除"
# 查看OSD树状结构
ceph osd tree
# 检查PG状态
ceph pg stat
常见问题及解决方案
1. 数据迁移时间过长
如果数据迁移耗时过长,可能是由于以下原因:
# 调整恢复参数加快迁移速度
ceph config set osd osd_max_backfills 8
ceph config set osd osd_recovery_max_active 8
# 监控迁移进度
ceph pg dump | grep -v active+clean
2. OSD无法正常停止
# 强制停止OSD服务
systemctl kill ceph-osd@0
systemctl stop ceph-osd@0
# 检查是否还有相关进程
ps aux | grep ceph-osd
3. 删除后集群状态异常
# 重新平衡集群
ceph osd reweight-by-utilization
# 检查并修复PG状态
ceph pg repair <pg_id>
最佳实践建议
1. 操作时机选择
- 选择业务低峰期进行操作
- 确保集群有足够的冗余能力
- 提前通知相关人员
2. 操作前检查清单
- 集群健康状态检查
- 确定要删除的OSD ID
- 确认数据冗余策略
- 备份重要配置信息
- 准备应急回滚方案
3. 操作后验证
- 集群状态恢复正常
- 数据分布均衡
- 应用程序访问正常
- 监控告警消除
安全注意事项
- 数据安全:确保集群有足够的副本或纠删码保护,避免数据丢失
- 逐步操作:严格按照步骤执行,不要跳过任何环节
- 实时监控:操作过程中持续监控集群状态
- 备份准备:重要操作前做好配置备份
- 权限控制:使用具有足够权限但不过度授权的账户执行操作
总结
安全地从Ceph集群中删除OSD是一个需要谨慎处理的操作。通过遵循本文介绍的步骤,您可以有效地将OSD从集群中移除,同时确保数据安全和集群稳定。关键在于:
- 充分的准备工作和状态检查
- 正确的数据迁移和等待过程
- 完整的清理和验证步骤
- 及时的监控和问题处理
在实际操作中,建议先在测试环境中练习相关步骤,熟悉整个流程后再在生产环境中执行。同时,根据具体的集群规模和业务需求,适当调整相关参数和操作策略。
评论区