我目前正在构建一个小型 CDN 拓扑系统,正在寻找在所有服务器中同步某个文件夹内的文件的最佳方法。
我需要能够将文件上传到某个单身的FTP,并将其复制到所有其他服务器。
需要同步的文件夹大小约为 50GB,我需要将其同步到取决于相差5分钟。
所有服务器上的操作系统都是 Windows 2008 R2。
有任何想法吗 ?
答案1
我最终使用了一个名为 RepliWeb 的企业级程序,它的效果非常出色!
值得推荐!
答案2
在 Linux 上我建议使用 RSYNC,几个 RSYNC‘克隆’对于 Windows
RSYNC 非常适合传输文件,您可以告诉它只传输新文件或修改过的文件,甚至可以删除原始服务器上不可用的旧文件。我绝不是 Windows 专家,但我猜您可以在 PowerShell/Batch 脚本中设置它,并每隔几分钟自动运行它,或者在需要更新时手动运行它。如果没有新内容要传输,RSYNC 会弄清楚并且不会运行,这样您就不会使用带宽。
第二种选择取决于你的技能等,即开发一些自定义软件来执行此操作。我猜这会相对简单,你可以使用 Python、Ruby 甚至 PHP 之类的语言来执行此操作,但需要遵循几个基本步骤;
- 加载远程服务器列表
- 获取本地文件列表及其最后修改日期
- 使用 FTP 或类似工具连接到一个*远程服务器,列出文件并获取远程服务器上的最后修改日期
- 确定远程服务器上哪些文件需要同步(上次修改的日期会有所不同,或者文件不存在)
- 将文件传输到所有远程服务器
*我说的是一台服务器,假设所有服务器都同步,即文件修改时间相同
我记得用 Python 写过一个类似的脚本,等我回家后我会看看能不能帮你找到,但如果你能让它工作的话,我还是建议 RSYNC 是最好的选择(也就是说,它已经完成了所有这些工作)
答案3
解决方案:假设您确实有一个主 FTP 和多个从属 FTP:
上传后,通过调用yourwebsite/distribute.php触发系统('distribute.sh'),其中包含:
rsync <a ton of parameters to upload to Slave A>
rsync <a ton of parameters to upload to Slave B>
rsync <a ton of parameters to upload to Slave C>
rsync 确实支持惰性同步。因此您无需一直推动整个过程。
顺便说一下,另一种方法应该是(滥用)使用版本控制系统“git”。因此,任何上传到那里的东西都会自动添加到仓库(我认为 git 使用不同的术语),您的从属服务器(例如 cronjob)会频繁同步到该 git。好处可能是(更多)事务安全性。不会有将半上传文件分发给从属服务器的危险。
Perforce(据我所知,最多可供 2 个用户和 5 个客户端免费使用。非常非常稳定,但二进制文件也很大)或 SVN(烦人的 .snv 子文件夹。我不会说这个东西很稳定...)可能会为您做同样的事情。在我看来,Perforce 比 git 更容易掌握。
但 git 可能是“更现代”的选择,而且是免费的。不确定它如何应对巨大的二进制文件,即是否可以说服它不要尝试差异化。或者将从属服务器上的版本控制深度保持在零...
评论:嘿,我想知道你是否和我一样:我从事新闻摄影,所以在现场我必须使用烦人的、不稳定的、微小的上传连接才能到达(理想情况下只有 1 个)FTP 服务器。从那里(我的网络托管服务器中心),如果可以通过那些(我相信:手臂粗的 T1 电缆......)快速分发到所有图像机构,那就太好了......
我还没有编写解决方案,但我即将......