Ubuntu环境下MinIO迁移的详细步骤
MinIO迁移需根据场景(单机/分布式、全量/增量、跨集群)选择合适方法,核心工具为官方提供的mc(MinIO Client),以下是具体操作流程:
安装mc客户端
在迁移机器(源/目标服务器均可)上下载并配置mc,确保其具备访问源和目标MinIO实例的权限:
# 下载mc(Linux amd64架构为例)
wget https://dl.min.io/client/mc/release/linux-amd64/mc
# 赋予执行权限
chmod +x mc
# 移动至系统路径
sudo mv mc /usr/local/bin/
配置源/目标MinIO别名
为源(旧)和目标(新)MinIO实例设置易识别的别名,替换<IP>、<ACCESS_KEY>、<SECRET_KEY>为实际值:
# 配置源MinIO(示例:旧服务器)
mc alias set minio_old http://<源服务器IP>:9000 <ACCESS_KEY> <SECRET_KEY>
# 配置目标MinIO(示例:新服务器)
mc alias set minio_new http://<目标服务器IP>:9000 <ACCESS_KEY> <SECRET_KEY>
注:默认API端口为9000,若修改过需替换为实际端口。
验证连接与桶信息
确认mc能正常访问源和目标实例,并检查桶列表是否一致:
# 查看源MinIO信息(确保存活)
mc admin info minio_old
# 查看目标MinIO信息
mc admin info minio_new
# 列出源桶列表
mc ls minio_old
# 列出目标桶列表(若无则需提前创建)
mc ls minio_new
在源服务器上找到并终止MinIO进程,避免数据写入冲突:
# 查找MinIO进程ID
ps -ef | grep minio
# 终止进程(替换<进程ID>为实际值)
kill -9 <进程ID>
MinIO数据默认存储在启动时指定的目录(如/mnt/data),打包后传输至目标服务器:
# 打包数据目录(源服务器)
tar -zcvf minio_data.tar.gz /mnt/data
# 传输至目标服务器(小数据量用scp,大数据量用rsync断点续传)
scp minio_data.tar.gz <目标服务器用户>@<目标服务器IP>:/tmp/
# 目标服务器解压
tar -zxvf /tmp/minio_data.tar.gz -C /
确保目标服务器数据目录权限与源服务器一致,使用相同参数启动MinIO:
# 修改数据目录权限(替换<运行用户>为实际值,如ubuntu)
chown -R <运行用户>:<运行用户> /mnt/data
# 启动MinIO(端口、控制台地址可自定义)
export MINIO_ROOT_USER=<ACCESS_KEY>
export MINIO_ROOT_PASSWORD=<SECRET_KEY>
minio server /mnt/data --console-address ":9001"
使用mc mirror命令将源MinIO的所有数据镜像至目标MinIO,--overwrite参数覆盖目标已有对象,--remove参数删除目标中多余的文件(保持严格一致,慎用):
# 全量同步所有桶(覆盖并保持一致)
mc mirror --overwrite --remove minio_old/ minio_new/
# 同步单个桶(示例:bucket-demo)
mc mirror --overwrite minio_old/bucket-demo minio_new/bucket-demo
mc mirror minio_old/ minio_new/
mc mirror --watch minio_old/ minio_new/
迁移完成后,务必比对源和目标桶的数据一致性,避免遗漏或冲突:
# 遍历所有桶,逐一比对
for bucket in $(mc ls minio_old | awk '{print $5}' | sed 's#/##'); do
echo "=== 比对桶: $bucket ==="
mc diff minio_old/$bucket minio_new/$bucket || echo "$bucket 存在差异"
done
# 保存差异报告(可选)
mc diff minio_old/bucket-demo minio_new/bucket-demo > /tmp/diff_bucket-demo.log
开启桶公开读(按需):
若需让桶内容可通过URL直接访问,可设置桶策略为公开:
# 遍历所有桶,设置公开读
for bucket in $(mc ls minio_new | awk '{print $5}' | sed 's#/##'); do
mc policy set public minio_new/$bucket
done
切换VIP/域名(高可用场景):
若源MinIO使用了VIP或域名,需将DNS解析指向目标服务器IP,并更新目标MinIO的console-address配置。
mc mirror的--watch参数实时同步,减少停机时间。