负载均衡器是否将响应返回给客户端,还是由工作程序返回?

负载均衡器是否将响应返回给客户端,还是由工作程序返回?

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

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

例子:
方法 1: Web 客户端 -> 负载均衡器 -> 工作器 -> 负载均衡器 -> Web 客户端

或者

方法 2: Web 客户端 -> 负载均衡器 -> 工作器 -> Web 客户端

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

答案1

即使返回,数据也必须经过代理服务器,因为它是持有客户端 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

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

优点:整个解决方案从外部看起来像一个单独的服务器,通过对单个服务器进行 DoSing 攻击可以破坏负载平衡,等等。缺点:您希望将路由器和所有服务器集中在一个位置。

相关内容