Ceph df分析

本文分析了Ceph集群的容量使用情况,从GLOBAL和POOLS两个维度进行探讨。GLOBAL维度主要依据osd_stat_t计算,而POOLS维度涉及到pool的使用空间和副本策略。源码分析揭示了GLOBAL的统计基于osd的数据目录,而POOLS的统计受OSD更新影响,两者可能存在偏差。
摘要由CSDN通过智能技术生成

1. 查看集群使用容量

ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED
    61284G     26383G       34901G         56.95
POOLS:
    NAME                ID     USED       %USED     MAX AVAIL     OBJECTS
    rbd                 0        256k         0         6931G           4
    cephfs_metadata     1      43928k         0         6931G     1043729
    cephfs_data         2      11603G     62.60         6931G     7083637

说明:
ceph对容量的计算分为两个维度:

  • GLOBAL维度中有SIZE,AVAIL,RAW USED,%RAW USED
  • POOLS的维度中有 USED,%USED,MAX AVAIL,OBJECTS

GLOBAL中的RAW USED :34901G, AVAIL:26383G
POOLS 中USED:11603G3 + (43928k/1024/1024)3 = 34809.123G MAX AVAIL:20793G
发现问题没,pools使用的跟global有偏差,少了一部分数据。

2. 分析mon源码

分析/src/mon/Monitor.cc代码,跟踪df逻辑如下:

2099201-e76df3042a136dca.png
image.png

从上面的代码可以知道,df命令的输出两个维度代码逻辑:

  • GLOBAL维度pgmon()->dump_fs_stats
  • POOLS这个维度pgmon()->dump_pool_stats

2.1 GLOBAL维度

void PGMapDigest::dump_fs_stats(stringstream *ss, Formatter *f, bool verbose) const
{
  if (f) {
    f->open_object_section("stats");
    f->dump_int("total_bytes", osd_sum.kb * 1024ull);
    f->dump_int("total_used_bytes", osd_sum.kb_used * 1024ull);
    f->dump_int("total_avail_bytes", osd_sum.kb_avail * 1024ull);
 
    if (verbose) {
      f->dump_int("total_objects", pg_sum.stats.sum.num_objects);
    }
 
    f->close_section();
  } else {
    assert(ss != nullptr);
 
    TextTable tbl;
    tbl.define_column("SIZE", TextTable::LEFT, TextTable::RIGHT);
    tbl.define_column("AVAIL", TextTable::LEFT, TextTable::RIGHT);
    tbl.define_column("RAW USED", TextTable::LEFT, TextTable::RIGHT);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值