使用robocopy在IIS复制上使用Wordpress


10

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

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


4个IIS服务器是物理服务器还是VM?您要复制什么数据或数据库和配置?不知道为什么要让4个服务器1成为主服务器(我假设是),而其他服务器则是被动的(如果您尝试实现HA则不起作用)。
Anthony Fornito '16

1
第二个问题(也许是最重要的问题),为什么要在Windows上运行wordpress?
Anthony Fornito '16

感谢@AnthonyFornito的回复。由于内部原因,在Windows上运行wordpress。我只是尝试使用它。我正在复制网站文件(数据库复制已通过MYSQL处理)。前端是Azure上的VM。我主要是在所有前端共享相同网站文件的解决方案之后。您有什么建议吗?
joebegborg07年

Answers:


12

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

使用天蓝色,您可以研究3件事情。

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

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

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

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

话虽如此,并且您不想花费任何金钱,请按照以下步骤操作。

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

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

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

每种方法都需要一点点编码和PHP,IIS知识。

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

简短的答案,你不能,那是不完全正确的,我曾经有一个客户坚决不使用负载均衡器,他能够通过一系列Powershell脚本根据连接数量将连接从一台服务器移动到另一台服务器工人在每个盒子上加工或类似的东西。每种方法都很难做到,不值得花费时间和精力。

看看是否无法在服务器上配置网络负载平衡,它将需要一个附加IP,但仅更改一个DNS,就可以分配流量以在3个服务器之间读取。

祝好运!


非常感谢您的建议。单个中央存储对我们来说是一个瓶颈,因为我们之前已经进行了设置,但无法应对高流量。由于截止日期,我们需要快速解决方案。我们最终使用了resilio,这是一种对等实时同步解决方案,可以检测任何服务器上的更改并将其复制到其他服务器。我希望任何有相同或相似问题的人都能以对我们一样的方式解决问题。我正在测试您对WP后端URL重写的建议,并将更改推送到其他计算机。再次感谢。
joebegborg07年

NLB在Azure上不起作用(没有第2层,如果您想做一些真正可怕的噩梦,请尝试查看Azure VM上的ARP表)。
Massimo

12

感谢所有提出建议的人。

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

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

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

我希望这可以在将来帮助其他面临类似问题的人。


11

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

将您的wp-content或仅将wp-content / uploads文件夹放在共享驱动器上将是一个更好的解决方案。解决此问题的另一种方法是让一台服务器托管该文件夹,让其他服务器共享该文件夹。使用磁盘缓存时,服务器上的负载不应比其他服务器高很多。

更新资料

看看这篇文章关于页面缓存的想法,这一次的CDN。它与Nginx有关,因此您需要针对IIS进行研究,但是其背后的理论对任何Web服务器都是有效的。


感谢您的建议@Tim。如您所说,该网站是动态的,由于安装了wordpress插件,因此会定期进行次要文件更新;这意味着每个前端有时可能具有不同的文件。您是否曾经测试过这样的生产环境(大约500-1000个并发用户);即将网站文件存储在中央存储库中并通过共享驱动器映射?如果是的话,经验如何。
joebegborg07年

不,我没有测试过这种情况-不需要,因为我缓存并使用了CDN。您将需要对前端服务器(包括后端文件服务器)进行负载测试。但是,如果您的页面没有针对每个用户进行分类,那么缓存(如使用内容分发)将极大地减少您的负载-CloudFlare具有免费层。即使每5分钟更新一次,这也是事实。Google为其背后的理论提供了“ Nginx微缓存”功能,但是显然您必须在IIS上以不同的方式实现它。如果您采用这种方式,则缓存标头非常关键。参见上面的更新。
蒂姆(Tim)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.