负载均衡器是将响应返回给客户端还是工作器?

Man*_*ani 4 load-balancing apache-2.2

在Apache中,mod_proxy_balancer以最简单的方式支持负载均衡。

请参阅使用 Apache进行轻松 HTTP 负载平衡。当请求被worker(负载均衡节点)处理时,是先到负载均衡服务器再到客户端,还是直接从worker发出?

示例:
方法一: Web Client -> Load Balancer -> Worker -> Load Balancer -> Web Client

或者

方法二: Web Client -> Load Balancer -> Worker -> Web Client

Apache 负载均衡器中发生了什么?

exa*_*exa 7

即使在返回时,数据也必须通过代理服务器,因为它是保存客户端 TCP 连接的服务器,并且应该通过它发送答案。

没有代理服务器在反向路径上工作的解决方案确实存在,但这些解决方案很难正确实施(通常涉及肮脏的 TCPIP/iptables 技巧)。

编辑:没有代理服务器的好解决方案:

“干净的解决方案”可以神奇地转发 TCP SYN 并从负载均衡器卸载其他所有内容,这可能是一个梦想,我不知道有任何这样的事情。

相反,有两种常用的方法:

- DNS 负载平衡:在多个可公开访问的 IP 地址上拥有更多服务器,为您的网站指定更多 A 条目,可能会使您的 DNS 服务器随机播放答案以增加随机性。在许多商业安装上完美运行。优点:简单,缺点:“易碎”,并且您需要公共 IP 空间。

- 仅防火墙负载平衡:无论如何,很可能只有一个路由器可以处理您的所有流量,因此在其上添加一些防火墙规则通常不会损害实际性能。您正在寻找的东西(在 linux 上)是使用 iptables 的 DNAT 目标,以及某种“随机”或“散列”匹配。我个人在几个安装中使用这样的东西:

iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -m random --average 50 -j DNAT --to 192.168.0.2
iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -j DNAT --to 192.168.0.3
Run Code Online (Sandbox Code Playgroud)

将 11.22.33.44 替换为您的公共 IP 地址,将 192.168.xx 替换为您的服务器。不要忘记修改 --average 值。

优点:整个解决方案从外部看起来就像一个单一的服务器,负载平衡是牢不可破的,通过 DoSing 单个服务器等等。缺点:你希望将路由器和所有服务器放在一个地方。