MinIO实现数据迁移(mc)

运行两个版本的minio 

version: '2.3'

services:

  # 新版本

  minio2023:

    image:  minio/minio:RELEASE.2022-06-20T23-13-45Z.fips

    container_name: minio2023

    restart: always

    environment:

      - MINIO_ACCESS_KEY=minioadmin

      - MINIO_SECRET_KEY=minioadmin

      - MINIO_ROOT_USER=minioadmin

      - MINIO_ROOT_PASSWORD=minioadmin

      - TZ=Asia/Shanghai

    volumes:

      - /etc/localtime:/etc/localtime

    command: server /data --console-address ":9090" -address ":9000"

    ports:

      - 9000:9000

      - 9090:9090

  

version: '2.3'

services:

  # 旧版本

  minio2021:

    image: minio/minio:RELEASE.2021-06-17T00-10-46Z

    container_name: minio2021

    environment:

      MINIO_ACCESS_KEY: admi

      MINIO_SECRET_KEY: admin123

    command: server /data

    restart: always

    ports:

      - 19000:9000

      - 19001:9001

部署一个 mc 容器,做数据迁移

启动一个mc容器,并进入容器中

docker run -it  --entrypoint=/bin/sh minio/mc:RELEASE.2023-06-06T13-48-56Z

分别设置 minio2021 和 minio2023 的alias

# mc alias set 名称 服务地址 用户名 密码

# 设置minio2021的alias

mc alias set minio2021 http://ip:19000 admin admin123

# 设置minio2023的alias

mc alias set minio2023 http://ip:9000 minioadmin minioadmin

迁移数据

mc迁移数据通常有下面三种场景:

#1. 全量迁移,重名文件不覆盖,如bucket不存在,会自动创建

mc mirror  minio2021 minio2023

#2. 只迁移某个bucket,以test为例,迁移的目标bucket需要提前创建

mc mirror  minio2021/test  minio2023/test  #test要提前在minio2023中创建

  

#3. 加上--overwrite参数,覆盖重名文件

mc mirror  --overwrite  minio2021 minio2023

mc mirror  --overwrite  minio2021/test  minio2023/test

这里使用第一种方式,全量迁移,重名文件不覆盖,如bucket不存在,会自动创建

mc mirror  minio2021 minio2023 

 

通过minio 界面查看数据是否迁移成功  

需要迁移的桶全部迁移成功

MinIO Client (mc) 命令

ls 列出文件和文件夹。

mb 创建一个存储桶或一个文件夹。

cat 显示文件和对象内容。

pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。

share 生成用于共享的URL。

cp 拷贝文件和对象。

mirror 给存储桶和文件夹做镜像。

find 基于参数查找文件。

diff 对两个文件夹或者存储桶比较差异。

rm 删除文件和对象。

events 管理对象通知。

watch 监听文件和对象的事件。

policy 管理访问策略。

session 为cp命令管理保存的会话。

config 管理mc配置文件。

update 检查软件更新。

version 输出版本信息。

     例子

# 执行命令测试能否连通,如有文件或至少存在一个 Bucket,会在回显中列出:

mc ls minio1

# 执行命令获取集群数据大小,如果有文件或存在至少一个 Bucket,会在最后一行打印当前集群所有文件总大小:

mc du minio1

#查看cat ~/.mc/config.json里的配置

mc config host ls

#查看所有alias

mc alias ls

#使用命令检查是否有未完整传输的文件,如果有未传输完全的文件,会在回显中列出:

mc ls --incomplete minio1

#如果有必要,可以删除某个桶中的残缺文件:

mc rm --incomplete $hostName/$bucket

  mc cp 命令需要在目标集群拥有同名 Bucket,mc mirror 不需要,同时 mc mirror 会自动保存目录的层级信息,mc cp 需要额外指定 --recursive 参数,请根据需要酌情选择。

迁移的时候遇到的报错

mc: <ERROR> Unable to list comparison retrying.. S3 API Request made to Console port. S3 Requests should be sent to API port.

 通过单独查看 发现  是minio2023 的地址不对 

我是直接从浏览器复制的地址  为  ip:9090   实则是9000   重新配置别名修改一下 地址就可以了

### MinIO 历史数据迁移的方法和最佳实践 #### 使用 `mc` 工具进行历史数据迁移 MinIO 提供了一个命令行工具 `mc`,该工具能够帮助用户轻松实现数据的复制、同步以及迁移操作。通过此工具执行大规模的数据迁移任务不仅简单而且高效。 ```bash # 安装 mc 工具 wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc sudo mv mc /usr/local/bin/ ``` 为了确保迁移过程中的高可用性和可靠性,在源端与目标端均需配置好相应的 MinIO 服务并验证连接正常[^2]。 #### 迁移前准备 - **评估现有架构**:分析现有的存储结构,确认是否有足够的带宽支持此次迁移工作。 - **规划迁移窗口**:考虑到业务连续性的要求,合理安排迁移的时间段以减少对日常运营的影响。 - **备份重要资料**:在正式开始之前做好充分的数据备份措施以防意外发生。 #### 执行增量同步 利用 `mc mirror` 或者 `mc cp` 来完成整个桶或特定目录下的文件传输。对于大容量的数据集推荐采用分批次方式进行处理,避免一次性加载过多资源造成系统压力过大。 ```bash # 实现全量同步 mc mirror --watch source-bucket destination-bucket # 对单个文件夹做同步 mc cp -r source-folder/ destination-folder/ # 断点续传功能可有效应对网络波动等问题 mc cp --resume largefile.txt s3/destination-largefile.txt ``` 上述命令中 `-r` 参数表示递归模式,即连同子目录一起复制;而 `--watch` 则开启持续监听变化的功能,一旦检测到新的改动便会立即触发更新动作[^3]。 #### 验证一致性 迁移完成后应当仔细核对两端的数据是否完全一致,可通过计算哈希值对比校验等方式来进行最终的质量检查。 ```python import hashlib def calculate_md5(file_path): hash_md5 = hashlib.md5() with open(file_path, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) return hash_md5.hexdigest() source_file_hash = calculate_md5('path/to/source/file') target_file_hash = calculate_md5('path/to/target/file') if source_file_hash == target_file_hash: print("Data integrity verified.") else: print("Warning! Data mismatch detected!") ``` #### 考虑分布式部署优化 针对超大数据量的情况,考虑引入多节点集群方案或是借助云服务商提供的对象存储服务作为临时过渡介质,从而进一步提升整体吞吐率降低延迟现象的发生概率[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值