在开始操作之前,我们先搞清楚几个关键概念。OSD(Object Storage Daemon)是Ceph存储集群的核心组件,每个OSD对应一块物理磁盘,负责数据存储、复制和恢复等工作。简单理解就是:OSD=硬盘+管理程序。
我遇到过不少新手容易混淆的概念是OSD ID和OSD磁盘的关系。举个例子,当你看到osd.0时:
0是OSD的唯一标识符/dev/sdb这样的物理磁盘/var/lib/ceph/osd/ceph-0/目录下首先用这条命令查看集群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
重点关注三个状态:
如果OSD还在运行,先停止服务:
bash复制systemctl stop ceph-osd@0
这里有个易错点:有些系统用ceph-osd.0而不是@0,可以通过systemctl list-units | grep ceph-osd确认服务名格式。
分两步操作:
bash复制ceph osd out 0 # 停止数据分配
ceph osd crush remove osd.0 # 从CRUSH map移除
此时集群会开始数据重平衡,建议用ceph -w监控状态,直到HEALTH_OK再继续。
执行清理操作:
bash复制ceph auth del osd.0 # 删除认证密钥
ceph osd rm 0 # 移除OSD编号
关键步骤来了!很多人漏掉这步导致磁盘无法重用:
bash复制umount /var/lib/ceph/osd/ceph-0
ceph-volume lvm zap /dev/sdb --destroy
如果遇到"device is busy"错误,试试:
bash复制dmsetup remove_all # 清理设备映射
这是最简化的方式,适合刚接触Ceph的同学:
bash复制# 在新节点准备磁盘
ceph-deploy disk zap node1 /dev/sdb
# 创建OSD(自动处理分区、挂载等)
ceph-deploy osd create --data /dev/sdb node1
实测发现几个实用技巧:
--block-db参数可将WAL/DB放在SSD加速性能ceph osd perf看延迟是否正常适合需要精细控制的场景:
bash复制# 创建物理卷
pvcreate /dev/sdc
# 创建OSD(Bluestore格式)
ceph-volume lvm create --data /dev/sdc
手动方式的优势在于:
当需要添加大量磁盘时,可以用这个脚本模板:
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
现象:执行ceph osd rm时报错"OSD exists in crush map"
解决方案:
ceph osd crush removebash复制ceph pg dump | grep 0.
现象:OSD状态一直为down
排查步骤:
bash复制journalctl -u ceph-osd@0 -n 50
优化建议:
bash复制# 临时降低恢复速度
ceph osd set norebalance
ceph osd set nobackfill
# 完成后恢复
ceph osd unset norebalance
根据我在多个集群的运维经验,总结几个关键点:
删除OSD前:
near full状态添加OSD时:
ceph -s的backfill状态noout标记防止意外硬件建议: