Ceph中的容量计算与管理
转自: http://www.cnblogs.com/goldd/p/6610618.html
在部署完Ceph集群之后,一般地我们可以通过Ceph df这个命令来查看集群的容量状态,但是Ceph是如何计算和管理的呢?相信大家都比较好奇。因为用过 ceph df这个命令的人都会有这个疑问,它的输出到底是怎么计算的呢?为什么所有pool的可用空间有时候等于GLOBAL中的可用空间,有时候不等呢? 带着这些疑问我们可以通过分析ceph df的实现,来看看Ceph是如何计算容量和管理容量的。
一般情况下ceph df的输出如下所示:
ceph-df
[root@study-1 ~]# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
196G 99350M 91706M 45.55
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
rbd 1 20480k 0.02 49675M 11
x 2 522 0 49675M 11
GLOBAL 维度中有SIZE,AVAIL,RAW USED,%RAW USED。从上面的输出可以看到,ceph对容量的计算其实是分为两个维度的。一个是GLOBAL维度,一个是POOLS的维度。
POOLS 维度中有 USED,%USED,MAX AVAIL,OBJECTS。
我们这里先把注意力放在RAW USED,和AVAIL上。这个两个分析清楚之后,其它的也就迎刃而解了。
这里我们粗略算一下GLOBAL中的RAW USED 为91706M,明显大于下面pool 中USED 20480k*3 + 522bytes*3啊。而且各个pool的MAX AVAIL 相加并不等于GLOBAL中的AVAIL。我们需要深入代码分析一下为什么。
分析
Ceph 命令基本上都是首先到Montior这里,如何Monitor能处理请求,就直接处理,不能就转发。
我们看看Monitor是如何处理ceph df这个命令的。Monitor处理命令主要是在Monitor::hanlde_command函数里。
handle_command
else if (prefix == "df") {
bool verbose = (detail == "detail");