使用 robocopy 在 IIS 上复制 Wordpress

使用 robocopy 在 IIS 上复制 Wordpress

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

对这种方法有什么看法?有人用过这种或类似的方法吗?

答案1

拥有 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 脚本根据每个盒子上的工作进程数量或类似的东西将连接从一台服务器移动到另一台服务器。无论哪种方式都很难做到,不值得投入时间和精力。

看看您是否无法在服务器上配置网络负载平衡,它将需要额外的 IP,但只需更改一个 DNS,并且流量就可以分布在 3 台服务器上进行读取。

祝你好运!

答案2

感谢大家提出的所有建议。

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

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

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

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

答案3

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

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

更新

看一下本文有关页面缓存的想法,以及这个用于 CDN。它与 Nginx 有关,因此您需要针对 IIS 进行解决,但其背后的理论适用于任何 Web 服务器。

相关内容