rook部署的ceph集群osd扩容记录

排查ceph集群发现,有一个osd处于full,2个osdnearfull,ceph集群出现fullosd会禁止写入和删除操作(nearfull是即将到达full状态的一个提醒,在此状态时,应该及时安排集群扩容等处理。)
进入cep-tool使用ceph osd df 查看 有一个osd使用率超过90%,两个超过了85%

执行
ceph balancer on #启用自动平衡
ceph balancer status #查看balancer的当前状态
balancer 可以优化OSD上PG的放置,以自动或以监督方式实现均衡分布

相关命令:
ceph balancer off #关闭balancer
确认自动平衡状态正常后,执行ceph osd df 检查会发现osd的pg正在自动均衡
pg均衡之后发现仍旧有两个nearfull的告警,因为osd的磁盘使用确实比较多了,还是建议扩容.

考虑到节点资源问题,扩容ceph用的磁盘实现空间扩容,以下为操作流程
image
该ceph集群是由3台主机构成 每台主机上两个osd,见下图
image

1、因为是公有云ECS主机,先联系管理人员扩容ECS的主机磁盘,如果磁盘未显示可以执行partprobe命令扫描一下磁盘
image
2、集群部署为rook部署 默认会将osd占的盘格为lvm卷,所以扩容磁盘之后需要执行以下命令扩容lvm卷

pvresize -t /dev/vdd #测试扩容是否有问题

pvresize /dev/vdd #正式扩容

执行完成后执行pvs 可以看到pv 和vg卷都已扩容为400G

执行
Lvextend -l 100%VG lvm-path #意为将指定的lvm卷调整为所属vg的100%空间

Lvs #执行查看lvm卷已扩容到完成

注意:与普通用的LVM卷不同,LVM空间扩展完成后不需要扩展文件系统

3、将空间同步到osd

找到对应osd的pod

Kubectl delete pod -n ns-name osd-name #重启对应osd的pod,pod重新生成会有个init容器读取扩容后的空间

重启前后使用ceph-tool检查osd空间

Ceph osd df

4、osd 的pod重启后,总大小升上去了,但ceph的可用空间需要更新,需要用到ceph-bluestore-tool 工具进行空间的检查和更新,用到的参数如下:

bluefs-bdev-sizes --path osd path

  Print the device sizes, as understood by BlueFS, to stdout.

  #将 BlueFS 理解的设备大小打印到标准输出。

bluefs-bdev-expand --path osd path

  Instruct BlueFS to check the size of its block devices and, if they have expanded, make use of the additional space.

  #指示 BlueFS 检查其块设备的大小,如果它们已扩展,则使用额外的空间。

注意:ceph-bluestore-tool 命令osd停止状态下执行,不然会返回osd 在运行的异常

因为集群ceph是使用rook形式以pod形式部署在集群内的,如果要停掉osd(rook部署的 执行ceph osd down 会立刻重新启动),需要停止osd的pod pod删除后就无法进到osd内执行ceph-bluestore-tool的命令,需要找到一个即能停止osd还可以进入pod的方法,操作如下(osd处于down时间建议不要超过10分钟,防止数据全部冲入其他osd):
(1)、找到对应osd(每个osd有一个deploy)的deployment 并将deployment的yaml备份到一个文件内

参考命令:

kubectl get deploy -n pubcloud-ceph-vir rook-ceph-osd-5 -oyaml > rook-ceph-osd-5.yaml

(2)、修改此osd的deployment

kubectl edit deploy -n pubcloud-ceph-vir rook-ceph-osd-5

要修改的地方如下
image

注意:修改为这种形式的目的是需要pod 启动后先sleep 不启动osd的进程,达到关闭osd并且pod能进入的的效果

将osd container的liveness删除
(3)deployment修改完成之后,osd的pod会重启启动起来,进入pod

Kubectl exec -it -n pubcloud-ceph-vir rook-ceph-osd-5 sh #此处必须是sh解释器

(4)进入pod执行

ceph-bluestore-tool bluefs-bdev-sizes --path /var/lib/ceph/osd/ceph-5/ #执行会将 BlueFS 理解的设备大小打印出来

执行命令扩容

ceph-bluestore-tool bluefs-bdev-expand --path /var/lib/ceph/osd/ceph-5/

扩容后可再次执行以下命令检查设备大小

ceph-bluestore-tool bluefs-bdev-sizes --path /var/lib/ceph/osd/ceph-5/ #执行会将 BlueFS 理解的设备大小打印出来

(5)确认空间扩容完成之后,恢复原来的deployment,操作如下

找到原来的备份出来的deployment,将yaml中的以下两行删除
image

执行

kubectl apply -f yaml-nam -n ns-name #回滚为原来的deployment

(6)确认状态

Ceph osd df #检查osd的使用情况

发现已扩容完成,配平中,操作完成

参考链接:

https://blog.csdn.net/weixin_43939767/article/details/124660694

https://blog.csdn.net/qq_16327997/article/details/82970857

posted @ 2022-06-06 16:48  ++南栀倾寒++  阅读(1325)  评论(0)    收藏  举报