CephFS 池无法使用所有可用的原始 space (MAX_AVAIL < AVAIL)

CephFS pool can't use all the available raw space (MAX_AVAIL < AVAIL)

我有一个 Ceph 集群,打算 运行 作为硬盘驱动器机箱上的 CephFS,提供 9PiB 原始 space 多个服务器。

我创建了一个 3+3 擦除编码池,它应该跨越我硬盘的整个原始 space。

令人惊讶的是,它似乎只占用了 9PiB 可用空间中的 6PiB,所以当我将 ~2.5PiB 数据写入其中(以及 ~2.5PiB 更多校验和)时,它说我只有 500TiB space可用(对应1PiB原始space)。

这是 ceph df 的输出:

$ sudo ceph df
RAW STORAGE:
    CLASS     SIZE        AVAIL       USED        RAW USED     %RAW USED 
    hdd       8.9 PiB     3.7 PiB     5.2 PiB      5.2 PiB         58.62 
    ssd        35 TiB      15 TiB      20 TiB       20 TiB         57.96 
    TOTAL     9.0 PiB     3.7 PiB     5.2 PiB      5.3 PiB         58.62 
 
POOLS:
    POOL                ID     STORED      OBJECTS     USED        %USED     MAX AVAIL 
    cephfs_metadata      7     5.1 GiB       1.55M     5.7 GiB      0.15       780 GiB 
    cephfs_erdata        8     2.5 PiB     687.98M     5.2 PiB     84.29       500 TiB

请注意 POOLS 池 cephfs_erdata 部分中的 MAX AVAIL 列指出仅剩余 500TiB,而 RAW STORAGE [=18] 中的 AVAIL 列=] CLASS 有 3.7PiB 可用。

这是什么意思?我可以为该池分配更多 space 吗?为什么 Ceph 本身不分配所有可用的 space?

我们找出了这个问题的原因。

  1. 由于配置错误,我们的 CephFS 使用 ssd 驱动器不仅用于存储元数据,还用于存储实际数据。每当 OSD 运行 超出 space 并且无法在其上放置更多数据时,CephFS 运行 超出 space。所以 SSD 是 MAX_AVAIL.

    的瓶颈
  2. 即使是 hdd Ceph OSD 也没有均匀加载。所以我们不得不运行reweight。之后数据均匀分布,MAX_AVAIL大小接近AVAIL.