文档

批量复制

MinIO 版本新增内容: RELEASE.2022-10-08T20-11-00Z

批处理框架是在 mc RELEASE.2022-10-08T20-11-00Z 中引入的 replicate 作业类型。

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

replicate 批处理作业将对象从一个 MinIO 部署(source 部署)复制到另一个 MinIO 部署(target 部署)。sourcetarget **必须** 是 本地 部署。

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"
        }
    ]
}

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

Active Directory/LDAPOpenID 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

    应该复制的对象的(多个)前缀。
    从 MinIO Server RELEASE.2024-08-03T04-33-23Z 开始,批量作业复制 API 的 v2 版本允许您列出多个前缀。
    replicate.apiVersion 指定为 v2 以从多个前缀复制。

    endpoint

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

    如果部署是命令中指定到的 mc 别名设置,则省略此字段以指示 MinIO 使用该别名作为端点和凭据值。
    源部署远程部署必须“本地” 别名。
    非“本地”部署必须指定 endpointcredentials

    path

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

    - 为路径样式指定 on
    - 为虚拟样式指定 off
    - 指定 auto 以让 MinIO 确定正确的查找样式。

    默认为 auto

    credentials

    授予对对象访问权限的 accesskey: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

    指定 MinIO 应该批量处理对象的兆位 (MiB) 大小。
    默认为 5MiB

    snowball.skipErrs

    指定 false 以指示 MinIO 在读取任何产生错误的对象时停止。
    默认为 true

对于**目标部署**

  • 必需信息

    type

    必须是 minio

    bucket

    部署上的桶。

  • 可选信息

    prefix

    要复制的对象的(多个)前缀。

    endpoint

    目标部署的位置。

    如果目标是命令中指定到的 别名,则可以省略此字段和 credentials 字段。
    如果目标是“本地”,则源必须使用 endpointcredentials 指定远程部署。

    credentials

    授予对对象访问权限的 accesskeysecretKeysessionToken

对于**过滤器**

newerThan

#d#h#s 格式表示的时间长度的字符串。

仅复制比指定时间长度更新的对象。例如,7d24h5d12h30s 是有效的字符串。

olderThan

#d#h#s 格式表示的时间长度的字符串。

仅复制比指定时间长度更旧的对象。

createdAfter

YYYY-MM-DD 格式表示的日期。

仅复制在日期之后创建的对象。

createdBefore

YYYY-MM-DD 格式表示的日期。

仅复制在日期之前创建的对象。

对于**通知**

endpoint

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

token

用于访问 endpoint 的可选 JWT <JSON Web Token>

对于**重试尝试次数**

如果作业被中断,您可以定义要重试作业批次的尝试次数。对于每次重试,您还可以定义每次尝试之间等待的时间。

尝试次数

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

延迟

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

复制作业类型的示例 YAML 描述文件

使用 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: "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