我的公司不久将建立一个博客,我计划设置两台 Web 服务器来托管 WordPress 网站,以实现冗余。通常,当我们向服务器场中的站点发布内容时,我们会将其推送到一侧,进行测试,然后发布到另一侧。对于 WordPress 更新,我们可以轻松地做到这一点。然而,问题变成了如何处理 wp-content 文件夹。由于人们将发布帖子并上传图片,因此无论用户将它们上传到哪台服务器,都需要将这些内容同步到服务器场中的另一台服务器。
我可以设置 DFS 来复制文件,但这似乎有点小题大做。
我可以将 robocopy 设置为每 15 分钟运行一次,然后告诉所有人确保将帖子安排在至少 15 分钟内发布,以便文件有时间复制。
有没有更好的解决方案?也许是 wordpress 插件,这样当图片上传到帖子时,它们会自动复制到服务器群中的其他服务器?
我在 Windows 2008 上运行 Wordpress,因此 Linux 解决方案没有太大帮助。
答案1
我们以前曾使用过 Super Flexible File Synchronizer 来处理此类事情。它工作得很好,并且有许多控制同步的选项。
答案2
我不是 IIS 专家,但希望该技术能够得到应用。
我假设有一个在两个服务器之间负载平衡的共享主机名,并且每个服务器都有一个可公开访问的名称。
您需要的是两台服务器之一上的条件重定向,并结合某种文件同步。如果 URI 以 /wp-content 开头且文件存在,则在本地提供该文件。否则重定向到另一台服务器。服务器 A 重定向到 B,反之亦然。
这应该会为浏览者带来无缝体验 - 他们只会在帖子发布和同步运行之间的窗口中获得图像的临时重定向。根据带宽或冗余问题,同步间隔可能远长于 15 分钟,因为网站应该在帖子发布时正确呈现。
在 nginx 中,我会使用如下块来执行此操作:
location ~ ^/wp-content {
if( -f $request_filename ) {
expires max;
break;
}
rewrite ^/(.+)$ http://otherserver.com/$1 last;
}
nginx 适用于 Windows,但我怀疑您是否愿意切换 Web 服务器软件来执行此操作。希望这个想法可以转换到 IIS 或您正在使用的任何软件。
答案3
我将其作为一个单独的答案,因为它是一种不同的方法:
将图像放入云存储(Amazon S3 或类似存储),然后让用户使用云链接,效果如何?带宽成本可能稍高一些,并且让用户先上传到云可能会存在培训问题,但它消除了对本地文件系统或跨服务器检查的需要。
无论您部署的服务器数量有多少,它也都应该能够扩展。
答案4
您可以使用 rsync 来实现这一点。否则,如果您的文件受源代码控制,则可以使用 Capistrano 之类的工具将文件发布到不同的机器上(必要时甚至可以回滚)。
当你有多台机器时,能够部署和回滚是非常有用。