我在IP1.1.1.1和1.1.1.2有两台服务器(S1,S2),我想在www.example.com为它们加载负载均衡。 我正在考虑在1.1.1.3上有一台机器作为负载平衡器:dns example.com指向1.1.1.3,LB将redirect到1.1.1.1或1.1.1.2。
问题:Web浏览器客户端向example.com发送1Mb文件。 在去S1之前文件是否完全通过LB? 我的意思是所有的数据包从客户端传到LB到S1? 或者是这样的:networking浏览器要求example.com ,它通过DNS返回IP 1.1.1.3(LB),然后对于第一个数据包,LB告诉客户端“嗨,和1.1.1.1交谈” ,所以Web浏览器发送所有的http数据包到S1 1.1.1.1,所以LB只接收总stream量的0.001%?
另一种可能性是我们假设请求在CPU /数据库访问等方面是很大的,所以如果负载均衡器不能处理请求(只是传输它),它仍然有一定的用处,即使它吸收了所有的交通
我希望事情如我所说,但是我不太了解http协议。 我看到一些商业硬件这样做,这就是为什么我怀疑是否存在一个纯软件解决scheme。
我不是一个英语母语,我的问题是非常基本的,我认为如果看起来复杂,不要犹豫,问我重新:)
有不同种类的负载平衡。 您可以拥有多个公有IP,这些IP在DNSlogging中可见。 每个IP可以直接指向一个服务器。 客户可以select其中的一个,客户可以在它们之间进行故障切换。 如果你把它留给客户端,你不应该过分依赖服务器之间的故障转移。
您可以通过不在所有DNS请求中分发所有公共IP来调整上述scheme。 不分发所有公共IP的原因有很多:
上述方法通常称为基于DNS的负载均衡。
在链中的下一层,您的公有IP可以是虚拟IP,可以在不同的硬件单元之间迁移。 每个虚拟IP一次只能被路由到一个硬件,所以在这个层上有更多的盒子比拥有公共IP地址是没有意义的。
这种虚拟IP通常用于可用性,作为负载均衡解决scheme,它们不是非常灵活。
在下一层,你可以有一个传统的负载平衡器。 负载均衡器接收来自客户端的请求并将其转发到服务器池。 从客户端到服务器的所有stream量都必须经过负载均衡器,但负载均衡器需要执行的处理可能非常轻。
这层负载均衡器可以在两种不同的模式下运行。 它们既可以在传统代理模式下运行,即在客户端和负载均衡器之间使用一个TCP连接,在负载均衡器和服务器之间使用另一个TCP连接,或者在后端服务器上的TCP连接终止的DSR模式负载均衡器。
在代理模式下,负载均衡器不仅需要处理来自客户端的所有数据包。 它还必须处理所有从服务器返回给客户端的数据包。 而且负载均衡器需要一个完整的TCP栈来缓冲和重传。
在DSR模式下,负载平衡器只需要简单的连接跟踪来自客户端的每个连接。 这大大减less了负载平衡器上的内存使用量。 这也意味着从服务器到客户端的数据包没有经过负载均衡器,直接发送到客户端(显然要经过路由器)。 这个属性是这个模式被称为直接服务器返回的原因。
DSR模式的缺点是networkingconfiguration稍微复杂一些。 从负载均衡器到服务器的数据包不能只依靠普通的路由。 由于它不重写从客户端到服务器的数据包的目标IP,它需要在较低的协议层操纵目的地址以将数据包路由到正确的服务器或插入一个隧道层以便在其上放置一层这样的目的地地址。
上述所有的方法都可以在对方的前面进行分层。 这就是为什么你可以build立一个网站扩展到数以亿计的用户。
所以LB只收到总stream量的0.001%?
不, 所有的stream量都会stream经负载均衡器。 负载均衡器会将stream量传递给实际的目标服务器。
是的,负载均衡器是单点故障(负载均衡不是HA)。 如果您需要HA,请获取两个负载均衡器。
负载平衡器通常与逆向代理类似。
客户端启动与负载均衡器的连接并向其发送请求。
负载均衡器接受请求并将其传递到后端节点并等待回复。
它得到答复,并将其转发给原来的客户端。
所以是的,完整的stream量将stream过它,既要求和响应。