阿里云 OSS 至 AWS S3 跨云迁移实施指南
一、 实战迁移绩效指标 (Benchmark)
在正式实施前,以下是基于该方案的实际测试数据,供参考预期效果:
| 指标项 | 数据表现 |
|---|---|
| 传输文件总数 | 1,438,287 个(约 143.8 万) |
| 数据传输总量 | 186.94 GB |
| 全量迁移总耗时 | 3 小时 20 分 03 秒 |
| 平均传输速率 | 18.13 MB/s (约 7,191 文件/分钟) |
二、 基础环境配置 (Rclone 部署与鉴权)
1. 安装 Rclone 工具
适用于 Amazon Linux 2023 / RHEL / CentOS 环境:
bash
sudo yum install -y unzip curl
curl https://rclone.org/install.sh | sudo bash
# 验证安装
rclone --version
2. 配置文件生成
- 写入以下配置内容(替换你的 AK/SK、Bucket 名称及区域 Endpoint):
(~/.config/rclone/rclone.conf):
bash
mkdir -p ~/.config/rclone
cat << 'EOF' > ~/.config/rclone/rclone.conf
[ali-oss]
type = s3
provider = Alibaba
access_key_id = <你的阿里云RAM账号AK>
secret_access_key = <你的阿里云RAM账号SK>
endpoint = oss-cn-hangzhou.aliyuncs.com # 替换为你的 OSS Endpoint
[aws-s3]
type = s3
provider = AWS
access_key_id = <你的AWS IAM账号AK>
secret_access_key = <你的AWS IAM账号SK>
region = ap-southeast-1 # 替换为你的 S3 存储桶区域代码
EOF
3. 验证连通性
bash
# 测试阿里云 OSS 连通性
rclone lsjson ali-oss:uat-atm-csgo/ --max-depth 1
# 测试 AWS S3 连通性
rclone lsjson aws-s3:prod-baxi-sbl-s3/ --max-depth 1
# 模拟运行(预演,不实际传输)
rclone copy ali-oss:your-oss-bucket-name aws-s3:your-s3-bucket-name --dry-run
三、 核心迁移脚本与调优参数
百万级海量小文件核心避坑指南
- 严禁使用
--fast-list:对于百万级文件,这会导致内存构建索引极其漫长(需等待 15-30 分钟才开始传输)。 - 必须使用
--no-traverse:告诉 Rclone 跳过目标桶的遍历,解决 S3 分页拉取限制和漏文件问题,实现即刻启动传输。
1. 迁移自动化脚本 (sync_oss.sh)
bash
cat << 'EOF' > /data/scripts/sync_oss.sh
#!/bin/bash
# =================================================================
# 阿里云 OSS 到 AWS S3 百万级小文件迁移/同步脚本
# =================================================================
LOG_FILE="./rclone_sync.log"
> ${LOG_FILE}
echo "=== 迁移任务启动时间: $(date) ===" >> ${LOG_FILE}
rclone copy ali-oss:uat-atm-csgo/item/ aws-s3:prod-baxi-sbl-s3/item/ \
--transfers 64 \
--checkers 128 \
--buffer-size 16M \
--no-traverse \
--stats 5s \
-P >> ${LOG_FILE} 2>&1
echo "=== 迁移任务完成时间: $(date) ===" >> ${LOG_FILE}
EOF
chmod +x /data/scripts/sync_oss.sh
#本次使用的脚本 等待了十几分钟才开始传输,可尝试上面脚本
#!/bin/bash
LOG_FILE="./rclone_sync.log"
> ${LOG_FILE}
echo "=== 迁移任务启动时间: $(date) ===" >> ${LOG_FILE}
rclone copy ali-oss:uat-atm-csgo/item/ aws-s3:prod-baxi-sbl-s3/item/ \
--transfers 64 \
--checkers 128 \
--fast-list \
--buffer-size 16M \
--stats 10s \
-v >> ${LOG_FILE} 2>&1
echo "=== 迁移任务完成时间: $(date) ===" >> ${LOG_FILE}
2. 核心性能调优参数解析
| 参数 | 推荐配置 | 作用说明 |
|---|---|---|
--transfers |
64 | 并发传输文件数。海量小文件强烈建议设置为 32-128 提升 IOPS 吞吐。 |
--checkers |
128 | 文件比对检查线程数,充分利用多核 CPU。 |
--buffer-size |
16M | 单线程内存缓冲区大小。64 线程约消耗 1GB 内存,兼顾性能与安全。 |
--no-traverse |
开启 | 不遍历目标端目录,启动即传,避免海量小文件比对卡顿。 |
--stats |
5s | 每 5 秒打印一次干净的传输汇总进度表。 |
四、 后台运维与监控指令
1. 启动迁移任务
bash
cd /data/scripts
nohup ./sync_oss.sh > /dev/null 2>&1 &
2. 常用监控过滤指令
- 实时查看传输进度(剔除刷屏的文件名):
tail -f rclone_sync.log | grep -v "INFO" - 快速获取最新网速与传输总量:
grep "Transferred:" rclone_sync.log | tail -n 2 - 统计已成功传输的文件数:
grep -c "Copied (new)" rclone_sync.log - 实时监控是否有传输错误:
grep -i "error" rclone_sync.log
五、 数据校验与定时增量配置
1. 汇总核对
bash
# 核对源端 OSS 文件数与大小 注: 数据量大文件过多勿轻易尝试oss会产生过大流量
rclone size ali-oss:uat-atm-csgo/item/
# 核对目的端 S3 文件数与大小
rclone size aws-s3:prod-baxi-sbl-s3/item/