ceph替换换掉的硬盘

ceph整体上还是比较靠谱的,如果有硬盘挂掉,系统是可以靠着冗余不影响业务,这个时候系统会进入degraded状态,类似raid挂掉硬盘的时候,这篇文章写的是硬盘挂掉以后更换硬盘的操作过程

前言

首先我们观察到的可能是集群告警,这时候我们先确认一下问题确实是磁盘挂了。检查一下集群状态

1
2
3
#以下语句在管理节点执行
ceph -s
ceph osd tree | grep -i down

然后试一下重启该节点,并查看日志

1
2
3
4
5
#以下语句在osd所在的主机执行
systemctl restart ceph-osd@13
systemctl status -l ceph-osd@13
#检查一下磁盘
lsblk

在我的主机上,坏掉的磁盘对应的块设备直接没了。再不同的硬件上,可能表现会有不同

摘除坏掉的osd

在确认是磁盘挂掉以后,虽然ceph可以自动处理做数据平衡,但是osd本身还在集群中,我们先要将其从集群中摘除

1
2
3
4
#以下语句在管理节点执行
ceph osd crush remove osd.13
ceph auth del osd.13
ceph osd rm osd.13

在大多数情况,虽然osd挂了,但是他所mount的虚拟目录会还存在着。我们需要将他卸载

1
2
# 以下语句在osd所在的主机执行
umount /var/lib/ceph/osd/ceph-13

跟换硬盘重建osd

将osd摘除以后,我们可以把坏的盘从服务器上换下来了。现代一点的设备可以热插拔替换,而如果硬件型号较老。可能需要在硬盘替换完毕后重启才能重新扫描识别到新硬盘。一般情况下,一台服务器上会运行多个osd,如果直接重启,相应的osd会被检测为离线,引发数据再平衡。为了避免这情况,我们需要在重启前先关闭out事件。

1
2
3
4
#以下语句在管理节点执行
ceph osd set noout
#重启完毕后再执行
ceph osd unset noout

最后,重建osd,在执行前,请确认 /var/lib/ceph/bootstrap-osd/ceph.keyring 的内容以及ceph用会对这个文件的权限。用lsbk找到新换硬盘的名称

1
2
#重建脚本,在osd所在的主机执行
ceph-volume lvm create --data /dev/sdd

其他

最后分享一下promeheus监控osd挂掉的表达式

1
ceph_osd_up{cluster="ceph"} == 0