• 如何统计Ceph的RBD真实使用容量


    前言

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

    查询的各种方法

    目前已知的有三种方法

    • 1、使用rbd du查询(Jewel才支持)
    • 2、使用rbd diff
    • 3、根据对象统计的方法进行统计

    详细介绍

    方法一:使用rbd du查询

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

    方法二:使用rbd diff

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

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

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

    拿到所有对象的信息

    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
  • 相关阅读:
    Codeforces Round #630 (Div. 2)A~E题解
    2020cug新生赛 An easy problem
    tensorflow.python.framework.errors.NotFoundError: <exception str() failed>错误解决
    将博客搬至CSDN
    2018年北京大学软件工程学科夏令营上机考试
    程序设计题目中的输入输出
    2018北大计算机学科夏令营机试题目
    Pyhton全栈的知识点(5)
    Python全栈的知识点(4)
    Python全栈的知识点(3)
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575367.html
Copyright © 2020-2023  润新知