CEPH更换硬盘
一、确认故障硬盘信息
查看OSD状态
ceph osd tree
通过输出确定故障硬盘对应的OSD ID(例如osd.5)。
定位故障硬盘的LVM信息
查看OSD对应的VG和PV:
pvs
vgs
lvs
确认数据PV和日志PV的关联关系(例如数据PV为/dev/sdb1,日志PV为/dev/sdc1)。
二、从集群中移除故障OSD
标记OSD为out状态
ceph osd out <OSD_ID>
此操作会将OSD权重设为0,停止接收新数据。
从CRUSH图中移除OSD
ceph osd crush remove <OSD_ID>
删除OSD认证密钥
ceph auth del osd.<OSD_ID>
从集群中彻底删除OSD
ceph osd rm <OSD_ID>
注意:若需保留OSD ID(例如后续替换),可使用ceph osd destroy <OSD_ID>;若无需保留,使用
ceph osd purge <OSD_ID>
三、处理旧硬盘的LVM
卸载OSD挂载目录
umount /var/lib/ceph/osd/ceph-<OSD_ID>
删除故障OSD的VG
vgremove <VG_NAME>
示例:vgremove ceph-
此操作会释放对应的PV(数据PV和日志PV)。
四、更换新硬盘并初始化
物理更换硬盘
拔出故障硬盘,插入新硬盘。
分区与格式化
数据盘:创建单个分区(例如/dev/sde1),使用mkfs.ext4或mkfs.xfs格式化。
日志盘:若日志位于独立分区(如SSD),需创建分区并格式化。
清除旧数据(可选)
使用
wipefs -a /dev/sde或dd if=/dev/zero of=/dev/sde bs=512K count=1
擦除旧分区表和数据。
五、创建新OSD并加入集群
准备OSD(使用LVM)
ceph-deploy osd create --filestore --data /dev/sde1 --journal /dev/sdc1 <NODE_NAME>
参数说明:
--data:数据PV设备(新硬盘分区)。
--journal:日志PV设备(原有或新日志分区)。
若使用Bluestore,需替换为--bluestore参数。
激活OSD
ceph-deploy osd activate <NODE_NAME>:<OSD_DEVICE>
示例:ceph-deploy osd activate node3:/dev/sde1
手动添加到CRUSH(若自动未生效)
ceph osd crush add osd.<NEW_OSD_ID> <WEIGHT> root=default
权重:根据硬盘容量设置(例如1TB=1.0)。
六、验证与监控
检查OSD状态
ceph osd tree
确认新OSD状态为in且权重正常。
监控数据平衡
ceph -w
ceph osd df
观察数据迁移进度,直至集群状态为HEALTH_OK。
测试读写
在新OSD上创建测试文件并验证数据一致性。
七、注意事项
禁用数据迁移(可选)
在更换过程中,可临时禁用回填和恢复操作:
for i in noout nobackfill norecover; do ceph osd set $ i; done
操作完成后解除禁用:
for i in noout nobackfill norecover; do ceph osd unset $ i; done
LVM配置检查
确保新OSD的PV和VG名称与原有配置一致,避免Crush规则冲突。
日志盘管理
若日志盘为共享SSD,需确认新OSD的日志分区与原有配置匹配。