下午收到故障警报,有个ceph节点osd故障。故障osd建立在节点bcache2分区上,但是这分区不见了,bcache2是一个RAID0的前端缓存分区。

通过MegaRAID检查RAID硬盘状态,发现有个RAID0下的硬盘变成外来设备了:

/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL -NoLog|grep "Firmware state"

Firmware state: Unconfigured(good), Spun Up

也就是没有RAID信息列阵不识别这个盘了,也许是高负荷下掉盘又恢复后无法识别了?但起码盘还能识到,也就是说可能盘还没坏,可以尝试RAID导入一下外来配置:

/opt/MegaRAID/MegaCli/MegaCli64 -CfgForeign -import -a0

状态成功更新为 Online, Spun Up,硬盘起来了。但是还是无法启动osd,检查发现bcache2分区还是没出来。fdisk -l查看系统硬盘信息发现发生盘符漂移,原 /dev/sdd 偏移为了 /dev/sdf,bcache2前端缓存无法找到原盘,所以还是没有启动。

这种情况如果先前没有做槽口、盘符绑定就没有办法了,但可以尝试重启一下系统看看盘符会不会恢复回来。ceph宿主服务器重启时候要临时禁用数据平衡:

for i in noout nobackfill norecover noscrub nodeep-scrub;do ceph osd set $i;done

之后运行reboot重启,启动后启动数据平衡:

for i in noout nobackfill norecover noscrub nodeep-scrub;do ceph osd unset $i;done

重启后该盘盘符由 /dev/sdf 恢复为了 /dev/sdd,故障osd正常启动。

10月10日ps: 遇到这种情况还是直接换个盘吧!我修好后过了两天这osd出了个坏的pg,然后今天盘又挂了,估计撑不住多久,得换。

标签: Ceph, Bcache

添加新评论