Files
hzdyjs/docs/部署文档/生产环境双机部署方案/MinIO单机转集群数据迁移指南.md
T
2025-11-27 00:02:01 +08:00

11 KiB
Raw Blame History

MinIO单机转集群数据迁移指南

📋 核心问题

问题:67机器上已经有MinIO数据了,切换到集群模式时,是否需要将数据同步到每个节点?

答案:⚠️ 不需要手动同步,但需要数据迁移!


🎯 关键理解

MinIO集群模式的数据分布机制

重要:MinIO集群模式使用**纠删码(Erasure Code)**技术,数据会自动分布到所有节点,不需要手动同步。

工作原理:

  1. 数据分片:文件被分成多个数据块
  2. 纠删码编码:生成校验块
  3. 自动分布:数据块和校验块自动分布到所有节点
  4. 自动同步:写入时自动同步到所有节点

关键点:

  • ✅ 集群模式会自动同步:写入时自动分布到所有节点
  • ⚠️ 单机数据不能直接使用:单机模式的数据格式与集群模式不同
  • ✅ 需要数据迁移:使用MinIO客户端(mc)迁移数据

🚨 重要说明

单机模式 vs 集群模式的数据格式

特性 单机模式 集群模式
数据目录 /iflytek/soft/minio/data /iflytek/soft/minio/data1 + data2 (67机器) + 68机器的2个目录
数据格式 单机格式 纠删码格式(分片+校验)
数据分布 单一目录 自动分布到4个节点
兼容性 ❌ 不兼容 ✅ 需要重新迁移

结论:

  • ❌ 不能直接使用:单机模式的数据目录不能直接用于集群模式
  • ✅ 需要数据迁移:使用MinIO客户端(mc)将数据从单机模式迁移到集群模式
  • ✅ 集群自动同步:迁移完成后,新写入的数据会自动同步到所有节点

🚀 数据迁移方案

方案选择

推荐方案:使用MinIO客户端(mc)迁移数据

优点:

  • ✅ 安全可靠:使用官方工具,保证数据完整性
  • ✅ 自动处理:自动处理数据格式转换
  • ✅ 支持增量:支持增量迁移
  • ✅ 可恢复:迁移失败可以重试

📋 完整迁移步骤

第一步:备份现有数据(重要!)

在67机器上:

# 1. 检查现有数据
du -sh /iflytek/soft/minio/data
ls -lh /iflytek/soft/minio/data

# 2. 备份数据目录(可选,但强烈推荐)
# 方法1:复制整个数据目录
cp -r /iflytek/soft/minio/data /iflytek/soft/minio/data.backup.$(date +%Y%m%d)

# 方法2:使用tar压缩备份
tar -czf /iflytek/soft/minio/data.backup.$(date +%Y%m%d).tar.gz /iflytek/soft/minio/data

# 3. 验证备份
ls -lh /iflytek/soft/minio/data.backup.*

第二步:准备集群环境

2.1 停止单机MinIO服务

在67机器上:

# 停止单机MinIO服务
pkill -f 'minio server' || true
ps aux | grep minio | grep -v grep

# 如果存在PID文件,删除
rm -f /iflytek/soft/minio/minio.pid

2.2 准备集群数据目录

在67机器上:

# 创建集群数据目录(不要使用现有的data目录)
mkdir -p /iflytek/soft/minio/data1
mkdir -p /iflytek/soft/minio/data2
chmod 755 /iflytek/soft/minio/data1 /iflytek/soft/minio/data2

# 注意:不要删除或移动现有的data目录,保留作为数据源

在68机器上:

# 创建集群数据目录
mkdir -p /iflytek/soft/minio/data1
mkdir -p /iflytek/soft/minio/data2
chmod 755 /iflytek/soft/minio/data1 /iflytek/soft/minio/data2

第三步:启动集群模式(空集群)

3.1 部署集群启动脚本

在67机器上:

# 复制集群启动脚本
cp "67 机器的minio-cluster-start.sh" /iflytek/soft/minio/minio-cluster-start.sh
chmod +x /iflytek/soft/minio/minio-cluster-start.sh

在68机器上:

# 复制集群启动脚本
cp "68 机器的minio-cluster-start.sh" /iflytek/soft/minio/minio-cluster-start.sh
chmod +x /iflytek/soft/minio/minio-cluster-start.sh

3.2 同时启动集群

在67机器上:

cd /iflytek/soft/minio
./minio-cluster-start.sh

在68机器上(几乎同时):

cd /iflytek/soft/minio
./minio-cluster-start.sh

3.3 验证集群启动

# 安装MinIO客户端(如果未安装)
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

# 配置集群别名
mc alias set minio-cluster http://172.16.0.67:9000 minioadmin minioadmin@123456

# 查看集群信息
mc admin info minio-cluster

第四步:数据迁移(核心步骤)

4.1 配置单机MinIO别名(临时)

在67机器上:

# 方法1:如果单机MinIO还在运行,直接配置别名
mc alias set minio-single http://127.0.0.1:9000 minioadmin minioadmin@123456

# 方法2:如果单机MinIO已停止,需要临时启动单机模式进行迁移
# 注意:使用不同的端口,避免冲突
# 修改单机启动脚本,使用9002端口
# 然后启动单机MinIO
# /path/to/67\ 机器的minio-start.sh  # 修改端口为9002
# mc alias set minio-single http://127.0.0.1:9002 minioadmin minioadmin@123456

推荐方法:使用数据目录直接迁移(无需启动单机服务)

# 使用MinIO客户端直接访问数据目录(需要MinIO服务运行)
# 但更简单的方法是:先启动单机模式(使用不同端口),然后迁移

4.2 启动单机MinIO(临时,用于迁移)

在67机器上:

# 创建临时单机启动脚本(使用9002端口,避免与集群冲突)
cat > /tmp/minio-single-temp.sh <<'EOF'
#!/bin/bash
MINIO_HOME="/iflytek/soft/minio"
MINIO_BINARY="${MINIO_HOME}/minio"
MINIO_DATA_DIR="${MINIO_HOME}/data"
export MINIO_ROOT_USER="minioadmin"
export MINIO_ROOT_PASSWORD="minioadmin@123456"
exec "${MINIO_BINARY}" server "${MINIO_DATA_DIR}" \
    --address ":9002" \
    --console-address ":9003" \
    >> /tmp/minio-single-temp.log 2>&1 &
echo $! > /tmp/minio-single-temp.pid
EOF

chmod +x /tmp/minio-single-temp.sh
/tmp/minio-single-temp.sh

# 等待服务启动
sleep 5

# 配置单机别名
mc alias set minio-single http://127.0.0.1:9002 minioadmin minioadmin@123456

# 验证单机服务
mc ls minio-single/

4.3 执行数据迁移

在67机器上:

# 方法1:完整迁移(推荐,首次迁移)
# 这会迁移所有存储桶和数据
mc mirror --remove --overwrite minio-single/ minio-cluster/

# 方法2:迁移特定存储桶
# mc mirror --remove --overwrite minio-single/bucket-name/ minio-cluster/bucket-name/

# 方法3:增量迁移(如果迁移中断,可以继续)
# mc mirror minio-single/ minio-cluster/

迁移过程:

  • 迁移时间取决于数据量大小
  • 可以查看迁移进度:mc ls -r minio-cluster/
  • 迁移完成后,数据会自动分布到所有4个节点

4.4 验证迁移结果

# 1. 比较存储桶列表
echo "=== 单机模式存储桶 ==="
mc ls minio-single/
echo "=== 集群模式存储桶 ==="
mc ls minio-cluster/

# 2. 比较数据大小
echo "=== 单机模式数据大小 ==="
mc du minio-single/
echo "=== 集群模式数据大小 ==="
mc du minio-cluster/

# 3. 测试读取(从集群读取)
mc cat minio-cluster/bucket-name/file-name

# 4. 验证数据分布(查看集群信息)
mc admin info minio-cluster

4.5 停止临时单机服务

在67机器上:

# 停止临时单机服务
kill $(cat /tmp/minio-single-temp.pid) || true
rm -f /tmp/minio-single-temp.pid
rm -f /tmp/minio-single-temp.sh

第五步:验证集群功能

5.1 测试集群读写

# 1. 创建测试文件
echo "test cluster migration" > /tmp/test-cluster.txt

# 2. 上传到集群
mc cp /tmp/test-cluster.txt minio-cluster/test-bucket/

# 3. 从67机器读取
mc cat minio-cluster/test-bucket/test-cluster.txt

# 4. 从68机器读取(验证同步)
mc alias set minio68 http://172.16.0.68:9000 minioadmin minioadmin@123456
mc cat minio68/test-bucket/test-cluster.txt

5.2 验证数据分布

# 查看集群详细信息
mc admin info minio-cluster

# 查看集群节点状态
mc admin service status minio-cluster

# 查看集群健康状态
mc admin heal minio-cluster --dry-run

⚠️ 重要注意事项

1. 数据迁移时机

  • ✅ 推荐:在业务低峰期进行迁移
  • ✅ 建议:先在小规模测试环境验证迁移流程
  • ⚠️ 注意:迁移期间,单机MinIO服务可能不可用

2. 数据迁移方式

  • ✅ 使用mc mirror:官方推荐,安全可靠
  • ❌ 不要直接复制数据目录:单机格式与集群格式不兼容
  • ❌ 不要手动同步data目录:集群模式会自动处理数据分布

3. 数据迁移后

  • ✅ 集群自动同步:新写入的数据会自动同步到所有节点
  • ✅ 无需手动同步:不需要手动同步各节点的data目录
  • ✅ 数据一致性:所有节点数据完全一致

4. 旧数据目录处理

  • ⚠️ 保留备份:迁移完成后,建议保留旧数据目录作为备份
  • ⚠️ 确认迁移成功:验证迁移结果后,再考虑删除旧数据
  • ✅ 建议保留:至少保留7-30天,确保集群稳定运行

🔄 迁移流程图

现有单机MinIO(67机器)
    ↓
备份数据(可选但推荐)
    ↓
停止单机MinIO服务
    ↓
准备集群数据目录(data1, data2)
    ↓
启动集群模式(空集群)
    ↓
启动临时单机服务(用于迁移,端口9002)
    ↓
使用mc mirror迁移数据
    ↓
验证迁移结果
    ↓
停止临时单机服务
    ↓
验证集群功能
    ↓
迁移完成 ✅

📊 迁移检查清单

迁移前:

  • 已备份现有数据
  • 已停止单机MinIO服务
  • 已创建集群数据目录(data1, data2)
  • 已部署集群启动脚本
  • 已验证网络连通性

迁移中:

  • 集群模式已启动
  • 临时单机服务已启动(用于迁移)
  • 已配置MinIO客户端别名
  • 正在执行数据迁移
  • 监控迁移进度

迁移后:

  • 已验证迁移结果(存储桶、数据大小)
  • 已测试集群读写功能
  • 已验证数据分布(所有节点)
  • 已停止临时单机服务
  • 已保留旧数据备份

🎯 总结

核心答案

问题:67机器上已经有数据了,是否需要将数据同步到每个节点?

答案:

  1. ❌ 不需要手动同步:集群模式会自动同步数据到所有节点
  2. ✅ 需要数据迁移:使用MinIO客户端(mc)将数据从单机模式迁移到集群模式
  3. ✅ 迁移后自动同步:迁移完成后,新写入的数据会自动同步到所有节点

关键点

  • ⚠️ 单机数据不能直接使用:单机模式的数据格式与集群模式不同
  • ✅ 使用mc mirror迁移:官方推荐的数据迁移方法
  • ✅ 集群自动同步:迁移完成后,集群会自动处理数据分布和同步
  • ✅ 无需手动同步:不需要手动同步各节点的data目录

📚 相关文档


📝 文档版本: v1.0
🔄 最后更新: 2025-01-27
✅ 适用场景: 从单机MinIO迁移到集群模式