1.4.2. 直接路由
建立使用直接路由的 LVS 设置和其它 LVS 联网布局相比有更好的性能。直接路由允许真实服务器将数据包直接处理并路由到发出请求的用户,而不是将所有外发的数据包通过 LVS 路由器发送给用户。直接路由通过将 LVS 路由器的任务变为仅仅处理进入的数据包,从而降低了出现网络性能问题的可能性。
图 1.4. LVS Implemented with Direct Routing
在典型的直接路由设置中,LVS 路由器通过虚拟 IP(VIP)接收进入服务器的请求,使用调度算法将请求路由到真实服务器中。真实服务器会处理这些请求,并将回复绕过 LVS 路由器直接发送给客户端。这种路由方法允许在不增加 LVS 路由器将外发数据包从真实服务器路由到客户端负担的情况下添加真实服务器的能力,以免在网络负载较重的情况下形成瓶颈。
1.4.2.1. 直接路由和 ARP 限制
虽然在 LVS 中使用直接路由有很多优点,但也有一些局限。LVS 使用直接路由最常见的问题就出现在地址解析协议(ARP)。
In typical situations, a client on the Internet sends a request to an IP address. Network routers typically send requests to their destination by relating IP addresses to a machine's MAC address with ARP. ARP requests are broadcast to all connected machines on a network, and the machine with the correct IP/MAC address combination receives the packet. The IP/MAC associations are stored in an ARP cache, which is cleared periodically (usually every 15 minutes) and refilled with IP/MAC associations.
在直接路由 LVS 设置中出现 ARP 请求问题就是因为客户端对某个 IP 地址的请求必须与要处理请求的 MAC 地址关联,LVS系统的虚拟 IP 地址也必须与 MAC 关联。但由于 LVS 路由器和真实服务器有相同的 VIP,因此 ARP 请求会被广播到与该 VIP 关联的所机器。这会引发一些问题,比如完全绕过 LVS 路由器将 VIP 直接关联到真实服务器之一并直接处理请求,与设置 LVS 的初衷项背。
要解决这个问题,请确定总是将进入请求发送到 LVS 路由器,而不是真实服务器。使用
arptables_jf
或者 iptables
数据包过滤工具即可达到此目的,理由如下:
arptables_jf
可防止 ARP 将 VIP 与真实服务器关联。iptables
方法完全避免了 ARP 问题,因为它从来没有在真实服务器中配置 VIP。
For more information on using
arptables
or iptables
in a direct routing LVS environment, refer to 第 3.2.1 节 “直接路由及 arptables_jf
” or 第 3.2.2 节 “直接路由及 iptables
”.