ceph集群出现full osd后,会禁止写入和删除操作,出现这种情况,应该如何解决呢?
可以先通过调高集群full ratio限制比例,或者修改osd权重,来解除写锁,然后再进行数据删除等操作。
具备扩容条件,可以通过扩容解决。
但是要注意,扩容和调整osd权重,会出现数据平衡状况,影响集群读写速率(正在移动的数据,也会进行写锁)。如果是生产环境,请注意操作时点,保证集群可用性。
nearfull是即将到达full状态的一个提醒,在此状态时,应该及时安排集群扩容等处理。
nearfull和full ratio在部署集群时,可以按需进行设定。
1、容量不够,扩容来凑
1) scale-up
通过向集群现有服务器添加磁盘实现。
2) scale-out
通过向集群添加服务器节点实现。
ceph集群扩容参见《ceph集群扩容》后续补充。
2、删除无用数据,释放空间
为防止数据丢失,ceph在osd磁盘数据量达到一定比例后,会将osd标记为full状体,并禁止客户端进行数据写操作,包括数据的删除操作。也就是说,我们不能直接通过删除无用数据,释放空间。
那么存储集群中有很多历史的无用数据,占用了很多空间,又不能释放,该怎么办?
解决:调整ceph集群的限制比例,消除写锁,然后再进行删除。
# 查看集群osd详细状态 $ ceph health detail HEALTH_ERR 1 full osd(s); 3 near full osd(s); full flag(s) set osd.19 is full at 80% osd.6 is near full at 75% osd.7 is near full at 76% osd.15 is near full at 71% full flag(s) set # 修改osd最大可写容量比例 ## 修改前为80%,修改后为85% $ ceph tell osd.* injectargs '--mon-osd-full-ratio 85' $ ceph tell osd.* injectargs '--mon-osd-full-ratio 0.85' $ ceph pg set_full_ratio 0.85 # 此时再查看集群状态,已经恢复。删除无用的数据 # 例子:rbd rm volumes/volume-fb2eb4e8-9871-4048-b7fa-d6494be06b44
3、调整osd权重
通常osd full发生时,并不是全部osd都达到full的比例。此时可以调整full的osd的存储比重,从而降低该osd存储数据的比例,实现数据的自动平衡(按设定的比例,移动部分数据到其他的osd)。
默认安装时,ceph集群会按磁盘容量自动设置osd比重,范围0~1。
# 查看集群osd的比重 $ ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 18.43690 root default -2 2.63699 host controller-3 0 0.87900 osd.0 up 1.00000 1.00000 2 0.87900 osd.2 up 1.00000 1.00000 3 0.87900 osd.3 up 1.00000 1.00000 -3 2.63699 host controller-1 1 0.87900 osd.1 up 1.00000 1.00000 4 0.87900 osd.4 up 1.00000 1.00000 15 0.87900 osd.15 up 1.00000 1.00000 # 例:调整osd15的比重为0.7 $ ceph osd crush reweight osd.15 0.7 # 查看集群osd的比重 $ ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 18.43690 root default -2 2.63699 host controller-3 0 0.87900 osd.0 up 1.00000 1.00000 2 0.87900 osd.2 up 1.00000 1.00000 3 0.87900 osd.3 up 1.00000 1.00000 -3 2.63699 host controller-1 1 0.87900 osd.1 up 1.00000 1.00000 4 0.87900 osd.4 up 1.00000 1.00000 15 0.87900 osd.15 up 1.00000 1.00000 # 例:调整osd15的比重为0.7 $ ceph osd crush reweight osd.15 0.7
调整后集群会根据比重,自动移动数据进行平衡。调整的比重可以通过计算得出,也可以逐步降低比重,查看集群状况再进行调整。
直到full的osd状态改变为nearfull,集群可以进行写操作。