1、简介
首先需要说明的是,ceph的osd是不建议做成raid10或者raid5的,一般建议单盘跑。在我们的环境中,为了充分利用raid卡的缓存,即使是单盘,我们还是将其挂在raid卡下做成raid0。
这样不可避免的问题就是磁盘的损坏,需要在ceph当中做一些摘除动作,同时还需要重建raid。
在更换完磁盘重建raid之后,需要重新添加osd。新的osd加入到集群后,ceph还会自动进行数据恢复和回填的过程。我们还需要通过调整一些数据恢复和回填的参数来控制其恢复速度。
下面是详细的说明。
2、更换OSD操作步骤
2.1 故障磁盘定位
一般来讲,通过硬件监控,我们能感知到磁盘故障。但是故障的磁盘对应于系统中的哪一个盘符却没法知道。
我们可以通过检查dmesg日志来确认:
1 | [4814427.336053] print_req_error: 5 callbacks suppressed[] |
在我们的日志当中,可以看到,故障盘是/dev/sdi
接着,我们需要确认/dev/sdi对应的osd,在ceph L版本中,默认使用了bluestore,挂载变成了如下方式:
1 | root@ctnr:~# df -hT |
所以没有办法通过这种方式直接查看到某个osd对应的磁盘。
可通过如下操作查看每块磁盘对应的lvm:
1 | root@ctnr:~# lsblk |
然后通过如下操作查看所有osd对应的lvm:
1 | root@ctnr:~# ll /var/lib/ceph/osd/ceph-*/block |
通过对比lvm的名称,即可确定故障磁盘对应的osd
2.2 摘除故障磁盘
通过上面的方法确认故障磁盘及其对应的osd后,我们需要执行相应的摘除操作:
- 从ceph中删除相应的osd
1 | # 在monitor上操作 |
- 卸载磁盘
1 | umount /var/lib/ceph/osd/ceph-9 |
2.3 重建raid0
重建raid需要依赖mega工具包,下面是ubuntu上安装的示例:
1 | wget -O - http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | sudo apt-key add - |
查看raid状态:
1 | megacli -PDList -aALL | egrep 'Adapter|Enclosure|Slot|Inquiry|Firmware' |
相关说明:
- Adapter:代表raid控制器编号
- Enclosure Device ID:硬盘盒id
- Slot Number:插槽编号
- Firmware state:固件的状态。
Online, SpunUP
代表正常状态,Unconfigured(good), Spun Up
代表非正常状态
我们需要对非正常状态的磁盘重建raid:
1 | # 对硬盘盒id为32、插槽号为10的硬盘做raid0 |
这个时候再通过fdisk -l
就可以看到新添加的磁盘了
1 | fdisk -l |
2.4 重建osd
1 | ceph-deploy disk list ctnr.a1-56-14.pub.unp |
3、控制数据恢复及回填速度
1 | # 将用于数据恢复操作的优先级提到最高级别 |
注意:以上所有操作都是为了尽快恢复数据,在数据恢复完成以后,需要再调整回来,如果在恢复过程中仍然需要优先保证client服务质量,可不做相关调整,保持默认值即可