MinIO 数据迁移到 CentOS 的可行方案
一、方案总览与选择建议
| 方案 |
适用场景 |
优点 |
注意事项 |
| rclone |
跨机房/跨公网、对象存储到对象存储 |
配置简单、支持断点续传、可限速与并发、可校验 |
需正确配置 S3 兼容参数与访问控制 |
| mc mirror |
两个 MinIO/S3 兼容服务之间镜像 |
官方客户端、支持增量/持续同步、可删除多余对象 |
建议先 dry-run 验证,再执行 |
| 服务器端直拷数据目录 |
单机部署、可停机窗口 |
速度快、不依赖网络对象协议 |
需停服、严格保持目录结构与启动参数一致 |
以上三种方案均已在生产实践与社区文档中广泛验证,适用于在 CentOS 上完成 MinIO 数据迁移的不同场景。
二、方案一 rclone 跨对象存储迁移(推荐)
- 安装与配置
- 安装 rclone(CentOS):
- curl https://rclone.org/install.sh | sudo bash
- 生成配置文件(示例):
- rclone config
- 或使用手工配置 ~/.config/rclone/rclone.conf
- 示例配置(两个 MinIO/S3 兼容端):
- [minio-src]
- type = s3
- provider = Minio
- env_auth = false
- access_key_id = SRC_ACCESS_KEY
- secret_access_key = SRC_SECRET_KEY
- region = cn-east-1
- endpoint = http://src-minio:9000
- [minio-dst]
- type = s3
- provider = Minio
- env_auth = false
- access_key_id = DST_ACCESS_KEY
- secret_access_key = DST_SECRET_KEY
- region = cn-east-1
- endpoint = http://dst-minio:9000
- 迁移命令
- 全量迁移(对象级别一致性,目标与源保持一致,慎用删除策略):
- rclone sync minio-src:SOURCE_BUCKET minio-dst:DEST_BUCKET
–progress --transfers 16 --checkers 16
–retries 3 --log-file /var/log/rclone-sync.log
- 先做演练(不真正传输):
- rclone sync minio-src:SOURCE_BUCKET minio-dst:DEST_BUCKET --dry-run -P
- 校验一致性(对象大小/修改时间):
- rclone check minio-src:SOURCE_BUCKET minio-dst:DEST_BUCKET --log-file /var/log/rclone-check.log
- 常用参数
- –dry-run:演练
- -P/–progress:显示进度
- –transfers=N:并发文件数
- –checkers=N:并发校验数
- –retries=N:失败重试次数
- –log-file=FILE:输出日志
- –exclude/–include/filter-from:包含/排除规则
- 证书与连通性
- 自签名证书可临时改用 http 完成迁移后再恢复 https(注意网络安全)。
三、方案二 mc mirror 镜像同步(官方客户端)
- 安装 mc
- curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
- chmod +x mc && sudo mv mc /usr/local/bin
- 配置别名
- mc alias set src http://src-minio:9000 SRC_ACCESS_KEY SRC_SECRET_KEY
- mc alias set dst http://dst-minio:9000 DST_ACCESS_KEY DST_SECRET_KEY
- 迁移与校验
- 全量镜像(不删除目标多余对象):
- mc mirror --progress src/SOURCE_BUCKET dst/DEST_BUCKET
- 镜像并保持一致(会删除目标端多余对象,谨慎使用):
- mc mirror --remove --progress src/SOURCE_BUCKET dst/DEST_BUCKET
- 演练:
- mc mirror --dry-run --progress src/SOURCE_BUCKET dst/DEST_BUCKET
- 持续增量同步(适合割接窗口前的持续对齐):
- mc mirror --watch --progress src/SOURCE_BUCKET dst/DEST_BUCKET
- 批量迁移多个桶(示例)
- for b in $(mc ls src | awk ‘{print $5}’); do
mc mirror --progress src/$b dst/$b
done
四、方案三 服务器端直拷数据目录(单机/可停机)
- 适用前提
- MinIO 为单机部署,且可在迁移窗口内停服,确保数据静止。
- 操作步骤
- 停服备份:
- 打包数据目录(示例路径 /data/minio):
- tar czf /tmp/minio_data.tar.gz -C /data minio
- 传输到目标 CentOS:
- rsync -avz --partial /tmp/minio_data.tar.gz user@dst-centos:/tmp/
- 在目标端解压并恢复目录结构:
- tar xzf /tmp/minio_data.tar.gz -C /data
- 使用与源端一致的启动参数启动目标端 MinIO(端口、用户、密码、存储路径等保持一致)。
- 适用场景与风险
- 速度快、不依赖对象协议;但要求严格停机与目录一致性,不适用于分布式模式。
五、迁移前后关键注意事项
- 时间同步与时钟
- 两端 时区/时间 保持一致,避免签名与校验异常:
- timedatectl set-timezone Asia/Shanghai
- ntpdate ntp.aliyun.com(或可用 chrony)
- 访问与权限
- 确保用于迁移的 AccessKey/SecretKey 对源/目标均具备列举、读取、写入(及删除,如使用 --remove)权限。
- 安全与证书
- 自签名证书可在迁移阶段临时改用 http,迁移完成后再启用 https 并恢复安全策略。
- 一致性校验
- 迁移完成后使用 rclone check 或对象列表比对,确保对象数量、大小、修改时间与内容一致。
- 大对象与并发
- 合理设置并发(–transfers/–checkers),避免内存与连接数过载;大文件会自动分片传输。
- 网络稳定性
- 长时任务建议使用 screen/tmux 或 systemd 服务托管,防止会话中断导致迁移失败。