批量复制
新增: MinIO
RELEASE.2022-10-09T21-10-59Z
批处理框架在 mc RELEASE.2022-10-09T21-10-59Z 中随 replicate 作业类型一同引入。
MinIO 批处理框架允许您使用 YAML 格式的作业定义文件(“批处理文件”)来创建、管理、监控和执行作业。 批处理作业直接在 MinIO 部署上运行,可利用服务端处理能力,而不受运行 MinIO Client 的本地机器限制。
replicate 批处理作业会将对象从一个 MinIO 部署(source 部署)复制到另一个 MinIO 部署(target 部署)。 source 或 target 中 必须 有一方是 local 部署。
与使用 mc mirror 相比,MinIO 部署之间的批量复制具有以下优势:
- 消除了客户端到集群网络成为潜在瓶颈的可能
- 在 SILO 中,提交者必须具备启动作业以及执行相应数据操作的权限;服务端会在作业执行期间持续复核权限
- 如果对象未能复制,作业可提供重试机制
- 批处理作业是一次性的、可编排的过程,可对复制进行精细控制
- (仅限 MinIO 到 MinIO)复制过程会将对象版本从源端复制到目标端
从 MinIO Server RELEASE.2023-05-04T21-44-30Z 开始,另一端部署既可以是另一个 MinIO 部署,也可以是使用实时存储类的任意 S3 兼容位置。 使用复制 YAML 文件中的筛选选项,可排除存储在需要先重新水化或通过其他恢复方式处理后才能提供请求对象的位置中的对象。 复制到此类远端时,批量复制采用 mc mirror 的行为。
行为
SILO 20261109:授权、Object Lock 与重试
在 SILO 20261109 中,Push、Pull 和 Snowball 复制会在执行全程强制校验已认证提交者的本地数据权限,并保留 Object Lock 保护(#310、#311)。Pull 复制会校验复制过来的 Object Lock 头部,在需要时应用目标端默认保留策略,并跳过目标端受 Object Lock 保护的版本(计入 versionsSkippedLocked,终态为 complete-with-skips);复制删除操作同样遵守目标端的 Object Lock 保留期与法定保留设置。
Push、Pull 和 Snowball 复制在必要的授权依赖或报告读取暂时不可用时(包括对象处理过程中发生的故障)进入暂停(#324)。服务端会保存 pausedReason 并保留作业所有权以便自动重试;服务重启后,启动发现过程也会自动恢复未完成的复制作业(#314、#324)。明确的授权拒绝仍是带有 failureReason 的终态失败;重试不会绕过授权。
复制尝试中断后,会从头重新扫描源端并重新统计进度。并发 worker 最后完成的对象仅用于展示进度,不能作为安全的恢复游标。这也覆盖最终暂停报告未能写入的恢复情形。重新执行已完成的工作会增加读取和写入成本;保留源版本 ID 的复制会复用这些 ID,通用 S3 传输重放时则可能在目标端新增版本。批量复制不承诺恰好一次交付。
访问控制与要求
在 SILO 20261109 中,已认证的提交者必须具备 admin:StartBatchJob 和作业所需的本地数据权限。定义中的凭据用于远端连接,不能代替提交者的本地权限。撤销、暂停与版本切换的行为见授权与重试。
批量复制与 bucket replication 具有类似的访问和权限要求。
“source” 部署所使用的凭据必须具有类似以下的策略:
“remote” 部署所使用的凭据必须具有类似以下的策略:
有关向 MinIO 部署添加用户、访问密钥和策略的更完整文档,请参见 mc admin user、mc admin user svcacct 和 mc admin policy。
已配置 Active Directory/LDAP 或 OpenID Connect 用户管理的 MinIO 部署,也可以创建专用的 access keys 来支持批量复制。
筛选复制目标
批处理作业定义文件可按存储桶、前缀和/或筛选条件限制复制范围,从而只复制特定对象。 复制过程对对象和存储桶的访问,可能会受到您在 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 必须 定义源部署和目标部署。 如果 source 部署是远程部署,则 target 部署 必须 为 local。 此外,YAML 还可以定义标志,用于筛选要复制的对象、为作业发送通知或定义作业的重试次数。
变更: MinIO
-
RELEASE.2023-04-07T05-28-58Z:支持从远程 MinIO 部署复制到运行该批处理作业的本地部署。 -
RELEASE.2024-08-03T04-33-23Z:Batch Job Replicate APIv2支持在源端列出多个要复制的前缀。若要从一个源端复制多个前缀,请将replicate.apiVersion指定为v2:
对于 源部署
-
必需信息
type:必须为
minio。bucket:部署上的存储桶。
-
可选信息
prefix:应复制对象的前缀。
从 MinIO ServerRELEASE.2024-08-03T04-33-23Z开始,Batch Job Replicate API 的 v2 允许您列出多个前缀。
将replicate.apiVersion指定为v2,即可从多个前缀执行复制。endpoint:用于复制批处理作业源端或目标端的部署位置。
例如,https://minio.example.net。
如果该部署就是命令中指定的 mc alias set,可省略此字段,让 MinIO 使用该别名对应的 endpoint 和 credentials 值。
源部署或远程部署中必须有一方是 “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 compression algorithm 生成压缩后的打包对象。
默认为false,即不压缩。snowball.smallerThan指定对象大小阈值,小于该值时 MinIO 应对对象执行批量打包。
默认为5MiB。snowball.skipErrs指定 false可让 MinIO 在读取任意产生错误的对象时停止处理。
默认为true。
对于 目标部署
-
必需信息
type:必须为
minio。bucket:部署上的存储桶。
-
可选信息
prefix:要复制对象的前缀。
endpoint:目标部署的位置。
如果目标是命令中指定的 alias,则可以省略此项以及credentials字段。
如果目标是 “local”,则源端必须通过endpoint和credentials指定远程部署。credentials:授予对象访问权限的
accesskey和secretKey,或sessionToken。
对于 筛选条件
|
表示时长的字符串,格式为 仅复制比指定时长更新的对象。
例如, |
|
表示时长的字符串,格式为 仅复制比指定时长更旧的对象。 |
|
采用 仅复制在该日期之后创建的对象。 |
|
采用 仅复制在该日期之前创建的对象。 |
对于 通知
|
用于发送通知事件的预定义 endpoint。 |
|
用于访问 |
对于 重试次数
如果有任何因素中断作业,您可以定义该批处理作业的重试次数。 对于每次重试,您还可以定义两次尝试之间的等待时长。
|
在放弃之前完成该批处理作业的尝试次数。 |
|
每次尝试之间至少等待的时间。 |
replicate 作业类型的 YAML 描述文件示例
使用 mc batch generate 创建基础的 replicate 批处理作业,以便进一步自定义。
对于 local 部署,请勿指定 endpoint 或 credentials。 根据哪一方是 local,删除或注释掉源端或目标端部分中的这些行。