Wordpress 使用 robocopy 进行 IIS 复制

joe*_*g07 10 windows iis web-server wordpress

我们在 4 个 IIS 服务器上设置了一个 wordpress 环境。我们正在考虑使用触发 robocopy 脚本的计划任务每​​ 5 分钟复制一次 wordpress 目录。

对这种做法有何看法?有没有人用过这个或类似的?

Ant*_*ito 12

拥有 4 个同时共享相同文件的前端服务器,并且每个服务器都能够在不使用某种 DFS 或专用于目录同步的第三方程序的情况下进行写入,这将是一场噩梦。

使用 azure,您可以查看 3 件事。

  1. 共享存储,获得自己的专用存储可能会产生一些成本,我不确定配置,但 Azure 确实提供了这一点。这将确保您的所有文件在写入后立即可供每个服务器使用。

  2. Azure DFS,DFS 是一个基于 Windows 的目录同步工具,效果很好,也不确定成本,但配置可能会更容易一些。DFS 确实异步工作,所以有一点延迟但不多。

  3. (我将解释这将如何完成,然后不再谈论它,因为这是一个可怕的想法并且会失败。)创建一个脚本,该脚本将首先比较所有四台服务器上的数据,然后复制差异数据。您需要将每个目录共享给运行脚本的一台服务器,设置权限以便服务器可以读写,然后进行故障排除,排除故障。

上面的任何一个选项都可以完成这项工作,如果您的工作取决于这项工作,我建议您远离选项 3。

话虽如此,而且您不想花钱,请按照以下步骤操作。

  1. 看看一个叫做“免费文件同步”的程序。免费版本有一些非常好的功能,我相信有付费版本,但我不确定您获得的增强功能。我在我的很多开发环境中都使用过它,试图实现类似于您想要做的事情并且懒得设置 DFS。

  2. 只让一台服务器可写,这可以通过在每台服务器上配置一个 URI 来轻松完成,该 URI 表示如果创建文章转到 ServerA,或者在您的 web.config 中重写 URL,或者 WordPress 是 php 使用:

    header('位置:http : //myhost.com/mypage.php ');

每个都需要一点编码和 PHP、IIS 知识。

  1. 真正有趣的部分是,ServerA 是作者服务器(仅可写服务器),我们如何在没有负载均衡器的情况下将流量定向到 ServerB、ServerC 和 ServerD 以进行读取?

简短的回答你不能,那不完全正确,我有一个客户曾经坚持不使用负载均衡器,他能够通过一系列 powershell 脚本将连接从一台服务器移动到另一台服务器基于数量worker 处理每个盒子或类似的东西。无论哪种方式都很难做到,不值得投入时间和精力。

看看你是否不能在服务器上配置网络负载平衡,它需要一个额外的 IP,但它只有一个 DNS 更改,流量可以分布在 3 个服务器上读取。

祝你好运!


joe*_*g07 12

谢谢大家的建议。

我们的解决方案是使用名为 resilio 的工具使用对等同步方法。

Resilio 允许我们在对等同步集群中配置多台计算机(在本例中为 IIS 前端)。从群集中的每台计算机中选择一个文件夹用于同步过程。

resilio 服务(在后台运行的 Windows 服务)监视这些文件夹是否有任何更改,如果对相关前端上的任何指定文件夹进行了更改,resilio 会将更改推送到其他服务器。

我希望这可以帮助将来遇到类似问题的其他人。


Tim*_*Tim 11

我不认为计划任务和 Robocopy 是一个很好的方法。由于 5 分钟的窗口,有时会请求资源但负载均衡器选择的服务器不可用。对于大部分静态站点,这种情况发生的频率远低于频繁更改的繁忙站点。更高的频率或使用不同的同步技术,如 Bittorrent Sync(现在称为Resilio Sync)会大大改善这一点,但不能消除问题。

将您的 wp-content 或者只是 wp-content/uploads 文件夹放到共享驱动器上将是一个更好的解决方案。另一种看待这个问题的方法是让其中一台服务器托管该文件夹,并让其他服务器共享它。使用磁盘缓存,服务器上的负载不应该比其他服务器高太多。

更新

看看这篇文章,了解关于页面缓存的想法,以及这篇关于 CDN 的想法。它是关于 Nginx 的,因此您需要为 IIS 解决这个问题,但其背后的理论适用于任何 Web 服务器。