批量复制
MinIO 版本中的新增功能: RELEASE.2022-10-08T20-11-00Z
批量框架是在 mc
RELEASE.2022-10-08T20-11-00Z 中引入 replicate
作业类型的。
MinIO 批量框架允许您使用 YAML 格式的作业定义文件(“批处理文件”)来创建、管理、监控和执行作业。批处理作业直接在 MinIO 部署上运行,以利用服务器端处理能力,而不会受到运行 MinIO 客户端 的本地计算机的限制。
replicate
批处理作业将对象从一个 MinIO 部署(source
部署)复制到另一个 MinIO 部署(target
部署)。source
或 target
**必须** 是 本地 部署。
MinIO 部署之间的批量复制相对于使用 mc mirror
具有以下优势:
消除客户端到集群网络作为潜在瓶颈的可能性
用户只需要访问启动批处理作业的权限,而不需要其他权限,因为作业完全在集群的服务器端运行
该作业提供重试尝试,以防对象未复制
批处理作业是单次、精选的流程,允许进行精细控制复制
(仅限 MinIO 到 MinIO)复制过程将对象版本从源复制到目标
MinIO 版本中的更改: Server RELEASE.2023-02-17T17-52-43Z
通过指定 MINIO_BATCH_REPLICATION_WORKERS
环境变量,以并行方式使用多个工作程序运行批量复制。
从 MinIO Server RELEASE.2023-05-04T21-44-30Z
开始,另一个部署可以是另一个 MinIO 部署,也可以是使用实时存储类的任何与 S3 兼容的位置。在复制 YAML
文件中使用过滤选项来排除存储在需要重新水化或其他恢复方法才能提供请求的对象的位置的对象。对这些类型的远程进行的批量复制使用 mc mirror
行为。
行为
访问控制和要求
批量复制与 存储桶复制 具有相似的访问和权限要求。
“源”部署的凭据必须具有类似于以下内容的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"admin:SetBucketTarget",
"admin:GetBucketTarget"
],
"Effect": "Allow",
"Sid": "EnableRemoteBucketConfiguration"
},
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetObjectRetention",
"s3:GetObjectLegalHold",
"s3:PutReplicationConfiguration"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicationRuleConfiguration"
}
]
}
“远程”部署的凭据必须具有类似于以下内容的策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetBucketObjectLockConfiguration",
"s3:GetEncryptionConfiguration"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicationOnBucket"
},
{
"Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ReplicateTags",
"s3:AbortMultipartUpload",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectVersionTagging",
"s3:PutObject",
"s3:PutObjectRetention",
"s3:PutBucketObjectLockConfiguration",
"s3:PutObjectLegalHold",
"s3:DeleteObject",
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource": [
"arn:aws:s3:::*"
],
"Sid": "EnableReplicatingDataIntoBucket"
}
]
}
有关在 MinIO 部署中添加用户、访问密钥和策略的更完整文档,请参见 mc admin user
、mc admin user svcacct
和 mc admin policy
。
配置为 Active Directory/LDAP 或 OpenID Connect 用户管理的 MinIO 部署可以创建专门的 访问密钥 来支持批量复制。
过滤复制目标
批处理作业定义文件可以通过桶、前缀和/或过滤器来限制复制,以便仅复制某些对象。复制过程对对象和桶的访问权限可能受您在 YAML 中为源或目标目的地提供的凭据限制。
MinIO 版本变更: Server RELEASE.2023-04-07T05-28-58Z
您可以从远程 MinIO 部署复制到运行批处理作业的本地部署。
例如,您可以使用批处理作业执行一次性复制同步,将本地部署上的 minio-local/invoices/
中的桶中的对象推送到远程部署上的 minio-remote/invoices
中的桶。您还可以将对象从远程部署上的 minio-remote/invoices
拉取到本地部署上的 minio-local/invoices
中。
小文件优化
从 RELEASE.2023-12-09T18-17-51Z 开始,批量复制默认情况下会自动将小于 5 MiB 的对象进行批处理和压缩,以高效地在源和远程之间传输数据。远程 MinIO 部署可以检查并立即将生命周期管理分层规则应用于批处理的对象。该功能类似于 S3 Snowball Edge 小文件批处理提供的功能。
您可以在 replicate 作业配置中修改压缩设置。
复制批处理作业参考
YAML **必须** 定义源和目标部署。如果源部署是远程的,则目标部署**必须**是 local
。可选地,YAML 还可以定义标志以过滤要复制的对象、发送作业通知或定义作业重试尝试。
MinIO 版本变更: RELEASE.2023-04-07T05-28-58Z
您可以从远程 MinIO 部署复制到运行批处理作业的本地部署。
MinIO 版本变更: RELEASE.2024-08-03T04-33-23Z
此版本引入了批处理作业复制 API 的新版本 v2
。更新后的 API 允许您列出要从其复制的源上的多个前缀。要从源复制多个前缀,请将 replicate.apiVersion
指定为 v2
。
replicate:
apiVersion: v2
source:
type: minio
bucket: mybucket
prefix:
- prefix1
- prefix2
...
对于源部署
必需信息
type
必须是
minio
。bucket
部署上的桶。
可选信息
prefix
要复制的对象的 prefix。从 MinIO ServerRELEASE.2024-08-03T04-33-23Z
开始,批处理作业复制 API 的 v2 允许您列出多个前缀。将replicate.apiVersion
指定为v2
以从多个前缀复制。endpoint
要用于复制批处理作业的源或目标的部署位置。例如,https://minio.example.net
。如果部署是为命令指定的 mc alias set,请省略此字段以指示 MinIO 使用该别名作为端点和凭据值。源部署或远程部署必须是 “local” 别名。非“local”部署必须指定endpoint
和credentials
。path
指示 MinIO 使用桶的 Path 或 Virtual Style(DNS)查找。- 将on
指定为 Path 样式- 将off
指定为 Virtual 样式- 将auto
指定为让 MinIO 确定正确的查找样式。默认为auto
。credentials
授予访问对象的accesskey:
和secretKey:
或sessionToken:
。仅为非 local 部署的部署指定。snowball
版本添加:RELEASE.2023-12-09T18-17-51Z用于控制批处理和压缩功能的配置选项。snowball.disable
将true
指定为在复制期间禁用批处理和压缩功能。默认为false
。snowball.batch
指定要进行压缩的批处理对象的整数最大数量。默认为100
。snowball.inmemory
将false
指定为使用本地存储对存档进行分段,或将true
指定为对内存(RAM)进行分段。默认为true
。snowball.compress
将true
指定为使用 S2/Snappy 压缩算法 在线生成压缩批处理对象。默认为false
或无压缩。snowball.smallerThan
指定 MinIO 应该进行对象批处理的以兆位 (MiB) 为单位的对象大小。默认为5MiB
。snowball.skipErrs
将false
指定为指示 MinIO 在任何读取时产生错误的对象上停止。默认为true
。
对于目标部署
必需信息
type
必须是
minio
。bucket
部署上的桶。
可选信息
prefix
要复制的对象的 prefix。
endpoint
目标部署的位置。如果目标是为命令指定的 alias,您可以省略此字段和credentials
字段。如果目标是“local”,则源必须使用endpoint
和credentials
指定远程部署。credentials
授予访问对象的
accesskey
和secretKey
或sessionToken
。
对于过滤器
|
表示 仅复制比指定持续时间更新的对象。例如, |
|
表示 仅复制比指定持续时间更旧的对象。 |
|
使用 仅复制在日期之后创建的对象。 |
|
使用 仅复制在日期之前创建的对象。 |
对于通知
|
用于发送通知事件的预定义端点。 |
|
用于访问 |
对于重试尝试
如果某些因素中断作业,您可以定义要重试作业批处理的尝试次数。对于每次重试,您还可以定义每次尝试之间的等待时间。
|
在放弃之前完成批处理作业的尝试次数。 |
|
每次尝试之间等待的最短时间。 |
用于 replicate
作业类型的示例 YAML 描述文件
使用 mc batch generate
创建一个基本的 replicate
批处理作业,以便进一步自定义。
对于 local 部署,不要指定端点或凭据。删除或注释掉源或目标部分的那些行,具体取决于哪个是 local
。
replicate:
apiVersion: v1
# source of the objects to be replicated
source:
type: TYPE # valid values are "s3" or "minio"
bucket: BUCKET
prefix: PREFIX # 'PREFIX' is optional
# If your source is the 'local' alias specified to 'mc batch start', then the 'endpoint' and 'credentials' fields are optional and can be omitted
# Either the 'source' or 'remote' *must* be the "local" deployment
endpoint: "http[s]://HOSTNAME:PORT"
# path: "on|off|auto" # "on" enables path-style bucket lookup. "off" enables virtual host (DNS)-style bucket lookup. Defaults to "auto"
credentials:
accessKey: ACCESS-KEY # Required
secretKey: SECRET-KEY # Required
# sessionToken: SESSION-TOKEN # Optional only available when rotating credentials are used
snowball: # automatically activated if the source is local
disable: false # optionally turn-off snowball archive transfer
batch: 100 # upto this many objects per archive
inmemory: true # indicates if the archive must be staged locally or in-memory
compress: false # S2/Snappy compressed archive
smallerThan: 5MiB # create archive for all objects smaller than 5MiB
skipErrs: false # skips any source side read() errors
# target where the objects must be replicated
target:
type: TYPE # valid values are "s3" or "minio"
bucket: BUCKET
prefix: PREFIX # 'PREFIX' is optional
# If your source is the 'local' alias specified to 'mc batch start', then the 'endpoint' and 'credentials' fields are optional and can be omitted
# Either the 'source' or 'remote' *must* be the "local" deployment
endpoint: "http[s]://HOSTNAME:PORT"
# path: "on|off|auto" # "on" enables path-style bucket lookup. "off" enables virtual host (DNS)-style bucket lookup. Defaults to "auto"
credentials:
accessKey: ACCESS-KEY
secretKey: SECRET-KEY
# sessionToken: SESSION-TOKEN # Optional only available when rotating credentials are used
# NOTE: All flags are optional
# - filtering criteria only applies for all source objects match the criteria
# - configurable notification endpoints
# - configurable retries for the job (each retry skips successfully previously replaced objects)
flags:
filter:
newerThan: "7d" # match objects newer than this value (e.g. 7d10h31s)
olderThan: "7d" # match objects older than this value (e.g. 7d10h31s)
createdAfter: "date" # match objects created after "date"
createdBefore: "date" # match objects created before "date"
## NOTE: tags are not supported when "source" is remote.
# tags:
# - key: "name"
# value: "pick*" # match objects with tag 'name', with all values starting with 'pick'
# metadata:
# - key: "content-type"
# value: "image/*" # match objects with 'content-type', with all values starting with 'image/'
notify:
endpoint: "https://notify.endpoint" # notification endpoint to receive job status events
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