上一篇部署的时候,因为没有把/var/lib/ceph/osd/ceph-x的所属权限改成ceph,所以ceph-osd -i 0 --mkfs --mkkey初始化osd的时候出错,即使/etc/init.d/ceph start osd.0看到osd.0的状态已经是running了,但是ceph osd tree 看到的osd都是down的状态。
其实刚开始我是不知道问题出在所属权限的,部署一度陷入僵局。哎,就这么巧,测试小哥的一个环境遇到了换盘之后一个osd状态一直是down,正好和我遇到的问题是如此相似,说实话还是熟悉的项目的日志好看,看了一会儿,我发现是osd重建脚本损坏了(是的,一个shell脚本格式是dos导致的)。这个小bug提醒了我,我赶紧看了下需要重建的osd目录下为空,果然是osd初始化没成功,那我那个环境osd起不来会不会也是初始化错误,虽然目录不为空,但是看到用户是root,初始化失败十有八九是用户权限问题。后来,我手动重建了测试环境的osd,顺利拉起了它,将同样的重建步骤用在我的环境上。嘿,果然,可行,我的俩osd都up了,开心,赶紧将步骤记录一下。
总的来说,就是先把down掉的osd先删掉,再重建,再加入集群
I.删除osd
1.停止osd进程
让其他osd知道该osd已经不提供服务了
/etc/init.d/ceph stop osd.6
2.将osd状态标记为out
告诉monitor,这个osd不能服务了,需要在其他osd上进行数据恢复
ceph out osd.6
3.从CRUSH中移除该osd
ceph osd crush remove osd.6
4.删除osd
从集群删除该osd的记录
ceph osd rm osd.6
5.删除节点认证
ceph auth del osd.6
以上方式会触发两次迁移,一次在osd out之后,一个在crush remove之后。本文最后,会给一个新的处理方案,可以减少数据迁移次数。
II.添加osd
1.删除osd的残留
rm -rf /var/lib/ceph/data/ceph-6/*
2.修改权限
chown -R ceph:ceph /var/lib/ceph/data/ceph-6
3.初始化osd
/var/lib/ceph/bin/ceph-osd -i 6 --mkfs --mkkey
4.启动osd
/etc/init.d/ceph start osd.6
5.加入集群
ceph osd crush add 6 1.00000 host=node0001
网友评论