- 凤凰架构:构建可靠的大型分布式系统
- 周志明
- 1138字
- 2021-06-24 11:31:01
4.5.1 数据链路层负载均衡
参考上面的表4-1可知,数据链路层传输的内容是数据帧(Frame),譬如常见的以太网帧、ADSL宽带的PPP帧等。我们讨论的具体上下文里,目标就是以太网帧。按照IEEE 802.3标准,最典型的1500字节MTU的以太网帧结构如表4-2所示。
表4-2 最典型的1500字节MTU的以太网帧结构说明
关于以太网帧结构中的各数据项的含义,本节中只需注意“MAC目标地址”和“MAC源地址”两项即可。我们知道每一块网卡都有独立的MAC地址,通过以太网帧上的这两个地址可以告诉交换机,此帧是从连接在交换机上的哪个端口的网卡发出,送至哪块网卡的。
数据链路层负载均衡所做的工作,是修改请求的数据帧中的MAC目标地址,让用户原本发送给负载均衡器的请求的数据帧,被二层交换机根据新的MAC目标地址转发到服务器集群中对应的服务器(后文称为“真实服务器”,Real Server)的网卡上,这样真实服务器就获得了一个原本目标并不是发送给它的数据帧。
由于二层负载均衡器在转发请求过程中只修改了帧的MAC目标地址,不涉及更上层协议(没有修改Payload的数据),所以在更上层(第三层)看来,所有数据都是未曾改变过的。由于第三层的数据包,即IP数据包中包含了源(客户端)和目标(均衡器)的IP地址,只有真实服务器保证自己的IP地址与数据包中的目标IP地址一致,这个数据包才能被正确处理。因此,使用这种负载均衡模式时,需要把真实物理服务器集群中所有机器的虚拟IP地址(Virtual IP Address,VIP)配置成与负载均衡器的虚拟IP一样,才能使经均衡器转发后的数据包在真实服务器中顺利地使用。也正是因为实际处理请求的真实物理服务器IP和数据请求中的目的IP是一致的,所以响应结果就不再需要通过负载均衡器进行地址交换,而是可将响应结果的数据包直接从真实服务器返回给用户的客户端,避免负载均衡器网卡带宽成为瓶颈,因此数据链路层负载均衡的效率是相当高的。此模式从请求到响应的过程如图4-8所示。
图4-8 数据链路层负载均衡
在上述只有请求经过负载均衡器,而服务的响应无须从负载均衡器原路返回的工作模式中,整个请求、转发、响应的链路形成了一个“三角关系”,所以这种负载均衡模式也常被形象地称为“三角传输模式”(Direct Server Return,DSR),也称为“单臂模式”(Single Legged Mode)或者“直接路由”(Direct Routing)。
虽然数据链路层负载均衡的效率很高,但它并不能适用于所有场合,除了无法适用于那些需要感知应用层协议信息的负载均衡场景外(所有的四层负载均衡器都无法适用,具体将在后续介绍七层负载均衡器时一并解释),它在网络侧受到的约束也很大。二层负载均衡器直接改写目标MAC地址的工作原理决定了它与真实服务器的通信必须是二层可达的,通俗地说就是必须位于同一个子网当中,无法跨VLAN。所以,优势(效率高)和劣势(不能跨子网)共同决定了数据链路层负载均衡最适合作为数据中心的第一级均衡设备,用来连接其他的下级负载均衡器。