删除 Ceph 中的文件不会释放空间

删除 Ceph 中的文件不会释放空间

我正在使用 Ceph,通过 radosgw 上传许多文件。之后,我想删除这些文件。我尝试在 Python 中执行此操作,如下所示:

bucket = conn.get_bucket(BUCKET)
for key in bucket.list():
    bucket.delete_key(key)

之后,我用来bucket.list()列出存储桶中的文件,这表明存储桶现在是空的,正如我预期的那样。

但是,当我ceph df在 mon 上运行时,它显示 OSD 仍然具有较高的利用率(例如%RAW USED 90.91)。如果我继续写入(认为状态数据尚未赶上状态),Ceph 基本上会锁定(利用率为 100%)。

这是怎么回事?

注意:我确实有以下突出之处ceph status

   health HEALTH_WARN
            3 near full osd(s)
            too many PGs per OSD (2168 > max 300)
            pool default.rgw.buckets.data has many more objects per pg than average (too few pgs?)

从我在网上收集的信息来看,这不会导致我遇到的问题。但我对 Ceph 还不熟悉,可能错了。

我有一个 mon 和 3 个 OSD。这只是为了测试。

更新:空间似乎确实被回收了,但速度非常慢。大约一小时后,利用率降至 63%。

答案1

您可以使用Ceph pg 计算工具。它将帮助您计算集群的正确 pg 数量。我的看法是,这正是导致您出现问题的原因。您可以看到您总共应该只有 256 个 pg。只需重新创建池(!小心:这将删除存储在该池中的所有数据!):

ceph osd pool delete {your-pool-name} {your-pool-name} --yes-i-really-really-mean-it
ceph osd pool create {your-pool-name} 256 256

它应该对你有帮助。

相关内容