什么是负载均衡PHP的最佳方法

时间:2010-06-11 09:51:22

标签: php mysql synchronization file-upload load-balancing

所以我正在使用nginx为我们的Web应用程序设置负载平衡配置。我很可能会使用粘性会话来避免负载均衡设置上的会话问题,甚至可能使用数据库会话处理程序。

然而,我现在有两个问题:

1:从SVN部署(我们使用beanstalk)时,它会部署到一台机器,如何在所有Web服务器上部署?

2:我使用S3存储用户文件,但是我确实保留了本地副本,因为S3停机(就像几天前那样),在所有Web服务器上同步这些用户文件的最佳方法是什么?

任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

  

所以我正在使用nginx

为我们的Web应用程序设置负载均衡配置

  

我很可能会使用粘性会话来避免负载均衡设置上的会话问题

所以你没有进行负载均衡,你正在考虑负载分配?

别。

正确完成,负载平衡意味着服务丢失的几率会因节点数量呈指数级下降。假设单个节点的概率为0.05(即95%正常运行时间),则丢失两个节点的概率为0.05×0.05 = 0.0025(99.75%正常运行时间)。 OTOH如果您按照建议拆分负载,那么每当节点发生故障时您丢失1 / N的可用性,丢失节点的概率为N * 0.05,因此您只能获得96.75%的可用性和2个节点。 / p>

关于跨多个节点的部署,我以前的方式是:    1)取一个节点,称之为node1,离线    2)将release发布到node1    3)验证部署是否成功    4)将node1重新联机    5)使node2脱机    6)从node1到node2的rsync    7)再次运行rsync以检查它是否已完成    8)使节点2重新联机    然后对每个附加节点重复5-8

  

在所有Web服务器上同步这些用户文件的最佳方法是什么?

上述方法适用于部署 - 对于用户提交的数据,您需要在提交内容时分发内容。我为此使用自定义脚本。如果节点在更新发生时处于脱机状态,则可以在重新同步之前对其进行重新同步(步骤6 + 7)。

我使用的脚本向请求从请求的发起者复制的节点发送请求 - 因此它可以在短时间内运行并保证源内容可用。

在实现负载平衡方面 - 虽然你可以花很多钱购买复杂的硬件,但我还没有看到任何比循环更好的方法,原因很多 - 尤其是故障转移是透明地实现的客户。

HTH

下进行。

答案 1 :(得分:0)

使用主动 - 主动前端设置和粘性会话,您可以将其中一个服务器从轮换中取出,等待会话清除,在将所有流量切换到第一个服务器之前升级该服务器,等待会话清除在第二台服务器上,然后将其从旋转中取出,升级并将其添加回轮换。这样您就可以获得干净的升级而不会丢失服务。如果您正在使用共享会话状态,您可能会跳过等待会话清除但是确保您在生产之前已经在测试床上完成此操作,如果这对您很重要并且要非常小心那些触及会话存储。

过去我使用的系统在每个前端Web服务器上都有一个复制的NFS共享,允许我们在它们之间共享适合您的S3缓存的数据。我不确定它是如何设置的,但我们从来没有遇到过问题,即使其中一台服务器出现磁盘故障。