ceph osd full/nearfull

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,集群可以进行写操作。



猜你喜欢

转载自blog.51cto.com/zhanghy/2299248