Ceph问题处理一例

其实我对Ceph一知半解,照着quickstart教程安装上去。但是教程里有个坑爹的不良示范,它在/tmp下创建了osd存储目录。难道不知道系统重启后,/tmp内容都没有了么?结果我的存储节点上,创建了很多无用的osd配置。在写文件时,任何IO都不成功,ceph -s显示:

health HEALTH_WARN 192 pgs stale; 192 pgs stuck stale; 1/4 in osds are down

192个pg全部是stale。正常状态是active+clean。

执行ceph osd tree看到,只有如下2个osd进程正常:

10 0.07999 osd.10 up 1
11 0.07999 osd.11 up 1

其他0-9号进程都是down状态。好吧,哥逐个运行:

ceph osd rm 0
...
ceph osd rm 9

把这些osd都删除了。ceph health一看还是那个鬼样,于是一番google,发现pg可以重建。好在是测试环境,悠悠然重建之:

ceph health detail|awk '{print $2}' > pg.list
cat pg.list |while read LINE;do ceph pg force_create_pg $LINE;done

这个过程比较久。建完再运行ceph health,发现stale pg没有了,但变成了如下:

 health HEALTH_WARN 135 pgs degraded; 135 pgs stuck unclean

192个pg里,有135个是degraded状态,同样写IO不成功。郁闷无比,再次祭起google,没有得到任何有用信息,只看到邮件列表存档上有这么一句:

Are you still seeing this problem?  It looks like you have a bad crushmap.

哥充分发挥久已不用的聪明才智,转动脑经快速思考,crushmap是个神马玩意?

好在ceph -h输出信息量很大,grep一番后,键指如飞,敲入如下命令:

ceph osd getcrushmap -o /tmp/crushmap
crushtool -d /tmp/crushmap

输出里包含:

item osd.0 weight 0.080

item osd.9 weight 0.080
item osd.10 weight 0.080
item osd.11 weight 0.080

osd.0到osd.9不是没用的么?果断删除之。

ceph osd crush rm osd.0
...
ceph osd crush rm osd.9

检查结果:

# ceph health
HEALTH_OK

大功告成。测试写操作也成功。

当然这纯粹是瞎折腾。但ceph自身的健壮性和可维护性,从我先后测试两次的结果来看,也是需要谨慎考量的。

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。