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用的磁盘实现空间扩容,以下为操作流程
该ceph集群是由3台主机构成 每台主机上两个osd,见下图
1、因为是公有云ECS主机,先联系管理人员扩容ECS的主机磁盘,如果磁盘未显示可以执行partprobe命令扫描一下磁盘
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
要修改的地方如下
注意:修改为这种形式的目的是需要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中的以下两行删除
执行
kubectl apply -f yaml-nam -n ns-name #回滚为原来的deployment
(6)确认状态
Ceph osd df #检查osd的使用情况
发现已扩容完成,配平中,操作完成
参考链接:
https://blog.csdn.net/weixin_43939767/article/details/124660694