您现在可以使用 MinIO 批处理框架执行 S3 删除操作,以通过单个 API 请求删除大量对象。借助 MinIO 批处理框架,可以快速轻松地在 MinIO 部署中执行重复或批量操作,例如批量复制和批量密钥轮换。MinIO 批处理框架处理所有手动工作,包括管理重试和报告进度。
Batch Expiry 根据指定的条件提供高性能的过期和永久删除。这是一个分布式服务器端删除操作,用于并行执行批量删除。
MinIO 批处理框架无需用户干预,可以安排在非工作时间或系统利用率低时运行。Object Lambda 通知在批处理完成后发出。批处理作业是使用 YAML 定义的,然后定期运行。
添加批量删除功能的理由
信息生命周期管理 (ILM) 旨在管理对象,以便在其生命周期中有效地存储这些对象。这包括基于一组筛选器(条件)的过期对象和分层对象。对于到期,ILM 在与 3 个月到 1 年的到期计划一起使用时最有效。但是,当到期时间非常小时,就会发生反模式。
ILM 在作为后台进程运行的扫描程序上运行。扫描程序会根据负载自动上下限制,因此它不会干扰典型的 S3 API 调用,如 PUT 和 GET。扫描程序针对时间敏感的操作(如响应应用程序)进行了优化。
Batch Expiry 执行并行删除操作,保证快速高效地完成。使用条件格式选择对象,以筛选对象和元数据标记。
批量到期入门
下载并安装 MinIO。记录访问密钥和密钥。
下载并安装 MinIO 客户端。(可选)创建别名以简化对 MinIO Server 的访问。
创建存储桶并启用版本控制。
mc mb myminio/test
mc version enable myminio/test
将一些文件复制到您刚刚创建的存储桶中。文件的内容并不重要,我们只是在学习如何使用批量删除。
创建并定义批量删除(将"test"替换为存储桶的名称):
mc batch generate myminio/test expire
这将创建一个 expiry.yaml 文件,然后您可以编辑该文件以配置复制作业。
此文件(如下所示)包含存储桶名称、前缀名称、筛选条件/标志、通知和重试规则配置。您可以设置规则,按类型、名称(包括通配符)、期限、大小等使对象过期,请参阅下面的输出。
expire:
apiVersion: v1
bucket: mybucket # Bucket where this job will expire matching objects from
prefix: myprefix # (Optional) Prefix under which this job will expire objects matching the rules below.
rules:
- type: object # objects with zero ore more older versions
name: NAME # match object names that satisfy the wildcard expression.
olderThan: 70h # match objects older than this value
createdBefore: "2006-01-02T15:04:05.00Z" # match objects created before "date"
tags:
- key: name
value: pick* # match objects with tag 'name', all values starting with 'pick'
metadata:
- key: content-type
value: image/* # match objects with 'content-type', all values starting with 'image/'
size:
lessThan: 10MiB # match objects with size less than this value (e.g. 10MiB)
greaterThan: 1MiB # match objects with size greater than this value (e.g. 1MiB)
purge:
# retainVersions: 0 # (default) delete all versions of the object. This option is the fastest.
# retainVersions: 5 # keep the latest 5 versions of the object.
- type: deleted # objects with delete marker as their latest version
name: NAME # match object names that satisfy the wildcard expression.
olderThan: 10h # match objects older than this value (e.g. 7d10h31s)
createdBefore: "2006-01-02T15:04:05.00Z" # match objects created before "date"
purge:
# retainVersions: 0 # (default) delete all versions of the object. This option is the fastest.
# retainVersions: 5 # keep the latest 5 versions of the object including delete markers.
notify:
endpoint: https://notify.endpoint # notification endpoint to receive job completion status
token: Bearer xxxxx # optional authentication token for the notification endpoint
retry:
attempts: 10 # number of retries for the job before giving up
delay: 500ms # least amount of delay between each retry
如您所见,文件中列出的参数支持各种用例。将 YAML 从终端复制到文本编辑器并对其进行自定义,然后在以下步骤中启动它。每个规则都定义过期条件和清除操作。注释使文件一目了然。
例如,要删除存储桶中超过一周的所有对象,请执行以下操作:
...
rules:
- type: object # objects with zero ore more older versions
name: NAME # match object names that satisfy the wildcard expression.
olderThan: 7d # match objects older than this value
...
请注意,尚未为本教程配置通知终结点。配置后,当 Batch Expiry 完成时,通知将在该终结点上可用。
要使所有以字母 C 开头的对象过期,请执行以下操作:
...
rules:
- type: object # objects with zero ore more older versions
name: C*.* # match object names that satisfy the wildcard expression.
olderThan: 7d # match objects older than this value
...
可以同时创建和运行多个 Batch 作业;没有预定义的限制。
使用以下命令启动 Batch Expiry:
mc batch start myminio/ ./expiry.yaml
Successfully started 'expire' job `TEu3LMDvdAhAFZKQ3QtSHr:-1` on '2023-12-28 22:50:05.540096697 +0000 UTC'
您将看到一条消息,指出过期作业已成功启动以及时间。
您还可以检查批处理作业的状态(我运行的作业快速完成):
mc batch status myminio/ TEu3LMDvdAhAFZKQ3QtSHr:-1
mc: Unable to find an active job, attempting to list from previously run jobs
✔ ✔ ✔
JobType: expire
Objects: 0
FailedObjects: 0
CurrObjName:
Batch Expiry 完成后,您可以列出存储桶内容以验证它是否成功。
mc ls myminio/test
批处理到期
我们将继续构建具有 Batch Expiry 的 MinIO Batch Framework。批处理是自动化操作的强大方法。自动化是规模化的关键推动因素。客户对 Batch Expiry、Batch Replication 和 Batch Key-Rotate 的反馈告诉我们,每个人都喜欢自动化,并希望实现更多自动化。
立即下载 MinIO,了解 MinIO Batch Framework 的实际应用。 有问题吗?
请联系我们。