文件

批次複製

新版本: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 版本變更:伺服器 RELEASE.2023-02-17T17-52-43Z

透過指定 MINIO_BATCH_REPLICATION_WORKERS 環境變數,以多個平行工作程式執行批次複製。

從 MinIO 伺服器 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 開始,批次複寫預設會自動批次處理並壓縮小於 5MiB 的物件,以便在來源和遠端之間有效率地傳輸資料。遠端 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
...

針對**來源部署**

  • 必要資訊

    類型

    必須是 minio

    儲存貯體

    部署上的儲存貯體。

  • 選用資訊

    前置詞

    應該複寫的物件前置詞。
    從 MinIO Server RELEASE.2024-08-03T04-33-23Z 開始,批次工作複寫 API 的 v2 允許您列出多個前置詞。
    replicate.apiVersion 指定為 v2,以從多個前置詞複寫。

    端點

    要用於複寫批次工作的來源或目標的部署位置。
    例如,https://minio.example.net

    如果部署是指定給命令的 mc alias set,則省略此欄位,以指示 MinIO 使用該別名作為端點和憑證值。
    來源部署遠端部署必須「local」 別名。
    非「local」部署必須指定 endpointcredentials

    路徑

    指示 MinIO 使用路徑或虛擬樣式 (DNS) 查閱儲存貯體。

    - 指定 on 以使用路徑樣式
    - 指定 off 以使用虛擬樣式
    - 指定 auto 讓 MinIO 決定正確的查閱樣式。

    預設值為 auto

    憑證

    授與物件存取權的 accesskey:secretKey:sessionToken:
    僅針對非 local 部署的部署指定。

    雪球

    新增版本: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

針對**目標部署**

  • 必要資訊

    類型

    必須是 minio

    儲存貯體

    部署上的儲存貯體。

  • 選用資訊

    前置詞

    要複寫的物件前置詞。

    端點

    目標部署的位置。

    如果目標是指定給命令的 別名,您可以省略此欄位和 credentials 欄位。
    如果目標是「local」,則來源必須使用 endpointcredentials 指定遠端部署。

    憑證

    授與物件存取權的 accesskeysecretKeysessionToken

針對**篩選器**

newerThan

表示以 #d#h#s 格式表示的時間長度的字串。

僅複寫比指定時間長度更新的物件。例如,7d24h5d12h30s 是有效的字串。

olderThan

表示以 #d#h#s 格式表示的時間長度的字串。

僅複寫比指定時間長度更舊的物件。

createdAfter

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

僅複寫在此日期之後建立的物件。

createdBefore

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

僅複寫在此日期之前建立的物件。

針對**通知**

端點

用於傳送通知事件的預先定義端點。

權杖

用於存取 endpoint 的選用 JWT <JSON Web Token>

針對**重試次數**

如果某些情況中斷了工作,您可以定義重試工作批次的次數。對於每次重試,您也可以定義每次嘗試之間的等待時間長度。

嘗試次數

在放棄之前完成批次工作的嘗試次數。

延遲

每次嘗試之間要等待的最短時間。

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