Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

如何删除对象

StorageGRID可以直接响应客户端请求删除对象,也可以由于 S3 存储桶生命周期到期或 ILM 策略的要求而自动删除对象。了解删除对象的不同方式以及StorageGRID如何处理删除请求可以帮助您更有效地管理对象。

StorageGRID可以使用以下两种方法之一来删除对象:

  • 同步删除:当StorageGRID收到客户端删除请求时,所有对象副本都会立即被删除。删除副本后,客户端会收到删除成功通知。

  • 对象排队等待删除:当StorageGRID收到删除请求时,对象将排队等待删除,并立即通知客户端删除已成功。对象副本稍后会被后台 ILM 处理删除。

删除对象时, StorageGRID使用优化删除性能、最大限度地减少潜在删除积压并最快释放空间的方法。

该表总结了StorageGRID使用每种方法的时间。

执行删除的方法 使用时

对象已排队等待删除

当下列任何条件成立时:

  • 自动对象删除由以下事件之一触发:

    • 已达到 S3 存储桶生命周期配置中的到期日期或天数。

    • ILM 规则中指定的最后一个时间段已过。

    *注意:*如果启用了 S3 对象锁的存储桶中的对象处于合法保留状态,或者已指定保留截止日期但尚未满足,则无法删除它们。

  • S3 客户端请求删除,并且以下一个或多个条件成立:

    • 无法在 30 秒内删除副本,例如,因为对象位置暂时不可用。

    • 后台删除队列处于空闲状态。

对象被立即删除(同步删除)

当 S3 客户端发出删除请求并且满足以下所有条件时:

  • 所有副本均可在 30 秒内删除。

  • 后台删除队列包含要处理的对象。

当 S3 客户端发出删除请求时, StorageGRID首先将对象添加到删除队列。然后它切换到执行同步删除。确保后台删除队列有要处理的对象,可以让StorageGRID更有效地处理删除,特别是对于低并发客户端,同时有助于防止客户端删除积压。

删除对象所需的时间

StorageGRID删除对象的方式可能会影响系统的执行方式:

  • 当StorageGRID执行同步删除时, StorageGRID最多可能需要 30 秒才能将结果返回给客户端。这意味着删除过程似乎进行得更慢,尽管实际上删除副本的速度比StorageGRID将对象排队等待删除时的速度更快。

  • 如果您在批量删除期间密切监视删除性能,您可能会注意到在删除一定数量的对象后删除速度似乎很慢。当StorageGRID从排队对象删除转变为执行同步删除时,就会发生这种变化。删除率的明显降低并不意味着对象副本的删除速度变慢。相反,这表明平均而言,空间现在正在被更快地释放。

如果您要删除大量对象并且您的首要任务是快速释放空间,请考虑使用客户端请求来删除对象,而不是使用 ILM 或其他方法删除它们。一般来说,当客户端执行删除时,空间会更快地释放,因为StorageGRID可以使用同步删除。

删除对象后释放空间所需的时间取决于以下几个因素:

  • 对象副本是否同步删除或排队等待稍后删除(对于客户端删除请求)。

  • 其他因素,例如网格中的对象数量或对象副本排队等待删除时网格资源的可用性(对于客户端删除和其他方法)。

如何删除 S3 版本控制对象

当为 S3 存储桶启用版本控制时, StorageGRID在响应删除请求时会遵循 Amazon S3 行为,无论这些请求来自 S3 客户端、S3 存储桶生命周期的到期还是 ILM 策略的要求。

当对象被版本化时,对象删除请求不会删除对象的当前版本,也不会释放空间。相反,对象删除请求会创建一个零字节删除标记作为对象的当前版本,这使得对象的先前版本成为“非当前”版本。当对象删除标记是当前版本并且没有非当前版本时,该对象删除标记将成为过期对象删除标记。

即使该对象尚未被删除, StorageGRID 的行为也会像该对象的当前版本不再可用一样。对该对象的请求返回 404 NotFound。但是,由于非当前对象数据尚未被删除,因此指定对象的非当前版本的请求可以成功。

要在删除版本控制对象时释放空间,或移除删除标记,请使用以下方法之一:

  • S3 客户端请求:在 S3 DELETE 对象请求中指定对象版本 ID(DELETE /object?versionId=ID )。请记住,此请求仅删除指定版本的对象副本(其他版本仍占用空间)。

  • Bucket 生命周期:使用 `NoncurrentVersionExpiration`存储桶生命周期配置中的操作。当达到指定的 NoncurrentDays 数时, StorageGRID将永久删除所有非当前对象版本的副本。这些对象版本无法恢复。

    这 `NewerNoncurrentVersions`存储桶生命周期配置中的操作指定了版本化 S3 存储桶中保留的非当前版本的数量。如果非当前版本的数量超过 `NewerNoncurrentVersions`指定,当 NoncurrentDays 值过去后, StorageGRID会删除旧版本。这 `NewerNoncurrentVersions`阈值覆盖了 ILM 提供的生命周期规则,这意味着版本在 `NewerNoncurrentVersions`如果 ILM 请求删除,则阈值会被保留。

    要删除过期的对象删除标记,请使用 Expiration`带有以下标签之一的操作: `ExpiredObjectDeleteMarkerDays , 或者 Date

  • 工业光魔(ILM):"克隆活动策略"并向新策略添加两个 ILM 规则:

    • 第一条规则:使用“非当前时间”作为参考时间来匹配对象的非当前版本。在"创建 ILM 规则向导的第 1 步(输入详细信息)",针对问题“仅将此规则应用于较旧的对象版本(在启用了版本控制的 S3 存储桶中)?”选择*是*

    • 第二条规则:使用*摄取时间*来匹配当前版本。 “非当前时间”规则必须出现在*摄取时间*规则上方的策略中。

      要删除过期的对象删除标记,请使用*摄取时间*规则来匹配当前删除标记。仅当经过*天*的*时间段*并且当前删除标记已过期(没有非当前版本)时,才会删除删除标记。

  • 删除存储桶中的对象:使用租户管理器"删除所有对象版本",包括删除标记,来自存储桶。

当一个版本化对象被删除时, StorageGRID会创建一个零字节删除标记作为该对象的当前版本。必须先删除所有对象和删除标记,然后才能删除版本化存储桶。

  • 在StorageGRID 11.7 或更早版本中创建的删除标记只能通过 S3 客户端请求删除,而不能通过 ILM、存储桶生命周期规则或存储桶操作中的删除对象删除。

  • 可以通过 ILM、存储桶生命周期规则、存储桶操作中的删除对象或显式 S3 客户端删除来删除在StorageGRID 11.8 或更高版本中创建的存储桶中的删除标记。