StorageGRID 如何删除对象
StorageGRID 可以直接响应客户端请求或由于 S3 存储桶生命周期到期或 ILM 策略要求而自动删除对象。了解删除对象的不同方式以及 StorageGRID 处理删除请求的方式,可以帮助您更有效地管理对象。
StorageGRID 可以使用下列两种方法之一删除对象:
-
同步删除:当 StorageGRID 收到客户端删除请求时,立即删除所有对象副本。副本删除后,系统会通知客户端删除成功。
-
对象排队等待删除:当 StorageGRID 收到删除请求时,对象排队等待删除,并立即通知客户端删除成功。对象副本稍后通过后台 ILM 处理删除。
删除对象时,StorageGRID 使用的方法可以优化删除性能,最大限度地减少潜在的删除积压,并以最快的速度释放空间。
下表总结了 StorageGRID 使用每种方法的时间。
| 执行删除的方法 | 使用时 |
|---|---|
对象已排队等待删除 |
当满足以下*任意*条件时:
|
对象立即删除(同步删除) |
当 S3 客户端发出删除请求并满足*所有*以下条件时:
|
当 S3 客户端发出删除请求时,StorageGRID 首先将对象添加到删除队列中。然后切换到执行同步删除。确保后台删除队列中有待处理的对象,使 StorageGRID 能够更高效地处理删除操作,特别是对于低并发客户端,同时有助于防止客户端删除积压。
删除对象所需的时间
StorageGRID 删除对象的方式可能会影响系统的表现:
-
当 StorageGRID 执行同步删除时,StorageGRID 最多需要 30 秒才能向客户端返回结果。这意味着,即使副本实际上比 StorageGRID 将对象排队等待删除时删除得更快,删除过程看起来也会更慢。
-
如果在批量删除期间密切监视删除性能,您可能会注意到,在删除了一定数量的对象后,删除速度似乎很慢。当 StorageGRID 从将对象排队等待删除转变为执行同步删除时,会发生此更改。删除速率的明显降低并不意味着对象副本被删除得更慢。相反,它表明平均而言,空间现在被更快地释放。
如果要删除大量对象,并且优先考虑快速释放空间,请考虑使用客户端请求删除对象,而不是使用 ILM 或其他方法删除它们。一般来说,由于 StorageGRID 可以使用同步删除,因此当客户端执行删除时,可以更快地释放空间。
删除对象后释放空间所需的时间取决于几个因素:
-
对象副本是同步删除还是排队等待稍后删除(用于客户端删除请求)。
-
其他因素,例如网格中对象的数量或在对象副本排队等待删除时网格资源的可用性(对于客户端删除和其他方法)。
如何删除S3版本控制对象
为 S3 存储桶启用版本控制时,StorageGRID 在响应删除请求时遵循 Amazon S3 行为,无论这些请求来自 S3 客户端、S3 存储桶生命周期到期还是 ILM 策略的要求。
当对象进行版本控制时,对象删除请求不会删除当前版本的对象,也不会释放空间。相反,对象删除请求会创建一个零字节删除标记作为对象的当前版本,这会使先前版本的对象变为"非当前"。当对象删除标记是当前版本且没有非当前版本时,它将成为过期的对象删除标记。
即使对象未被删除,StorageGRID 也会表现得好像对象的当前版本不再可用。对该对象的请求将返回 404 NotFound。但是,由于尚未删除非当前对象数据,因此指定对象的非当前版本的请求可以成功。
如果客户端从 "分支存储桶" 中删除具有版本 ID 的对象版本,StorageGRID 会隐藏该对象版本的存在,但不会在分支存储桶中创建删除标记。如果客户端从分支存储桶中删除没有版本 ID 的对象,StorageGRID 将根据标准 S3 行为在分支存储桶中创建删除标记。
要在删除版本控制对象时释放空间,或删除删除标记,请使用以下方法之一:
-
S3 客户端请求:在 S3 DELETE Object 请求中指定对象版本 ID (
DELETE /object?versionId=ID)。请注意,此请求仅删除指定版本的对象副本(其他版本仍占用空间)。 -
存储桶生命周期:使用存储桶生命周期配置中的 `NoncurrentVersionExpiration`操作。当达到 NoncurrentDays 指定的数量时,StorageGRID 将永久删除非当前对象版本的所有副本。这些对象版本无法恢复。
存储区生命周期配置中的 `NewerNoncurrentVersions`操作指定版本化 S3 存储区中保留的非当前版本数。如果非当前版本多于 `NewerNoncurrentVersions`指定的版本,则当 NoncurrentDays 值过期时,StorageGRID 将删除旧版本。 `NewerNoncurrentVersions`阈值覆盖 ILM 提供的生命周期规则,这意味着如果 ILM 请求删除版本在 `NewerNoncurrentVersions`阈值内的非当前对象,则会保留该对象。
要删除过期的对象删除标记,请使用
Expiration`操作,并附带以下标记之一: `ExpiredObjectDeleteMarker、Days`或 `Date。 -
ILM:"克隆活动策略"并在新策略中添加两个 ILM 规则:
-
第一条规则:使用"非当前时间"作为参考时间,以匹配对象的非当前版本。在 "创建 ILM 规则向导的步骤 1(输入详细信息)" 中,对于"仅将此规则应用于较旧的对象版本(在启用版本控制的 S3 存储桶中)?"的问题,选择"是"。
-
第二条规则:使用 Ingest time 来匹配当前版本。"Noncurrent time"规则必须出现在策略中 Ingest time 规则的上方。
要删除过期的对象删除标记,请使用*导入时间*规则来匹配当前删除标记。只有在*天*的*时间段*已过且当前删除标记已过期(没有非当前版本)时,才会删除删除标记。
-
-
删除存储桶中的对象:使用租户管理器"删除所有对象版本",包括删除标记,从存储桶中删除对象。
删除版本控制对象时,StorageGRID 会创建一个零字节删除标记作为对象的当前版本。必须先删除所有对象和删除标记,然后才能删除版本化存储桶。
-
在 StorageGRID 11.7 或更早版本中创建的删除标记只能通过 S3 客户端请求删除,ILM、存储桶生命周期规则或存储桶操作中的删除对象不会删除这些标记。
-
在 StorageGRID 11.8 或更高版本中创建的存储桶中的删除标记可以通过 ILM、存储桶生命周期规则、存储桶操作中的删除对象或显式 S3 客户端删除来删除。