MinIO 服务器迁移(最常用:mc mirror 在线迁移,业务平滑割接)
核心原则:不要直接拷贝旧 MinIO 的 data 目录到新机器,分布式 / 纠删码集群直接拷磁盘目录大概率起不来、数据损坏;单节点单盘也不推荐,容易丢失元数据、版本、桶策略。 推荐方案:新服务器先部署全新 MinIO → mc mirror 全量同步 → 增量同步 → 业务切流量 → 旧集群下线MinIO
一、前置准备
- 新服务器部署 MinIO(版本建议≥旧集群版本,最好同版本;架构保持一致:旧是单节点,新就单节点;旧是分布式纠删码,新也同盘数纠删码)
- 开放网络:旧 MinIO、新 MinIO 的 9000 端口互通
- 安装 mc 客户端(MinIO 官方工具)
3.1先查看服务器架构
uname -m执行结果:
x86_64→ amd64aarch64→ arm64果是 x86_64 (amd64)
wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc mv mc /usr/local/bin/如果是 aarch64 (arm64)
wget https://dl.min.io/client/mc/release/linux-arm64/mc chmod +x mc mv mc /usr/local/bin/下载不了可以直接浏览器下载,然后导入服务器。
验证 mc 是否正常
mc --version能输出版本号就代表成功。
- 配置两个 MinIO 别名(source 旧集群,dest 新集群)
# 旧MinIO mc alias set source http://旧IP:9000 旧AK 旧SK # 新MinIO mc alias set dest http://新IP:9000 新AK 新SK # 验证连通 mc ls source mc ls dest如果这里连接超时:检查防火墙 / 安全组放行 9000 端口
先检查所有桶是否开启版本(关键!)
# 列出所有桶 mc ls source # 逐个查看版本状态,替换bucketname mc version info source/bucketname返回
status: Un-versioned→ 无版本,直接 mirror。返回
status: Enabled→ 开启版本,不能只用 mirror。迁移脚本(裸机执行)
moveMinio.sh
#!/bin/bash # 遍历源所有桶,自动创建目标桶,然后mirror同步 for bucket in $(mc ls source | awk '{print $5}'); do echo "===== 处理桶: $bucket =====" mc mb dest/$bucket # 限速 20MiB,避免打满带宽,按需调整 mc mirror --overwrite --limit-upload 20MiB source/$bucket dest/$bucket done第一次同步不要加 --remove!
第五步:业务割接流程
- 第一次全量同步跑完
- 业务不停机,再跑一次脚本做增量同步(迁移期间新增数据)
- 增量完成,执行差异校验
# 对比两边差异 mc diff source dest/ # 统计对象数量 mc stat source/bucket1 mc stat dest/bucket1
- 确认两边一致,最后一次同步加上 --remove,两边完全对齐
mc mirror --overwrite --remove source/bucket1 dest/bucket1
注意:本文归作者所有,未经作者允许,不得转载