【问题标题】:load balancing across servers跨服务器负载均衡
【发布时间】:2010-11-14 04:57:23
【问题描述】:

我有一个在 3 台服务器上运行的 Web 服务。穿法如下 - 服务器 1 收到用户请求,将其存储在本地数据库中并对其进行一些处理。 - 服务器 2 和 3 是相同的,主要工作的马,它们根据请求从互联网上获取信息并返回。 - 服务器 1 通过局域网上的 http 请求调用服务器 2/3。(服务器 2 和 3 上有一个 php 脚本,因此服务器 1 将其称为http://localip/script.php) - 服务器 1 交替调用服务器 2 或 3(这样做是为了分配负载) 服务器 2/3 上的每个查询大约需要 8 秒来处理。 现在,当我在所有服务器上安装监控工具时,它发现 server1 负载过大(显示进程数>关键限制) 这不是平衡负载的方法吗?如何减少 Server1 的负载?

【问题讨论】:

    标签: php load-balancing time-wait


    【解决方案1】:

    服务器 1 正在响应来自您的用户的传入请求。所以如果你确定它是瓶颈,那么你需要把注意力集中在那里。

    如果服务器 2 和 3 只执行对 Internet 的查询,那么它们可能没有在处理器/磁​​盘方面做太多工作。

    如果您将 2 台服务器配置为执行相当简单的任务,并且您的主要面向用户的服务器正在过载,那么最好将所有 3 台服务器都作为面向用户的服务器运行。

    根据您的描述,听起来服务器#1 正在阻止来自服务器 2 和 3 的响应,这意味着它必须保持打开许多连接。如果服务器 2 和 3 并不是真的没有那么多工作,因为它们的任务只是互联网查询,您可能会通过将面向用户的服务器和查询引擎合并到一个服务器中并在所有 3 台服务器上分配用户负载来获得更好的服务.

    这样,每台服务器的打开用户连接数就会减少。而且查询引擎仍然不会占用资源(如果它只是 Web 请求),因此不会对用户性能产生负面影响。

    只是给你一些想法。如果不了解您的应用程序的更多信息,就不可能完全确定。

    其他 cmets

    正如 cmets 中提到的,您应该寻找合适的负载均衡器,首先建议使用好的硬件负载均衡器。你在哪里运行你的服务器?如果它们位于 Amazon EC2、Rackspace 等云数据中心,那么您可以轻松使用负载均衡服务。

    您还可以使用软件负载平衡器。 Apache 甚至提供了这个功能:

    http://httpd.apache.org/docs/current/mod/mod_proxy_balancer.html

    即使使用您当前的配置,也可以将 Apache 放在其中一台服务器的前面,然后对其进行调整,以便使用 Apache(进行负载平衡)的服务器获得较低百分比的流量,以抵消费用的 Apache 服务器。在这种情况下,您无需更改硬件。尽管您有一个明显的单点故障,但与您现在的情况并无不同,但适当的负载均衡器通常可以缓解您目前在架构中遇到的单点故障问题。

    【讨论】:

    • 服务器 2 和 3 从 Internet 获取信息并将其返回到服务器 1,这意味着服务器 2 和 3 阻止服务器 1,而不是反过来
    • @ajreal 这实际上是一项移动服务,当用户向某个号码发送短信时,它会到达我们的 ip 即服务器 1。我无法将每个短信设置为访问不同的 ip。所以我必须以某种方式从 server1 分配负载
    • @Ashwin - 你当然可以,市场上有很多负载均衡器硬件,你只需要配置一个虚拟IP作为公共IP,当你的负载均衡器硬件收到请求时,它可以跟随对服务器1的请求到N
    • 将我的 cmets 添加到答案中。
    • 你能指导我配置这些*.com/questions/4375100/…
    最近更新 更多