4.3.1 链路层负载均衡

LVS 的 DR 模式其实是一种链路层负载均衡,数据链路层负载均衡所做的工作,就是修改请求的数据帧中的 MAC 目标地址,让原本发送给负载均衡器请求的数据帧,被二层交换机转发至服务器集群中对应的服务器,这样真实的服务器就获得了一个原本目标并不是发送给它的数据帧。由于链路层只修改了 MAC 地址,所以在 IP 层看来数据没有任何变化,继而被正常接收。由于 IP 数据包中包含了源(客户端)和目的地(负载均衡器)IP 地址,只有真实服务器保证自己的 IP 与 数据包中的目的地 IP 地址一致,这个数据局才能继续被处理。

因此使用这种负载均衡模式时,需要把真实服务器的 VIP 配置成和负载均衡器的 VIP 一样,LVS 配置真实服务器的原理也是如此,如下示例。

// 真实服务器配置
ifconfig lo:0 1.1.1.1 netmask 255.255.255.255 up // 绑定 VIP 地址在 lo 接口上才能收到目标地址为 VIP 的包。
route add -host 1.1.1.1 dev lo  //  目标地址是 VIP 的数据包从本机 lo 接口发送出去

只有请求经过负载均衡器,而服务的响应无需从负载均衡器原路返回的工作模式中,整个请求、转发、响应的链路形成一个“三角关系”,所以这种模式也被形象的称为“三角传输模式”(Direct Server Return,DSR),也称为“单臂模式”(Single Legged Model),如图 4-2 所示。

图4-2 链路层 DSA 模式负载均衡

设计 DSR 的主要原因是:在一些场景中,响应的流量要远远大于请求的流量(例如典型的 HTTP request/response 模式)。假设请求占 10% 的流量,响应占 90%,使用 DSR 技术,只需 1/10 的带宽就可以满足系统需求,这种类型的优化可以极大地节省成本,还提高了负载均衡器的可靠性(流量越低肯定越好)。

虽然 DSR 模式效率很高,但它在缺陷也很明显,因为响应不再经过负载均衡器,负载均衡器就无法知道 TCP 连接的完整状态,防火墙策略会收到影响(TCP 连接只有 SYN,没有 ACK)。其次因为是数据链路层通信,受到的网络侧约束也很大。所以优势(效率高)和劣势(不能跨子网)共同决定了 DSR 模式最适合作为数据中心的第一层均衡设备,用来连接其他的下级负载均衡器。

Last Updated:
Contributors: isno