ceph全局GLOBAL容量和POOLS级别容量计算

全局容量这里说的比较清楚:https://www.cnblogs.com/goldd/p/6610618.html

再看看具体获取办法(这里转自:http://www.zphj1987.com/2016/09/08/%E5%A6%82%E4%BD%95%E7%BB%9F%E8%AE%A1Ceph%E7%9A%84RBD%E7%9C%9F%E5%AE%9E%E4%BD%BF%E7%94%A8%E5%AE%B9%E9%87%8F/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io)

一、前言

ceph的rbd一直有个问题就是无法清楚的知道这个分配的空间里面到底使用了多少,这个在Jewel里面提供了一个新的接口去查询,对于老版本来说可能同样有这个需求,本篇将详细介绍如何解决这个问题

二、查询的各种方法

目前已知的有三种方法
1、使用rbd du查询(Jewel才支持)
2、使用rbd diff
3、根据对象统计的方法进行统计

详细介绍

2.1 方法一:使用rbd du查询

这个参考我之前的文章:查询rbd的使用容量

2.2 方法二:使用rbd diff

[root@lab8106 ~]# rbd diff rbd/zp | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
828.844 MB

2.3 方法三:根据对象统计的方法进行统计

这个是本篇着重介绍的一点,在集群非常大的时候,再去按上面的一个个的查询,需要花很长的时间,并且需要时不时的跟集群进行交互,这里采用的方法是把统计数据一次获取下来,然后进行数据的统计分析,从而获取结果,获取的粒度是以存储池为基准的

拿到所有对象的信息

for obj in `rados -p rbd ls`;do rados -p rbd stat $obj >> obj.txt;done;

这个获取的时间长短是根据对象的多少来的,如果担心出问题,可以换个终端查看进度

tail -f  obj.txt

 

获取RBD的镜像列表

[root@lab8106 ~]# rbd -p rbd ls
test1
zp

获取RBD的镜像的prefix

for a in `rbd -p rbd ls`;do echo $a ;rbd -p rbd info $a|grep prefix |awk '{print $2}' ;done

获取指定RBD镜像的大小

查询 test1 的镜像大小

[root@lab8106 ~]# cat obj.txt |grep rbd_data.3ac16b8b4567|awk  '{ SUM += $6 } END { print SUM/1024/1024 " MB" }'
4014.27 MB

 

将上面的汇总,使用脚本一次查询出所有的

第一步获取:

for obj in `rados -p rbd ls`;do rados -p rbd stat $obj >> obj.txt;done;

第二步计算:

创建一个获取的脚本getused.sh

#! /bin/sh
##default pool name use rbd,you can change it 
##default objfile is obj.txt,you can change it
objfile=obj.txt
Poolname=rbd

for image in `rbd -p $Poolname ls`
do
Imagename=$image
Prefix=`rbd  -p $Poolname info $image|grep prefix |awk '{print $2}'`
Used=`cat $objfile |grep $Prefix|awk '{ SUM += $6 } END { print SUM/1024/1024 " MB" }'`
echo $Imagename $Prefix
echo Used: $Used
done

 

我的输出如下:

[root@lab8106 ~]# sh getused.sh 
test1 rbd_data.3ac16b8b4567
Used: 4014.27 MB
zp rbd_data.11f66b8b4567
Used: 828.844 MB

注意这里只统计了image里面的真实容量,如果是用了快速clone的,存在容量复用的问题,需要自己看是否需要统计那一部分的对象,方法同上

三、总结

对于已存在的系统,并且数据量很大的系统,不要频繁的去做请求,最好把统计请求,集中起来,并且就单线程的处理,慢一点不要紧,然后拉取到数据后,慢慢处理,这样能把影响降低到最少,可以在最不忙的时候去进行相关的操作

四、变更记录

Why Who When
创建 武汉-运维-磨渣 2016-09-08

 

这里说说pools级别容量计算,如下图:

ID  CLASS WEIGHT  TYPE NAME              STATUS REWEIGHT PRI-AFF
-17             0 root epp
-18             0     rack epp_rack4
-16             0 root empty
-15             0 root other
 -1       1.09354 root default
 -2       0.15622     rack rack1
 -3       0.15622         host orcadt196
  0   hdd 0.07811             osd.0          up  1.00000 1.00000
  2   hdd 0.07811             osd.2          up  1.00000 1.00000
 -4       0.31244     rack rack2
 -5       0.31244         host orcadt186
  1   hdd 0.07811             osd.1          up  1.00000 1.00000
  3   hdd 0.07811             osd.3          up  1.00000 1.00000
 12   hdd 0.07811             osd.12         up  1.00000 1.00000
 13   hdd 0.07811             osd.13         up  1.00000 1.00000
 -6       0.15622     rack rack3
 -7       0.15622         host orcadt213
  4   hdd 0.07811             osd.4          up  1.00000 1.00000
  5   hdd 0.07811             osd.5          up  1.00000 1.00000
-25       0.46866     rack rack4
-23       0.46866         host orcadt143
  6   hdd 0.07811             osd.6          up  1.00000 1.00000
  7   hdd 0.07811             osd.7          up  1.00000 1.00000
  8   hdd 0.07811             osd.8          up  1.00000 1.00000
  9   hdd 0.07811             osd.9          up  1.00000 1.00000
 10   hdd 0.07811             osd.10         up  1.00000 1.00000
 11   hdd 0.07811             osd.11         up  1.00000 1.00000

ceph df
GLOBAL:
    SIZE     AVAIL     RAW USED     %RAW USED
    979G      326G         653G         66.68
POOLS:
    NAME        ID     USED       %USED     MAX AVAIL     OBJECTS
    defpool     1      66416M     57.66        45996M       16615
    rbd         21       2806         0        45996M           1
    pool        23     84532M     63.66        45996M       21138
    data        36       171G     78.12        45996M       43927

看下全局容量AVAIL是325 pools为啥是60G左右 ,是这样计算的,ceph分布式存储计算有效空间是通过权重计算,比如POOLS级别容量MAX AVAIL=最小权重故障域(这里是机架rack1的权重0.156)/故障域总权重(这里是default总权重1.09)*总的全局有效空间325G  

计算得到MAX AVAIL=0.156/1.09*325=45G左右 再保留5%的空余空间 即45/95% = 46G左右和实际相符合,

具体可写数据还需要最大空闲除以副本数得到实际可存储数据

还有POOLS级别容量中USED是实际占用数据大小,  %USED是根据osd使用率来上报的  计算如上

你可能感兴趣的:(Storage,Testing)