如何用 decommission 排空 MinIO 多池集群的旧数据池并安全移除?

发布时间:2026/9/9 14:33:26
如何用 decommission 排空 MinIO 多池集群的旧数据池并安全移除? 如何用 decommission 排空 MinIO 多池集群的旧数据池并安全移除【免费下载链接】minioMinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.项目地址: https://gitcode.com/GitHub_Trending/mi/minio当你通过追加命令行参数扩展 MinIO 分布式集群后旧池通常运行在较老的硬件上而新池的容量和性能更好。MinIO 提供decommission下线机制把旧池中的数据迁移分散到其余池中排空后再把这个池从服务器命令行里移除。整个过程通过mc客户端的mc admin decommission命令完成验证方式是状态从Draining变为Complete文档明确说明嵌入式 Console UI 尚不支持 decommission 操作只能走 CLI。操作前确认池的表达式和前提条件多池集群的池结构由minio server命令行的参数分组决定。例如一个两池集群的启动参数是minio server http://minio{1...2}/data{1...4} http://minio{3...4}/data{1...4}命令行上每一组路径就是一个池pool本例中http://minio{1...2}/data{1...4}是第 1 池http://minio{3...4}/data{1...4}是第 2 池。decommission 命令中的池参数必须与服务器命令行或MINIO_VOLUMES中写明的表达式逐字一致多池扩展的背景可参考 多池扩展说明。decommission 的行为边界来自 DECOMMISSION.md处于下线状态的池仍然允许对其全部内容做 READ 访问新的 WRITE 会自动调度到未处于下线状态的池启用版本控制的桶在迁移到其它池后每个对象的版本顺序保持不变过程被中断例如集群重启后会从断点继续不支持项服务器会拒绝对配置了 ILM Transition热层迁移的桶执行 decommission迁移到热层的 pooled 配置暂不支持空的 delete marker没有其他后续版本的对象不会迁移到新池以避免在目标池产生空元数据如果集群中的桶使用了 ILM Transition 策略先确认服务器端对 decommission 的拒绝行为这是开始排空前唯一需要排除的硬性拦截项。第一步启动排空对要下线的池执行mc admin decommission start alias/ http://minio{1...2}/data{1...4}其中alias/是mc中配置好的该 MinIO 集群别名后面的池表达式与服务器命令行一致。本例表示把第 1 池的数据分散迁移到第 2 池若集群有更多池则分散到所有未下线的池。第二步监控进度并判断状态不带池参数列出全部池及其状态mc admin decommission status alias/输出为 ID / Pools / Capacity / Status 表格文档示例结果如下容量数值为示例实际按你的集群显示┌─────┬─────────────────────────────────┬──────────────────────────────────┬────────┐ │ ID │ Pools │ Capacity │ Status │ │ 1st │ http://minio{1...2}/data{1...4} │ 439 GiB (used) / 561 GiB (total) │ Active │ │ 2nd │ http://minio{3...4}/data{1...4} │ 329 GiB (used) / 421 GiB (total) │ Active │ └─────┴─────────────────────────────────┴──────────────────────────────────┴────────┘带上池参数查看单个池的进度mc admin decommission status alias/ http://minio{1...2}/data{1...4}进行中文档给出的示例输出速率与容量为文档示例值不要当作固定预期Decommissioning rate at 36 MiB/sec [4 TiB/50 TiB] Started: 1 minute ago当前版本没有更精细的进度界面mc显示的就是数据迁移速率和用量增长。当排空完成时同一命令会输出Decommission of pool http://minio{1...2}/data{1...4} is complete, you may now remove it from server command line出现这句提示或列表中该池状态变为Complete是移除旧池的唯一安全时机。如果查询了一个并不在下线的池会返回ERROR: This pool is not scheduled for decommissioning currently.各状态含义汇总Status含义依据文档Active正常池未在下线流程中Draining正在排空中Draining(Canceled)排空进行中但已被取消Draining(Failed)排空过程失败Complete排空完成可以安全移除该池可选取消或重启排空负载过高时可以把排空推迟到更合适的时间。不带池参数列出进行中的下线任务mc admin decommission cancel alias/带池参数执行实际取消mc admin decommission cancel alias/ http://minio{1...2}/data{1...4}取消后该池状态变为Draining(Canceled)。文档特别警告取消操作不会让池恢复为Active因为其它池上可能已经存在部分命名空间所以 decommission 必须是一次规划好的活动而不是例行操作。排空失败Draining(Failed)或取消后需要继续时对该池重新执行 start 命令即可mc admin decommission start alias/ http://minio{1...2}/data{1...4}第三步安全移除旧池文档明确警告没有Complete状态时任何Active或Draining的池都不允许从配置中移除。确认状态为Complete后按部署方式移除该池的路径参数裸机systemd部署如果环境变量是MINIO_VOLUMEShttp://minio{1...2}/data{1...4} http://minio{3...4}/data{1...4}去掉第一个参数http://minio{1...2}/data{1...4}更新MINIO_VOLUMES然后在集群所有节点上并行执行systemctl restart minio。这会重启全部 MinIO 服务器进程属于会中断服务的操作需按维护窗口安排Kubernetes StatefulSet修改 statefulset 规范中 MinIO 容器的命令行输入去掉旧池参数然后执行kubectl apply -f statefulset.yamlOperator 部署修改tenant.yaml的pools:段把两个池的条目改为一个然后执行kubectl apply -f tenant.yaml。移除完成后集群即只由保留的池提供服务。旧池数据已经分散到其余池版本桶的版本顺序保持不变空的 delete marker 不会出现在新池上配置过 ILM Transition 的桶则从一开始就会被服务器拒绝下线。更多命令细节见 docs/distributed/DECOMMISSION.md。【免费下载链接】minioMinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.项目地址: https://gitcode.com/GitHub_Trending/mi/minio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考