批处理框架
版本范围: SILO 20261109 与 mcli 20261109 实现了下述授权、Object Lock 与恢复规则。Server 20261026 不包含这些服务端规则,单独升级 mcli 也不会更新服务端作业执行逻辑。
概述
MinIO 批处理框架允许使用 YAML 格式的作业定义文件(“batch file”)来创建、管理、监控和执行作业。 批处理作业直接在 MinIO 部署上运行,从而利用服务端处理能力,而不受运行 MinIO Client 的本地机器限制。
一个批处理文件定义一个作业任务。
启动后,MinIO 会开始处理该作业。 完成所需时间取决于部署可用的资源。
普通作业故障遵循定义中的重试次数上限。SILO 20261109 区分授权拒绝与临时暂停,详见下文。
MinIO 批处理框架支持以下作业类型:
| 作业类型 | 说明 |
|---|---|
| replicate | 执行一次性复制流程,将数据从一个 MinIO 位置复制到另一个 MinIO 位置。 |
| keyrotate | 执行一次性流程,轮换对象上的 sse-s3 or sse-kms 加密密钥。 |
| expire | 对存储桶中的对象执行一次性立即过期操作。 |
SILO 20261109:授权与重试
SILO 20261109 在创建作业时将本地批处理操作绑定到已认证提交者,并在执行全程强制校验提交者的数据权限(#310、#311)。作业定义中的凭据仅用于授权远端连接,不会授予本地服务器权限。SILO 在每次执行动作前都会重新评估当前 IAM 状态:
- 显式拒绝、凭据过期/禁用/撤销,或凭据密钥、会话令牌、父级身份发生变更时,作业会以
failureReason结束。 - 保留提交者凭据本身的身份元数据编辑(如描述或延后过期时间)与 LDAP 组刷新不会中断作业;每次检查都会重新解析当前状态、组与策略(#318–#320)。
- 策略评估会跳过 IAM 映射仍引用但已删除的策略;依赖后台作业无法获取的请求上下文的
Allow语句不会授予任何权限,仅当可能适用的Deny语句需要批处理执行无法提供的请求时上下文时才拒绝该作业(#318–#320)。 - 批处理作业在过期、密钥轮换与拉取复制中均保留 Object Lock 保护,跳过受保留期或法定保留保护的版本而非绕过保护;当仍有受保护版本或被拒绝键留存时,作业终态为
complete-with-skips(#310、#311)。 - 多存储池
keyrotate作业按目标存储池限定复制操作范围,使其他存储池中的对象副本保持可读(#312)。
IAM 尚未加载、策略资料暂时不可用、授权插件无法给出有效决定,都属于临时故障。提交阶段无法决定授权时返回 503。过期和密钥轮换作业通过 pausedReason 记录暂停,保留已完成进度,并在当前进程内通过有上限的指数退避与随机抖动重试(#313)。列举在开始时或流中途失败,也会暂停这两类作业。密钥轮换选中的源位于正在迁移的存储池时先暂停,冲突解除后继续。每次重试都会重新解析当前身份与权限。等待或暂停的作业不是完成或失败报告,不会被终态报告清理器删除。管理员取消优先于队列和重试。
Push、Pull 和 Snowball 复制作业在必要的授权依赖或报告读取暂时不可用时(包括对象处理过程中发生的故障)也会通过 pausedReason 进入暂停,并在重试时从头重新扫描源端(#324);详见批量复制。复制中途的其他故障遵循作业定义中的有限对象重试上限,可能以失败结束。
启动发现作业时,清单列举或存储读取失败会按有上限的退避重试(#314),并恢复未完成作业(包括运行中的复制作业,#324)。发现过程会记住当前轮次已经入队的清单,避免后续扫描重新执行在等待期间已经结束的作业;取消状态会阻止旧扫描结果重新入队。已经不存在、格式损坏或版本不受支持的清单不会入队,后两类保留在磁盘上供检查。启动发现期间的存储故障恢复后,无需再次重启即可继续发现作业。
已完成作业——包括已完成的 expire 过期作业(#315)、旧格式作业以及完成后提交者凭据过期或变更的作业——在服务重启后仍保持完成状态。来自不记录提交者绑定的旧版本、且尚未完成的作业需要重新提交。新绑定定义和已授权进度报告采用旧执行器会拒绝的格式。这可以阻止旧程序接管这些记录,但不能保证混合版本集群安全:旧节点仍能接收和执行自己的旧格式作业。切换版本前停止提交,并排空或取消旧作业;仍有等待执行的授权作业时不要降级。
20261109 升级与回退
此版本对批处理记录有意设置了格式边界:新作业清单使用 SILO-BATCH v2 封装,已授权的进度报告也使用 v2;20261026 不能执行或恢复这些记录。这不改变普通 S3 对象的格式,但批处理作业不能随二进制无缝降级。
- 升级前停止向所有节点提交新作业,用
mcli batch list ALIAS和mcli batch status ALIAS JOBID盘点作业。等待运行中、等待中和暂停中的作业结束,或用mcli batch cancel ALIAS JOBID取消;保留原始 YAML 定义和已完成工作的记录。 - 升级全部节点后再恢复提交。旧格式未完成作业不会自动获得新授权绑定,需要用有相应数据权限的身份重新提交。先核对已完成的部分,避免重新扫描产生不需要的重复工作;旧作业已完成则无需重交。
- 混合版本期间不要运行批处理:旧节点仍能接收并执行自己的旧格式作业,不受新版本的提交者授权约束。
- 回退前同样停止提交,排空或取消全部新作业,包括暂停的作业。不要指望 20261026 接续新作业的进度,也不要手工剥除格式头或编辑授权记录。保留证据,在兼容版本上核对结果后再决定是否重交。
使用 mcli batch status(20261109)区分暂停、终态失败和仍有受保护工作未处理的完成结果。infraAdmin 仍有其他基础设施管理能力,这些作业检查不把该角色变成严格的数据隔离边界。
MinIO 批处理 CLI
- 安装 MinIO Client
- 为 MinIO 部署定义一个
alias
mc batch 命令包括:
| 命令 | 说明 |
|---|---|
mc batch generate |
为指定作业类型创建基础 YAML 格式模板文件。 |
mc batch start |
根据批处理作业 YAML 定义文件启动批处理作业。 |
mc batch list |
输出部署上当前正在进行的批处理作业列表。 |
mc batch status |
输出服务器上作业事件的汇总信息。 |
mc batch describe |
输出指定作业 ID 的作业定义。 |
mc batch cancel |
停止正在进行的批处理作业。 |
变更: mc RELEASE.2024-07-03T20-17-25Z
mc batch status 会显示活动且正在进行的作业,以及过去三(3)天内完成的任意批处理作业的汇总信息。
mc batch 的访问权限
提交身份需要相应的管理动作权限,以及作业需要的本地 数据权限。定义中的凭据还必须具备远端操作所需的权限。20261109 的具体规则见上文。
执行批处理作业的用户必须具有以下权限。 也可以通过阻止或限制对这些操作的访问,来限制用户使用这些功能:
admin:ListBatchJobs
授予用户查看当前正在处理的批处理作业的能力。
admin:DescribeBatchJob
授予用户查看当前正在处理的批处理作业定义详情的能力。
admin:StartBatchJob
授予用户启动批处理作业的能力。 该作业还可能受到其用于访问源部署或目标部署的凭证进一步限制。
admin:CancelBatchJob
允许用户停止当前正在进行的批处理作业。
可以将这些操作中的任意一个单独分配给用户,也可以任意组合分配。
内置的 ConsoleAdmin 策略包含执行所有这些类型批处理作业操作所需的充分访问权限。
Local 部署
可通过向 mc batch 命令传递一个 alias,对特定部署运行批处理作业。 命令中指定的部署会在该批处理作业的上下文中成为 local 部署。