负载平衡 – 每个新客户端或所有时间都使用一次负载均衡器吗?

我在IP的1.1.1.1和1.1.1.2有2个服务器(S1,S2),我想在www.example.com上对它们进行负载均衡.我想在1.1.1.3中有一台机器作为负载均衡器:dns example.com指向1.1.1.3,LB将重定向到1.1.1.1或1.1.1.2.

问题:Web浏览器客户端将1Mb文件发送到example.com.在进入S1之前,文件是否完全通过LB?我的意思是所有数据包从客户端传输到LB到S1?或者它是这样发生的:网络浏览器要求example.com,它由DNS返回IP 1.1.1.3(LB),然后对于第一个数据包,LB告诉客户端“嘿,转而谈到1.1.1.1” ,所以Web浏览器将所有的http数据包发送到S1 1.1.1.1,因此LB只接收总流量的0.001%?

另一种可能性是我们假设请求在CPU /数据库访问等方面很大,因此负载均衡器无法处理请求(并且只是传输它),即使它吸收了所有的,它仍然会有一些用处.交通

我希望事情像我说的那样发生,但我对http协议的回答还不够;我看到一些商业硬件这样做,这就是为什么我想知道是否存在纯软件解决方案.

我不是英国人,我的问题非常基本我认为如果看起来很复杂请不要犹豫,请我重新制定:)

最佳答案
有不同种类的负载平衡.您可以拥有多个公共IP,这些IP在DNS记录中可见.这些IP中的每一个都可以直接指向服务器.然后,客户端将在其中进行选择,客户端可以在它们之间进行故障转移.如果将其留给客户端,则不应过多依赖服务器之间的故障转移.

您可以通过不在所有DNS请求中分发所有公共IP来调整上述方案.不分发所有公共IP的原因有多种:

>可能只有这么多,DNS回复会变得太大.
>您可能希望更多地控制负载的去向.
>您可能希望将用户定向到地理位置更靠近它们的服务器.
>您可能希望停止告知客户当前无法使用的公共IP.

上述方法通常称为基于DNS的负载平衡.

在链中的下一层,您的公共IP可以是虚拟IP,可以在不同的硬件单元之间迁移.每个虚拟IP一次只能路由到一个硬件,因此在这个层上拥有比公共IP地址多得多的盒子是没有意义的.

此类虚拟IP通常用于可用性,它们作为负载平衡解决方案不是非常灵活.

在下一层,您可以拥有传统的负载平衡器.负载均衡器接收来自客户端的请求并将它们转发到服务器池.从客户端到服务器的所有流量都必须通过负载均衡器,但负载均衡器需要执行的处理可能非常轻.

这层负载平衡器可以在两种不同的模式下运行.它们可以在常规代理模式下运行,其中在客户端和负载均衡器之间使用一个TCP连接,在负载均衡器和服务器之间使用另一个TCP连接,或者在后面的服务器上终止TCP连接的DSR模式下运行负载均衡器.

在代理模式下,负载均衡器不仅必须处理来自客户端的所有数据包.它还必须处理从服务器返回客户端的所有数据包.并且负载均衡器需要具有缓冲和重传的完整TCP堆栈.

在DSR模式下,负载均衡器仅需要对来自客户端的每个连接进行简单的连接跟踪.这大大减少了负载均衡器上的内存使用量.这也意味着从服务器到客户端的数据包没有通过负载均衡器,它直接发送到客户端(显然是通过路由器的路由器).此属性是此模式称为直接服务器返回的原因.

DSR模式的缺点是网络配置有点复杂.从负载均衡器到服务器的数据包不能仅依赖于普通路由.由于它不会重写从客户端到服务器的数据包的目标IP,因此需要在较低的协议层处理目标地址以将数据包路由到适当的服务器或插入隧道层以便在其上放置一个层这样的目的地地址.

所有上述方法可以在彼此前面分层.这就是为什么你可以建立一个网站扩展到数亿用户.

转载注明原文:负载平衡 – 每个新客户端或所有时间都使用一次负载均衡器吗? - 代码日志