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个可用。
信任哪一个?这只是一个bug吗?
发现最大可用空间是根据集群中最满的osd计算的,与集群中的总可用空间无关。根据我的发现,这种波动主要发生在小集群上。
MAX AVAIL列表示在第一个OSD变满之前可以使用的数据量。它考虑了CRUSH映射中磁盘间数据的预计分布,并使用"第一个要填充的OSD"作为目标。它似乎不是一个bug。如果MAX AVAIL不是您所期望的,请使用ceph-osd树查看数据分布,并确保您有一个统一的分布。
你也可以在这里查看一些有用的帖子,解释一些误判:
- 使用Ceph池中的可用空间
- ceph显示大小计算
- ceph-df命令中的最大可用性不正确
由于您涉及擦除编码,请检查此SO帖子:
- ceph-df-octopus-hows-used-is-7倍-比-存储在擦除中的-编码-波尔
当您添加擦除编码池,即154处的erasurepool_data
时,您得到255+154=399。