ceph df max available 计算错误

ceph df max available miscalculation

Ceph 集群显示以下奇怪的行为 ceph df 输出:

--- RAW STORAGE ---
CLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED
hdd    817 TiB  399 TiB  418 TiB   418 TiB      51.21
ssd    1.4 TiB  1.2 TiB   22 GiB   174 GiB      12.17
TOTAL  818 TiB  400 TiB  418 TiB   419 TiB      51.15

--- POOLS ---
POOL                     ID  PGS   STORED   OBJECTS  USED     %USED  MAX AVAIL
pool1                    45   300   21 TiB    6.95M   65 TiB  20.23     85 TiB
pool2                    50    50   72 GiB  289.15k  357 GiB   0.14     85 TiB
pool3                    53    64  2.9 TiB  754.06k  8.6 TiB   3.24     85 TiB
erasurepool_data         57  1024  138 TiB   50.81M  241 TiB  48.49    154 TiB
erasurepool_metadata     58     8  9.1 GiB    1.68M   27 GiB   2.46    362 GiB
device_health_metrics    59     1   22 MiB      163   66 MiB      0     85 TiB
.rgw.root                60     8  5.6 KiB       17  3.5 MiB      0     85 TiB
.rgw.log                 61     8   70 MiB    2.56k  254 MiB      0     85 TiB
.rgw.control             62     8      0 B        8      0 B      0     85 TiB
.rgw.meta                63     8  7.6 MiB       52   32 MiB      0     85 TiB
.rgw.buckets.index       64     8   11 GiB    1.69k   34 GiB   3.01    362 GiB
.rgw.buckets.data        65   512   23 TiB   33.87M   72 TiB  21.94     85 TiB

如上所示,可用存储空间为 399TiB,池列表中的最大可用空间显示为 85TiB。我为每个池复制池使用 3 个副本,为 erasurepool_data.

使用 3+2 擦除代码

据我所知 Max Avail 段根据副本大小显示最大原始可用容量。所以达到85*3=255TiB。同时群集显示将近 400 个可用。

该相信哪个? 这只是一个错误吗?

当您添加纠删码池时,即 erasurepool_data 在 154,您将得到 255+154 = 399。

MAX AVAIL 列表示在第一个 OSD 变满之前可以使用的数据量。它考虑了来自 CRUSH 图的跨磁盘数据的预计分布,并使用 'first OSD to fill up' 作为目标。它似乎不是错误。如果 MAX AVAIL 不是您期望的,请使用 ceph osd 树查看数据分布并确保分布均匀。

您还可以在此处查看一些有用的 posts,其中解释了一些计算错误:

由于涉及纠删码,请检查此 SO post:

  • ceph-df-octopus-shows-used-is-7-times-higher-than-stored-in-erasure-coded-pool

原来max available space是根据集群中最满的osd计算的,与集群中的total free space无关。据我所知,这种波动主要发生在小集群上。