【问题标题】:What is the best way to load balance PHP负载平衡PHP的最佳方法是什么
【发布时间】:2010-06-11 09:51:22
【问题描述】:

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

但是我现在有两个问题:

1:从SVN部署(我们使用beantalk)时,当然会部署到一台机器上,如何跨所有Web服务器进行部署?

2:我正在使用 S3 存储用户文件,但是我会保留本地副本以防 S3 出现故障(就像几天前一样),在所有 Web 服务器上同步这些用户文件的最佳方法是什么?

任何指针将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    所以我正在使用 nginx 为我们的 Web 应用程序设置负载平衡配置

    好的

    我很可能会使用粘性会话以避免负载平衡设置中的会话问题

    所以您不是要进行负载平衡,而是要考虑负载拆分?

    不要。

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

    关于跨多个节点的部署,我过去的做法是: 1)取一个节点,叫它node1,下线 2) 对 node1 应用发布 3)验证部署是否成功 4)让node1重新上线 5)让node2下线 6)从节点1到节点2的rsync 7) 再次运行 rsync 以检查它是否已完成 8) 使节点 2 重新联机 然后对每个附加节点重复 5-8

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

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

    我使用的脚本向一个节点发送了一个请求,请求它从请求的发起者那里复制 - 这样它就可以在短时间内运行并保证源内容可用。

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

    HTH

    C.

    【讨论】:

    • 请注意,使用 2 台服务器时,您没有解决脑裂问题的法定人数 - 这可能是一个问题,具体取决于您的数据库设置
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-03
      • 2020-09-07
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      相关资源
      最近更新 更多