我正在使用 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
它应该对你有帮助。