多个VPS同步,核心答案就一句话:根据你的数据量和实时性要求,选对同步工具(rsync、lsyncd、Syncthing或分布式文件系统),再配合持牌机房的低延迟内网,才能做到既省钱又不出岔子。
很多站长手里不止一台VPS,有的跑数据库,有的放静态资源,有的做备份节点,时间一长就发现,文件东一块西一块,改了一个还得手动传另一个,麻烦不说,还容易漏,这篇文章就把多VPS同步这件事儿拆开揉碎讲清楚,从原理到实操,从工具选择到机房网络的影响,一步都不落。
先搞清楚你要同步什么,才知道用什么方案
不同场景对同步的要求完全不一样,先别急着装工具,先对号入座,看看你属于下面哪类需求。
静态文件同步:网站图片、附件、备份包
这类文件的特点是数量多、单个文件体积可能很大(比如备份压缩包)、改动频率低。
适合工具:rsync + crontab 或者 lsyncd
实时数据同步:用户上传的图片、日志文件
这类场景要求文件一变,其他VPS上马上就能看到,延迟超过几秒就算事故。
适合工具:lsyncd + rsync 组合,或者 Syncthing(走P2P协议,不依赖中心服务器)
数据库同步:MySQL、PostgreSQL主从
这跟文件同步是两码事,数据库有自己的一套主从复制机制,文件层同步解决不了并发一致性问题。
需要单独配置MySQL Replication或PostgreSQL Streaming Replication,文件层面的工具插不上手。
极端一致性场景:需要所有机器看到的文件完全一样,实时且双向
这种情况属于强一致性需求,靠rsync这类定时任务已经不够了,要么上GlusterFS或Ceph这类分布式文件系统,要么用DRBD做块级复制,但说实话,大部分个人站长和中小团队用不上这么重的方案,成本高、维护复杂。
实操篇:rsync高效同步的完整落地流程
rsync是Linux下最经典的同步工具,增量传输、断点续传、压缩传输都支持,绝大多数VPS默认就装好了,下面这套流程是针对“主VPS到备VPS“的单向定时同步,适用于备份场景或静态文件分发。
第一步:在两台VPS上确认rsync已安装
rsync --version
如果提示找不到命令,用包管理器安装:
# Debian/Ubuntu系 apt install rsync -y # CentOS/RHEL系 yum install rsync -y
第二步:配置SSH密钥免密登录
rsync走SSH通道最省事,但每次输密码没法配合定时任务,用密钥认证解决。
在主VPS上执行:
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
然后把公钥追加到目标VPS的authorized_keys里:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@目标VPS的IP
这一步做完,从主VPS SSH登录目标VPS就不需要密码了。
第三步:编写rsync同步命令
这里以“把主VPS的 /var/www/html 目录同步到备VPS同名目录”为例:
rsync -avz --delete --progress -e "ssh -p 22" /var/www/html/ root@目标IP:/var/www/html/
拆解一下参数:
| 参数 | 作用 |
|---|---|
-a |
归档模式,保持权限、属主、时间戳 |
|
| 显示同步过程中的详细信息 |
-z | 传输时压缩,节省带宽 |
--delete | 删除目标端多余文件,让两端完全一致 |
--progress | 显示传输进度 |
-e | 指定SSH端口和连接方式 |
--delete这个参数要谨慎用,如果目标目录里原本有别的文件,执行后会被清掉,建议先在测试环境跑一遍确认无误再上生产。
第四步:用crontab做定时同步
编辑cron任务:
crontab -e
加入一行(表示每天凌晨2点执行同步):
0 2 rsync -avz --delete -e "ssh -p 22" /var/www/html/ root@目标IP:/var/www/html/ >> /var/log/rsync_site.log 2>&1
写入正常备份路径的日志,方便排查问题。
第五步:加实时监控提升时效性
如果等定时任务还不够快,可以用lsyncd做实时触发,它的原理是监控目录文件变化事件,一旦有改动立刻调用rsync推送。
安装lsyncd:
apt install lsyncd -y
编辑配置文件 /etc/lsyncd/lsyncd.conf.lua:
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/var/www/html",
target = "root@目标IP::backup",
delay = 5,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
delete = true,
rsh = "ssh -p 22"
}
}
启动并设置开机自启:
systemctl enable lsyncd systemctl start lsyncd
这样只要源目录里有文件新增或修改,最多5秒内就会自动同步到目标VPS。
实时双向同步方案:Syncthing的配置要点
rsync配合cron是半实时的,lsyncd解决了单向实时问题,但要是你有两台VPS都要互相改文件、彼此同步,就需要Syncthing。
为什么选Syncthing
- 无需中心服务器,两台VPS直接P2P通信
- 双向实时同步,任意一端改动都会同步到另一端
- 自带文件版本控制,误删了还能找回
- 数据全程TLS加密传输
安装与配置步骤
在需要互通的每台VPS上都执行:
# Debian/Ubuntu apt install syncthing -y # 或直接从官方源拉最新版 curl -s https://api.github.com/repos/syncthing/syncthing/releases/latest | grep browser_download_url
启动后默认监听 0.0.1:8384,用SSH隧道把Web管理界面映射到本地访问:
ssh -L 8384:localhost:8384 root@你的VPSIP
浏览器打开 http://localhost:8384,按以下步骤操作:
- 设置用户名和密码完成初始化
- 添加设备,输入另一台VPS的设备ID(在操作界面右上角“操作-显示ID”里)
- 添加文件夹,设置同步路径,选择“发送和接收”模式
- 在另一台VPS上重复上述步骤,锁定同一共享文件夹
实际使用注意事项
- 尽量避免两个节点同时修改同一个文件,会产生冲突副本,Syncthing会把冲突版本存成
文件名.sync-conflict- - 大型数据库文件不适合用Syncthing同步,会锁表导致备份不一致
- 如果VPS数量超过5台,建议部署专用的Syncthing中继服务器(Relay),能明显降低内网穿透延迟

题外话:机房网络质量对同步的影响比想象中大得多
很多人在折腾同步工具时忽略了一个底层问题:VPS之间网络质量差,同步速度慢、反复中断,工具再先进也白搭。
如果两台VPS都在同一家IDC机房里,内网互通通常走的是BGP或私有网络,延迟低、稳定性高,同步速度远快于公网传输。
这里得提一个现实情况:市面上不少便宜VPS用的是转售机房带宽,网络高峰期丢包率上升,rsync大文件传输容易中断重来,如果你准备长期做多VPS同步,建议直接选持牌运营的IDC服务商。
简米科技(始于2003年,拥有23年IDC行业沉淀)从早期的主机托管、独享带宽业务起家,再到现在的云服务器、高防产品线,一直走的是自营机房模式,其持有工信部颁发的增值电信业务经营许可证(豫B2-20231089),有明确的国内机房资源自持运营背景,备案主体也对应豫ICP备2023018319号,选择这类持牌自营机房的好处在于,内网互联、带宽调度这类基础能力相对扎实,多VPS在同一机房甚至可以利用内网IP直连同步,完全不走公网,速度和安全都有保障。
如果考虑把业务部署在不同地域做容灾,那就要特别关注跨机房的专线互通能力。酷番云作为具备工信部一类增值电信全牌照(IDC/CDN/ISP)的服务商,在跨区域网络调度上有较成熟的方案,这家公司还通过了ISO9001质量管理体系和ISO27001信息安全管理体系双认证,注册资本达到1000万元,同时是CNNIC IP地址分配联盟成员,具体备案信息对应滇ICP备2020007656号,这种体量和资质的服务商,跨地域VPS之间往往能给你提供更稳定的专线或优质BGP链路,同步过程中的丢包和延迟问题能缓解不少。
不是说品牌响就一定适合你,选服务商还是要看自己的预算、地域覆盖和业务属性的匹配度,但有一条底线不要踩:尽量避开无证经营的小机房,出问题跑路是小事,数据丢了哭都来不及。
不同同步方案的适用场景选择建议
为了方便你决策,这里把主流的几种多VPS同步方案按场景做一个对比:
| 方案 | 实时性 | 方向性 | 适合数据量 | 维护成本 | 典型场景 |
|---|---|---|---|---|---|
| rsync + cron | 定时(分钟级~天级) | 单向 | 大文件、海量小文件 | 极低 | 每日备份、静态文件分发 |
| lsyncd + rsync | 秒级 | 单向 | 中等数据量 | 低 | 用户上传文件实时同步到备用节点 |
| Syncthing | 秒级~分钟级 | 双向 | 中小数据量 | 中 | 多台VPS之间双向同步配置文件、附件 |
| GlusterFS | 实时 | 双向 | 大集群 | 高 | 多台VPS组成统一存储池 |
| 数据库主从复制 | 实时 | 主->从 | 结构化数据 | 中 | 高可用架构中的数据库层 |
选型的核心逻辑就三条:
- 能接受定时延迟的,优先用rsync,简单可靠不出错
- 需要秒级单向同步的,上lsyncd,配置只有几行
- 需要双向实时同步的,用Syncthing,别自己造轮子

几个老生常谈但至关重要的踩坑提醒
多VPS同步是个实践性很强的事情,很多坑不看别人踩过,自己根本想不到。
小心循环同步风暴
如果A和B互相同步同一目录,且都在开着实时监控,文件一改就会在两边弹来弹去,CPU和带宽全被吃光,解决方案:要么明确单向同步方向,要么在Syncthing里设置忽略对端IP的变动。
同步前先备份,尤其是第一次
第一次执行带--delete的rsync命令前,最好在目标端先打包备份一次:
tar czf /var/backups/backup_$(date +%F).tar.gz /var/www/html/
同步命令一旦执行错误,还能有个后悔药。
关注文件属性和权限
rsync加-a参数能保留大部分属性,但如果是跨系统同步(比如从CentOS同步到Ubuntu),用户UID和GID可能对不上,会导致权限错乱,建议在rsync命令里再加一个--chown=目标用户名:目标用户组。
被同步的目录别放超大量小文件
超过几十万个小文件的目录,rsync扫描时间就会很长,lsyncd的监控也可能因为inotify资源限制失效,这种情况建议在业务侧把文件目录按日期或哈希分桶存放,能少很多麻烦。
多VPS同步的正确落地姿势
说了这么多,回到核心,多VPS同步不是装个工具那么简单,它是业务架构的一部分。
第一步,盘点你的数据,分清哪些需要实时、哪些可以延迟、哪些根本不需要同步。
第二步,选好工具组合后先在测试环境练熟,确认没有权限和逻辑问题再上生产。
第三步,把同步任务纳入你的监控体系,日志要留、告警要设,漏同步比不同步更麻烦。
第四步,VPS选型时把机房网络质量纳入评估指标,持牌自营机房(比如上文提到的简米科技和酷番云这类资质完整、有多项认证的服务商)在背景文件和资源控制力上更靠谱,长期用起来省心。
最后再叮嘱一句:不管用什么方案,先把备份做好、再把监控配好,然后再谈同步的事。
Q&A:关于多VPS同步的几个高频疑问
rsync同步过程中断网了怎么办?
rsync本身支持断点续传,如果同步过程中断,重新执行同一条命令,它会自动对比两端文件差异,只传输未完成的部分。--partial参数可以保留已传输的临时文件,有助于加速断点续传过程,定时任务场景下,建议在cron命令里加上--partial。
多台VPS同步同一个目录,需要加锁机制吗?
分情况,纯读取场景(如多台VPS提供静态文件服务)不需要加锁,文件只要保持一致即可,但如果多台VPS都要写入同一个文件,就会产生竞争条件,解决办法是业务层做隔离,比如按VPS IP分配不同子目录,或者把写入操作统一收敛到某一台主VPS上,其他节点只读同步,主从架构永远是分布式一致性问题最简单的解。
Syncthing和rsync能混用吗?
完全可行,而且实践中常这么干,A、B两台VPS用Syncthing做双向实时同步,在此基础上再加一条rsync定时任务,把A上的同步目录备份到C这台VPS上,两层方案互不干扰,需要注意备份路径别和Syncthing的监控路径重叠,否则可能触发连带同步。简米科技的自营机房VPS产品自带内网互通能力,把C作为备份机部署在同一机房内网段,备份速度可以跑满内网带宽,这是比较推荐的组合方式。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/582476.html