3.2. 使用直接路由的 LVS
As mentioned in 第 1.4.2 节 “直接路由”, direct routing allows real servers to process and route packets directly to a requesting user rather than passing outgoing packets through the LVS router. Direct routing requires that the real servers be physically connected to a network segment with the LVS router and be able to process and direct outgoing packets as well.
- 网络布局
- 在直接路由 LVS 设置中,LVS 路由器需要接收进入请求,并将其路由到适当的真实服务器进行处理。接着真实服务器需要直接将响应路由给客户端。例如:如果客户端在互联网中并通过 LVS 路由器向真实服务器发送数据包,那么真实服务器必须可以通过互联网直接连接到客户端。这可通过为真实服务器配置网关来将数据包发送到互联网中。服务器池中的每个真实服务器可以有它们独立的网关(且每个网关都有其自身的互联网连接),这可允许最大限度的吞吐量和可伸缩性。但对于典型 LVS 设置,真实服务器可通过一个网关(也就是一个网络连接)进行沟通。
重要
我们不推荐您将 LVS 路由器作为真实服务器的网关使用,因为这样会带来不必要的对 LVS 路由器复杂设置和网络负载,这些内容我们将在 NAT 路由中存在的网络瓶颈中再次论述。 - 硬件
- 使用直接路由的 LVS 系统的硬件要求与其它 LVS 布局类似。当需要在Red Hat Enterprise Linux 中运行 LVS 路由器来处理进入请求并为真实服务器执行负载平衡时,真实服务器不一定是 Linux 机器才可正常工作。每个 LVS 路由器需要一个或者两个 NIC(要看是否有备用路由器)。您可以用两个 NIC 来缓解配置并完全分离流量 — 进入请求由一个 NIC 处理,用另一个 NIC 将数据包路由到真实服务器。因为真实服务器会绕过 LVS 路由器并将外发的数据包直接发送给客户端,所以需要连接到互联网的网关。要获得最高性能和可用性,每个真实服务器应使用独立网关连接到互联网,这些独立网关有其专用的连接连接到客户端连接的载体网络(比如互联网或者内部网络)。
- 软件
- There is some configuration outside of Piranha Configuration Tool that needs to be done, especially for administrators facing ARP issues when using LVS via direct routing. Refer to 第 3.2.1 节 “直接路由及
arptables_jf
” or 第 3.2.2 节 “直接路由及iptables
” for more information.
3.2.1. 直接路由及 arptables_jf
In order to configure direct routing using
arptables_jf
, each real server must have their virtual IP address configured, so they can directly route packets. ARP requests for the VIP are ignored entirely by the real servers, and any ARP packets that might otherwise be sent containing the VIPs are mangled to contain the real server's IP instead of the VIPs.
用
arptables_jf
方法,可将应用程序绑定到每个 VIP 或者所有真实服务器服务的端口。例如:arptables_jf
方法允许 Apache HTTP Server 的多个事件明确绑定到系统中的不同 VIP 而运行。使用 arptables_jf
的 IPTables 选项还有非常优越的性能。
但使用
arptables_jf
方法,无法使用标准Red Hat Enterprise Linux 系统配置工具将 VIP 配置为在引导时启动。
要将每个真实服务器配置为忽略虚拟 IP 地址的 ARP 请求,请按以下步骤操作:
- 为每个真实服务器的每个虚拟 IP 地址创建 ARP 表条目(均衡器使用 real_ip 作为联络真实服务器的 IP,通常此 IP 会绑定到
eth0
):arptables -A IN -d <virtual_ip> -j DROP arptables -A OUT -s <virtual_ip> -j mangle --mangle-ip-s <real_ip>
这会导致真实服务器忽略所有来自虚拟 IP 地址的 ARP 请求,并修改可能包含虚拟 IP 的外发 ARP 响应,以便其包含服务器的真正 IP。Piranha 唯一应该回应 ARP 请求的节点应该为目前活跃的 LVS 节点。 - 为每个真实服务器完成此操作后,在每个真实服务器中输入以下命令保存 ARP 表条目:
service arptables_jf save
chkconfig --level 2345 arptables_jf on
chkconfig
命令将导致系统在重新引导时重新载入 arptables 配置 — 在启动网络之前。 - 在所有真实服务器中使用
ifconfig
命令配置虚拟 IP 地址来生成 IP 别名。例如:#
ifconfig eth0:1 192.168.76.24 netmask 255.255.252.0 broadcast 192.168.79.255 up
或者用利用ip
命令的iproute2
,例如:#
ip addr add 192.168.76.24 dev eth0
如前所述,使用红帽系统配置工具无法将虚拟 IP 地址配置为在引导时启动。一种解决方法就是将这些命令放在/etc/rc.d/rc.local
文件中。 - Configure Piranha for Direct Routing. Refer to 第 4 章 用 Piranha Configuration Tool配置 LVS 路由器 for more information.