文档基于2025-10-10日社区最终版构建     
切换到英文版    进入演示系统    进入交流社区

MinIO Documentation

批量复制

MinIO 版本新增功能:发布日期:2022年10月8日 20:11:00 UTC

批处理框架随replicate作业类型在mc 发布日期:2022年10月8日 20:11:00 UTC.

MinIO批处理框架允许您使用YAML格式的作业定义文件(即“批处理文件”)来创建、管理、监控和执行作业。批处理作业直接在MinIO部署上运行,充分利用服务端处理能力,不受本地运行机器的资源限制。MinIO 客户端.

Thereplicate批处理作业从一个MinIO部署(源端)复制对象到source部署) 到另一个 MinIO 部署(目标target部署)。 无论是source或者target 必须成为本地部署。

MinIO 部署间的批量复制相比使用其他方案具有以下优势:mc mirror:

  • 消除客户端到集群网络作为潜在瓶颈

  • 用户仅需具备启动批处理作业的权限,无需其他权限,因为该作业完全在集群的服务器端运行。

  • 该作业在对象复制失败时支持重试尝试。

  • 批处理作业是一次性的、经过精心编排的流程,可实现精细控制的复制。

  • (仅限 MinIO 到 MinIO)复制过程将对象版本从源存储桶复制到目标存储桶

从 MinIO 服务器开始RELEASE.2023-05-04T21-44-30Z另一个部署可以是另一个 MinIO 部署,也可以是使用实时存储类的任何 S3 兼容位置。 在复制配置中使用筛选选项YAML文件用于排除存储在需要重新水化或其他恢复方法才能提供所请求对象的位置中的对象。 批量复制到这些类型的远程存储时使用mc mirror行为。

行为

访问控制与要求

批量复制具有与...相似的访问和权限要求存储桶复制.

"源"部署的凭据必须具有类似以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "admin:SetBucketTarget",
                "admin:GetBucketTarget",
                "admin:ListBatchJobs",
                "admin:DescribeBatchJob",
                "admin:StartBatchJob",
                "admin:CancelBatchJob"
            ],
            "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"
        }
    ]
}

mc admin user, mc admin user svcacctmc admin policy有关向 MinIO 部署添加用户、访问密钥和策略的更完整文档,请参阅

配置用于的MinIO部署Active Directory/LDAP or OpenID Connect用户管理可以改为创建专用的访问密钥用于支持批量复制。

筛选复制目标

批处理作业定义文件可通过存储桶、前缀和/或过滤器来限制复制范围,仅复制特定对象。 复制过程中对对象和存储桶的访问权限,可能受限于您在YAML配置文件中为源地址或目标地址提供的凭据。

MinIO 版本变更说明:服务器版本 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默认情况下,批量复制会自动将小于5MiB的对象进行批处理和压缩,以在源端和远程端之间高效传输数据。 远程MinIO部署可以检查并立即对批处理对象应用生命周期管理分层规则。 该功能类似于S3 Snowball Edge小文件批处理所提供的功能。

您可以在以下位置修改压缩设置:复制作业配置。

复制批处理作业参考

YAML必须定义源部署和目标部署。如果部署是远程的,那么目标部署必须 be local此外,YAML文件还可选地定义用于筛选复制对象的标志、为作业发送通知,或定义作业的重试尝试次数。

MinIO 版本变更说明:RELEASE.2023-04-07T05-28-58Z

您可以从远程 MinIO 部署复制数据到运行批处理作业的本地部署。

MinIO 版本变更说明:RELEASE.2024-08-03T04-33-23Z

本次发布推出了新版批量作业复制API,v2更新后的API允许您在源端列出多个前缀进行复制。 要从源端复制多个前缀,请指定replicate.apiVersion as v2.

replicate:
  apiVersion: v1
  source:
    type: minio
    bucket: mybucket
    prefix:
      - prefix1
      - prefix2
...

对于源部署

  • 所需信息

    type:

    必须minio.

    bucket:

    部署上的存储桶。

  • 可选信息

    prefix:

    应复制对象的前缀。
    从 MinIO Server 开始RELEASE.2024-08-03T04-33-23Zv2版本的批量作业复制API允许您列出多个前缀。
    指定replicate.apiVersion as v2从多个前缀进行复制。

    endpoint:

    用于复制批处理作业源或目标的部署位置。
    例如,https://minio.example.net.

    如果部署是mc 别名设置如果已为命令指定了别名,请省略此字段,以便指示 MinIO 使用该别名作为终端节点和凭据值。
    源部署或or远程部署必须成为“本地”别名。
    非“本地”部署必须指定endpointcredentials.

    path:

    指示 MinIO 使用路径样式或虚拟样式(DNS)查找存储桶。

    - 指定on针对路径样式
    - 指定off适用于虚拟样式
    - 指定auto让 MinIO 自动确定正确的查找样式。

    默认值为auto.

    credentials:

    Theaccesskey:secretKey:或者sessionToken:授予对对象访问权限的。
    仅针对不是该部署的指定本地部署。

    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

    指定对象大小(以兆比特 MiB 为单位),低于该大小时 MinIO 应对对象进行批量处理。
    默认值为5MiB.

    snowball.skipErrs

    指定false指示 MinIO 在读取时遇到任何错误的对象时停止操作。
    默认值为true.

对于目标部署

  • 所需信息

    type:

    必须minio.

    bucket:

    部署上的存储桶。

  • 可选信息

    prefix:

    要复制的对象前缀。

    endpoint:

    目标部署的位置。

    如果目标是别名指定给命令,你可以省略这个和credentials字段。
    如果目标是“local”,则源必须指定远程部署方式endpointcredentials.

    credentials:

    TheaccesskeysecretKey或者sessionToken授予对对象访问权限的。

对于过滤器

newerThan:

表示时间长度的字符串#d#h#sformat.

仅比指定时间长的新对象才会复制。 例如,7d, 24h, 5d12h30s是有效的字符串。

olderThan:

表示时间长度的字符串#d#h#sformat.

只有存在时间超过指定时长的对象才会被复制。

createdAfter:

一个日期在YYYY-MM-DDTHH:MM:SSZ RFC3339日期和时间格式。

只有在指定日期之后创建的对象才会被复制。

createdBefore:

一个日期在YYYY-MM-DDTHH:MM:SSZ RFC3339日期和时间格式。

只有在指定日期之前创建的对象才会被复制。

对于通知

endpoint:

用于发送通知事件的预定义端点。

token:

一个可选的JWT <JSON Web Token>要访问endpoint.

对于重试次数

如果任务被中断,您可以定义任务批次的重试次数。 对于每次重试,您还可以定义重试之间的等待时长。

attempts:

在放弃前完成批处理作业的尝试次数。

delay:

每次尝试之间的最短等待时间。

一个示例 YAML 描述文件replicate职位类型

使用mc batch generate创建一个基本的replicate用于进一步定制的批处理作业。

对于本地部署时,不要指定端点或凭据。 根据源或目标部分的具体情况,删除或注释掉相应的行。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: "datetime" # match objects created after this date and time in RFC3339 format
      createdBefore: "datetime" # match objects created before this date and time in RFC3339 format

      ## 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