1. Ceph OSD管理基础概念
在开始操作之前,我们先搞清楚几个关键概念。OSD(Object Storage Daemon)是Ceph存储集群的核心组件,每个OSD对应一块物理磁盘,负责数据存储、复制和恢复等工作。简单理解就是:OSD=硬盘+管理程序。
我遇到过不少新手容易混淆的概念是OSD ID和OSD磁盘的关系。举个例子,当你看到osd.0时:
0是OSD的唯一标识符- 它可能对应
/dev/sdb这样的物理磁盘 - 数据实际存储在
/var/lib/ceph/osd/ceph-0/目录下
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安全删除故障OSD的完整流程
2.1 确认OSD状态
首先用这条命令查看集群OSD树状结构:
bash复制ceph osd tree
输出示例:
code复制ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.05849 root default
-3 0.01949 host node1
0 hdd 0.01949 osd.0 up 1.00000 1.00000
重点关注三个状态:
- up/down:进程是否运行
- in/out:是否在CRUSH分布图中
- reweight:数据分布权重(0-1)
2.2 停止OSD进程
如果OSD还在运行,先停止服务:
bash复制systemctl stop ceph-osd@0
这里有个易错点:有些系统用ceph-osd.0而不是@0,可以通过systemctl list-units | grep ceph-osd确认服务名格式。
2.3 将OSD移出集群
分两步操作:
bash复制ceph osd out 0 # 停止数据分配
ceph osd crush remove osd.0 # 从CRUSH map移除
此时集群会开始数据重平衡,建议用ceph -w监控状态,直到HEALTH_OK再继续。
2.4 彻底删除OSD
执行清理操作:
bash复制ceph auth del osd.0 # 删除认证密钥
ceph osd rm 0 # 移除OSD编号
2.5 清理磁盘残留
关键步骤来了!很多人漏掉这步导致磁盘无法重用:
bash复制umount /var/lib/ceph/osd/ceph-0
ceph-volume lvm zap /dev/sdb --destroy
如果遇到"device is busy"错误,试试:
bash复制dmsetup remove_all # 清理设备映射
3. 添加新OSD的三种方法
3.1 使用ceph-deploy(推荐新手)
这是最简化的方式,适合刚接触Ceph的同学:
bash复制# 在新节点准备磁盘
ceph-deploy disk zap node1 /dev/sdb
# 创建OSD(自动处理分区、挂载等)
ceph-deploy osd create --data /dev/sdb node1
实测发现几个实用技巧:
- 添加多个OSD时,建议逐个操作并等待集群恢复
- 使用
--block-db参数可将WAL/DB放在SSD加速性能 - 添加完成后检查
ceph osd perf看延迟是否正常
3.2 手动创建OSD(进阶)
适合需要精细控制的场景:
bash复制# 创建物理卷
pvcreate /dev/sdc
# 创建OSD(Bluestore格式)
ceph-volume lvm create --data /dev/sdc
手动方式的优势在于:
- 可以自定义WAL/DB设备
- 能指定OSD ID实现替换
- 便于调试问题
3.3 批量添加OSD
当需要添加大量磁盘时,可以用这个脚本模板:
bash复制#!/bin/bash
for disk in /dev/sd{b..e}; do
ceph-deploy disk zap node1 $disk
ceph-deploy osd create --data $disk node1
done
4. 常见问题排查指南
4.1 OSD无法删除
现象:执行ceph osd rm时报错"OSD exists in crush map"
解决方案:
- 确认执行过
ceph osd crush remove - 检查是否有残留PG:
bash复制
ceph pg dump | grep 0.
4.2 新OSD无法加入
现象:OSD状态一直为down
排查步骤:
- 查看日志:
bash复制
journalctl -u ceph-osd@0 -n 50 - 检查网络连通性
- 确认磁盘权限正确
4.3 数据均衡慢
优化建议:
bash复制# 临时降低恢复速度
ceph osd set norebalance
ceph osd set nobackfill
# 完成后恢复
ceph osd unset norebalance
5. 生产环境最佳实践
根据我在多个集群的运维经验,总结几个关键点:
-
删除OSD前:
- 确保集群不是
near full状态 - 先降低权重等待数据迁移完成
- 在业务低峰期操作
- 确保集群不是
-
添加OSD时:
- 不同批次硬盘分开添加
- 监控
ceph -s的backfill状态 - 建议使用
noout标记防止意外
-
硬件建议:
- 同一批OSD使用相同型号磁盘
- 日志盘建议用SSD
- 预留10%空间应对突发写入
