负载平衡Apache

负载平衡Apache

我家里有一个非常简单的设置,用于为一些家庭/学校项目提供网站服务。该设置有一个 DSL 调制解调器 (M),其静态 IP 地址连接到 Netgear 路由器 (R),该路由器将 HTTP 流量转发到我家内联网上的 Ubuntu 机器 (A) 上的 Apache。现在,我已将另一台运行 Ubuntu (B) 的机器添加到我的家庭网络中,我想将 HTTP 流量负载平衡到该机器上。这些机器还为我的内联网执行其他繁重的工作,因此负载可能会波动。因此,在 ASCII 艺术中-

                                            (A:192.168.1.2- Ubuntu)
  Internet---(M:1.2.3.4)--(R:192.168.1.1)--/
                              Netgear      \
                                            (B:192.168.1.3- Ubuntu)

从初步评估来看,似乎有几种方法可以实现这一点 - mod_proxy_balancer、apache 集群、外部代理、循环 DNS 或 DNS 代理等。许多这些解决方案的设计都考虑到了网络增长/扩展的可能性。在我看来,这不太可能 - 当然也不是必需的。最簡單如何在 A 和 B 机器之间设置负载平衡?

目前,随机分布是可以的,但我希望最终拥有更多的程序控制(例如故障转移,或根据某些外部因素(例如机器上的负载或 URL 等)指向流量),以设置流量定向到何处的规则。我怀疑随着这些要求的增长,非基于 Apache 的解决方案(如基于 DNS 的解决方案)将无法工作,但也许我的假设是错误的。

谢谢您的指点。

答案1

在两台机器上运行类似 haproxy+ucarp 的程序,这样可以很好地处理负载平衡和故障转移。

答案2

最简单的方法是在每台物理服务器上创建两个虚拟 Web 服务器 - www.cgi 和 www.static。

将网络文件拆分到虚拟目录中,并同步两个服务器。

  1. CGI(PHP、Ruby、Java、Perl、ASP)

  2. 静态文件(图像、图标、javascript、css、flash、pdf、doc、txt、媒体等)

现在有三个“重负载”服务 - 数据库,www.cgi 和 www.static。

  • 在任一服务器上运行所有这三个。
  • 在服务器 A 上运行数据库,并在服务器 B 上运行两个 Web 虚拟。
  • 在服务器 A 上运行数据库和 www.cgi,在服务器 B 上运行 www.static。

易于管理,提供故障转移,在需要之前没有额外的复杂性。

一般两台机器用于故障转移,三台或三台以上机器用于负载均衡。

如果您使用服务器级机器,那么硬件负载平衡通常既经济高效又简单。

答案3

最大上传速度有限,但这不是瓶颈。真正的问题来自其他服务(对于我的内部网),这些服务经常导致服务器机器挂起/故障。如果我正确设置了此设置,我的网络服务器就不会出现长时间停机(其中包括运行 icecast 广播流,导致用户断开连接)

@Colin 感谢您提供有关 linuxvirtualserver.org 的信息,我会检查一下。

@Joe 我不确定我是否理解你的解决方案 - 如果服务器 A 死机,那么我的 CGI 也会死机(或者 B 也死机),故障转移在哪里?而且我没有服务器级硬件 - 只有旧的(和不同的)“退役”PC,可以很好地与 Ubuntu 配合使用。

相关内容