温馨提示×

MinIO在Ubuntu上的数据迁移方法

小樊
43
2025-12-06 22:40:02
栏目: 智能运维

MinIO 在 Ubuntu 上的数据迁移方法

一、方法总览与选择

  • mc mirror 在线镜像(推荐):在两套 MinIO 之间做全量 + 增量同步,支持断点续传与**–watch 实时监听**,网络只需源→目标 9000 端口互通,业务无需停机。适合绝大多数迁移与双活过渡场景。
  • rclone 跨对象存储迁移:兼容多平台与多厂商,具备断点续传、校验和验证、带宽限制等能力,适合跨云/跨环境迁移或作为 mc 的替代方案。
  • 本地数据目录拷贝(单机/同构):停机后直接打包/拷贝 MinIO 数据目录到新机器,保持相同启动参数目录权限后启动,适合单节点非分布式部署的快速迁移。
  • 挂载 + 同步(s3fs):将桶挂载为本地目录后用 rsync/mc 做一次性或周期性同步,适合阶段性迁移/校验边用边迁的过渡方案。

二、方法一 mc mirror 在线镜像(推荐)

  • 步骤
    1. 在能同时访问两端的 Ubuntu 上安装 mc
      wget https://dl.min.io/client/mc/release/linux-amd64/mc && chmod +x mc && sudo mv mc /usr/local/bin/
    2. 配置两端别名并校验连通:
      mc alias set src http://<源IP>:9000
      mc alias set dst http://<目标IP>:9000
      mc admin info src && mc admin info dst
    3. 全量 + 实时增量迁移(后台常驻):
      nohup mc mirror --watch --overwrite src/ dst/ >~/mirror.log 2>&1 &
      说明:src/ 表示所有桶整体镜像;桶不存在会自动创建;–watch 会在全量结束后继续监听新增/变更/删除;–overwrite 覆盖目标同名对象。
    4. 进度与一致性校验:
      tail -f ~/mirror.log
      mc ls --details src/mybucket && mc ls --details dst/mybucket
      mc diff --recursive --size-only src/ dst/(无输出即一致)
    5. 守护与切换:
      • 建议做成 systemd 服务长期守护,迁移完成也不停;正式切换前停止进程:systemctl stop mc-mirror
      • 切换业务流量:应用改配置指向目标;最后一次 mc diff 确认无差异;移除同步进程/服务。
    6. 常见问题速查:
      • 报 “bucket does not exist”:先 mc mb dst/newbucket,或为账号授予 s3:CreateBucket 权限。
      • 速度优化:将 mc 放在与源/目标同网段;提高 ulimit -n 65535;单桶过大可拆分并行跑 mirror。
      • 只迁单个桶:mc mirror --watch --overwrite src/mybucket dst/mybucket。

三、方法二 rclone 跨对象存储迁移

  • 步骤
    1. 安装 rclone:curl https://rclone.org/install.sh | sudo bash
    2. 交互配置源/目标 MinIO(S3 兼容):
      rclone config → 新建 remote → 选择 s3 → provider 选 Minio → 填写 access_key_id/secret_access_keyendpoint(如 http://IP:9000)
    3. 常用迁移命令:
      • 全量拷贝(跳过已存在):rclone copy oldminio:srcbucket newminio:dstbucket
      • 使两端一致(谨慎,目标端多余文件会被删除):rclone sync oldminio:srcbucket newminio:dstbucket
      • 先干跑校验:rclone sync --dry-run oldminio:srcbucket newminio:dstbucket
    4. 特性与建议:rclone 支持断点续传、校验和验证、带宽限制,适合跨云/跨环境迁移;迁移前用 –dry-run 验证,再执行正式命令。

四、方法三 本地数据目录拷贝(单机/同构)

  • 适用前提:单节点非分布式部署,且可直接访问磁盘数据目录。
  • 步骤
    1. 停止源端 MinIO:ps -ef | grep minio → kill -9
    2. 打包/传输数据目录(示例数据目录 /data/minio):
      • 小数据量:tar -zcvf minio_data.tar.gz /data/minio
        scp minio_data.tar.gz user@目标IP:/tmp/
      • 大数据量:rsync -avz /data/minio user@目标IP:/data/
    3. 在目标端恢复:
      tar -zxvf /tmp/minio_data.tar.gz -C /
      chown -R <运行用户>:<用户组> /data/minio
    4. 相同启动参数启动目标端 MinIO:
      export MINIO_ROOT_USER=admin
      export MINIO_ROOT_PASSWORD=password
      minio server /data/minio --console-address “:9001”
    5. 说明:该方法停机窗口明显,适合一次性搬迁;分布式/纠删码场景不建议直接拷贝目录。

五、方法四 挂载 + 同步(s3fs)

  • 适用场景:希望像本地磁盘一样访问桶,或做阶段性迁移/校验
  • 步骤
    1. 安装 s3fs:sudo apt-get update && sudo apt-get install -y fuse s3fs
    2. 配置凭证:echo “ACCESS_KEY:SECRET_KEY” > ~/.passwd-s3fs && chmod 600 ~/.passwd-s3fs
    3. 挂载桶到本地:
      mkdir ~/minio-mount
      s3fs BUCKET_NAME ~/minio-mount -o use_path_request_style -o passwd_file=~/.passwd-s3fs -o url=http://:9000
    4. 迁移/校验:
      • 一次性同步到目标 MinIO:mc mirror /path/to/local/folder myminio/bucket-name
      • 实时监听同步:mc mirror --watch /path/to/local/folder myminio/bucket-name
    5. 注意:挂载是网络实时访问,断网不可用;适合过渡/校验,不建议作为长期生产写入路径。

0