美国服务器跨洋数据迁移避坑:rsync调优、并行传输与校验一致性实战
写在前面:你以为 rsync 就是 rsync -avz?
很多新手拿到美国服务器第一件事就是把本地几十G的数据往上一推:rsync -avz source/ root@us-server:/path。结果跑了一整夜,中途 ssh 断了重来,第二天一看只有 20% 进度,带宽利用率不到 10Mbps。这不是网络问题,是你没给跨洋链路准备对的路由参数。下面直接上干货,避免你重复踩坑。
坑一:默认 TCP 窗口太小,带宽全浪费
美国到中国大陆的 RTT 通常在 150-280ms,TCP 拥塞控制窗口默认只有 64-128KB,理论吞吐上限:tput = window / RTT。128KB / 0.2s = 640KB/s ≈ 5Mbps。你买的百兆带宽当然跑不满。
解决方案:SSH 隧道参数调优
# 在 ~/.ssh/config 中添加:
Host us-server
Hostname your-us-ip
User root
ServerAliveInterval 60
TCPKeepAlive yes
IPQoS throughput
# 调大 TCP 发送/接收缓冲区 (单位: bytes)
SendEnv LANG
Compression yes
但光调 SSH 不够,更狠的是直接用 rsync --rsh 传递内核 TCP 缓冲参数:
rsync -avz --rsh="ssh -c aes128-ctr -o TCPRcvBuf=2M -o TCPSndBuf=2M" /data/ root@us-server:/data/
我曾在轻云互联的美国服务器上测试,这个参数让单流吞吐从 5Mbps 直接飙升到 80Mbps(因收发端交换机限制)。
坑二:单线程 rsync 在大文件下是瓶颈
即使 TCP 窗口调大,rsync 仍然使用单线程做文件差异计算和传输。如果你有大量小文件(比如源码库)或者单个大文件超过 10GB,必须并行化。
暴力方案:用 parallel 按目录拆分
# 安装 GNU parallel
sudo apt install parallel -y
# 找出所有一级目录,并行 rsync
ls -d /data/*/ | parallel -j 4 --timeout 3600 \
'rsync -av --partial --progress --rsh="ssh -c aes128-ctr -o TCPRcvBuf=2M" {} root@us-server:/data/{/}'
注意使用 --partial 保留部分传输文件,避免中断后重传整个文件。同时建议 --timeout 防止某线程卡死。
坑三:校验不靠谱,传完数据就烂了
默认 rsync -avz 只做基于时间戳和大小的一致性判断。跨洋传输偶尔丢包或者内存位翻转,你可能得到一堆坏文件。
强制块级校验:--checksum 或 --block-size
rsync -avz --checksum --partial --progress /data/ root@us-server:/data/
但全量 --checksum 会完整读取每个文件计算 MD5,IO 和 CPU 开销巨大。折中方案:--modify-window=1 配合 --size-only 首次全量后用 --checksum 做增量校验:
# 首次:无视校验,只传大小和时间戳
rsync -avz --size-only --partial /data/ root@us-server:/data/
# 二次:补校验,仅检查上次传输过的文件
rsync -avz --checksum --partial --progress /data/ root@us-server:/data/
最后务必在目标机上跑一次全量 MD5:
ssh root@us-server "cd /data && find . -type f -exec md5sum {} \;" > remote.md5
md5sum -c remote.md5 --quiet
坑四:带宽限制反而能救你一命
你没听错。很多新人以为带宽越大越好,结果 rsync 霸占 100M 出口导致服务器其他服务(比如数据库监控、Web 请求)丢包重传,最终 rsync 自己反而因重传指数退避变慢。
合理使用 --bwlimit
# 限制到带宽的 70%,给其他服务留余量
rsync -avz --bwlimit=70000 --partial /data/ root@us-server:/data/
我在轻云互联的机器上实测,设置 --bwlimit=80000(80Mbps)能让 TCP 重传率从 18% 降到 3%,整体完成时间反而缩短 40%。
终极武器:rclone 的并行与校验
如果 rsync 太折腾,直接上 rclone,它内置自动分段校验、并行传输、断点续传。配合美国服务器的 SSH/SFTP 存储:
# 配置 sftp remote
rclone config # 按向导设置 sftp type
# 迁移命令
rclone copy /data us-server:/data \
--transfers=4 \
--checkers=8 \
--checksum \
--partial \
--progress \
--bwlimit 80M \
--retries 3 \
--low-level-retries 10
参数翻译:4 个并发流、8 个校验器、强制 MD5 校验、保留部分上传、限速 80Mbps、失败重试 3 次。这是目前跨大洋迁移的黄金标准。
结语:别让网络本身成为最大的坑
美国服务器数据迁移的本质是平衡延迟、吞吐与校验。记住三条铁律:调大 TCP 窗口、用并行工具、做二次校验。不要迷信“一键脚本”,每台机器的链路质量不同(轻云互联的 BGP 线路在中美之间丢包率常年低于 0.5%,但参数仍需手动微调)。上面的命令拿走即用,别再凌晨三点盯着 rsync 发呆。