ceph一旦有osd写满了,就会进入一种保护状态。所谓osd写满,是指osd空间使用率达到了osd full ratio规定的百分比,例如0.95。这种情况下,ceph不允许用rbd rm等命令删除上面的rbd image以释放空间。如何处理osd full的窘境,参考下面的方法。
方法1
增加磁盘空间。
如果可能,试着删除osd上无用的文件,释放部分磁盘空间。或者向系统添加新的硬盘,部署一个新的osd,ceph将自动平衡数据到新的osd,从而释放full osd上的部分空间。
但是,释放或增加空间的办法,有时候条件不具备,无法施行。尝试下面的方法。
方法2
数据再平衡。命令如下
ceph osd crush reweight <osd> <weight>
这里的调整分为两种情况。
如果osd是处于full状态的osd,设置为更小的weight值。例如原值是1,可以设置为0.8,0.5,0.01。
如果osd是还有空间余量的osd,那么weight设置为更大的值,例如原来是1,现在可以设置为1.5, 2, 10, 100。
weight代表的是osd之间的相对关系,数值可以逐步调整,根据实际效果,多次运行上面的reweight命令。每次调整,通过ceph -w ,df,ceph health detail 等命令,观察数据的分布变化,直到osd从full变成了near full状态。再平衡的方法之所以能够奏效,是因为每个osd的空间利用率并不完全相同,例如某个osd利用率达到95%,认定为full状态,此时其他osd空间占用为92%,93%,等等。再平衡的目标是让 osd full 的空间占用下降一点,低于 full ratio。
有一个要注意的问题,osd的调整以同一个crush ruleset的osd为范围。运行ceph osd tree,调整的osd应当位于同一个root。
解除了osd full,运行rbd rm等命令,删除不用的rbd image释放空间,直到osd可用空间处于警戒线以下。
ceph状态恢复正常之后,再次运行ceph osd crush reweight命令,恢复weight为合理的设置。例如,1TB大小的osd,weight通常设置为1.0。
方法3
还有一个修改ceph配置项的方法,在 /etc/ceph/ceph.conf 的 [global] 分节,例如原来配置
mon osd full ratio = 0.90
修改为更大的值,例如0.98。然后重启ceph服务。但经过博主试验,并未奏效。
参考