3.2. 使用直接路由的负载均衡器


直接路由允许实际服务器直接处理数据包并路由到请求的用户,而不是通过 LVS 路由器传递传出数据包。直接路由要求实际服务器通过 LVS 路由器物理连接到网络段,并且能够处理和定向传出数据包。
网络布局
在直接路由负载平衡器设置中,LVS 路由器需要接收传入的请求,并将它们路由到正确的实际服务器以进行处理。然后,实际服务器需要将响应直接路由到客户端。因此,例如,如果客户端位于 Internet 上,并且通过 LVS 路由器将数据包发送到实际服务器,则实际服务器必须能够通过互联网直接连接到客户端。这可以通过配置实际服务器的网关以将数据包传递到互联网来完成。服务器池中的每一实际服务器都可拥有自己的独立网关(以及具有自己连接到互联网的每个网关),实现最大吞吐量和可扩展性。但是,对于典型的负载平衡器设置,实际服务器可以通过一个网关(因此也有一个网络连接)进行通信。
硬件
使用直接路由的负载平衡器系统的硬件要求与其他负载平衡器拓扑类似。虽然 LVS 路由器需要运行红帽企业 Linux,以处理传入请求并为真实服务器执行负载平衡,但实际服务器不需要是 Linux 机器才能正常工作。LVS 路由器需要一个或两个 NIC(取决于是否有备份路由器)。您可以使用两个 NIC 轻松配置并区分不同的流量;传入的请求由一个 NIC 处理,并将数据包路由到另一 NIC 上的实际服务器。
由于实际服务器绕过 LVS 路由器并将传出数据包直接发送到客户端,因此需要网关到互联网。为了获得最佳性能和可用性,每个实际服务器可以连接到其自身的独立网关,这些网关拥有其自身专用连接到客户端的网络(如互联网或 Intranet)的专用连接。
软件
keepalived 之外有一些配置需要完成,特别是管理员通过直接路由使用 Load Balancer 时遇到 ARP 问题。如需更多信息,请参阅 第 3.2.1 节 “使用 arptables 直接路由”第 3.2.3 节 “使用 iptables 直接路由”

3.2.1. 使用 arptables 直接路由

要使用 arptables 配置直接路由,每个真实服务器都必须配置其虚拟 IP 地址,以便可以直接路由数据包。对 VIP 的 ARP 请求会被实际服务器完全忽略,否则可能发送的任何 ARP 数据包都会被操作,以包含实际服务器的 IP 而非 VIP。
使用 arptables 方法,应用程序可能会绑定到真实服务器提供服务的每个 VIP 或端口。例如,arptables 方法允许运行多个 Apache HTTP 服务器实例,并明确绑定到系统上的不同 VIP。
但是,使用 arptables 方法时,无法将 VIP 配置为使用标准 Red Hat Enterprise Linux 系统配置工具在引导时启动。
要将每个实际服务器配置为忽略每个虚拟 IP 地址的 ARP 请求,请执行以下步骤:
  1. 在每个真实服务器上为每个虚拟 IP 地址创建 ARP 表条目( real_ip 是 director 用于与实际服务器通信的 IP;通常是绑定到 eth0的 IP):
    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。唯一应响应任何 VIP 的 ARP 请求的节点是当前活动的 LVS 节点。
  2. 旦在每个真实服务器上完成此操作,请在每个真实服务器上键入以下命令来保存 ARP 表条目:
    arptables-save > /etc/sysconfig/arptables
    systemctl enable arptables.service
    systemctl enable 命令将在启动网络前在启动时重新载入 arptables 配置。
  3. 使用 ip addr 在所有真实服务器上配置虚拟 IP 地址,以创建 IP 别名。例如:
    # ip addr add 192.168.76.24 dev eth0
  4. 为直接路由配置 Keepalived。这可以通过在 keepalived.conf 文件中添加 lb_kind DR 来实现。如需更多信息,请参阅 第 4 章 使用 Keepalived 初始负载均衡器配置

3.2.2. 使用 firewalld 直接路由

您还可以通过使用 firewalld 创建防火墙规则,使用直接路由方法解决 ARP 问题。要使用 firewalld 配置直接路由,您必须添加创建透明代理的规则,以便实际服务器将服务发送到 VIP 地址的数据包,即使系统上不存在 VIP 地址。
firewalld 方法比 arptables 方法配置更简单。此方法也完全规避 LVS ARP 问题,因为虚拟 IP 地址或地址仅存在于活动的 LVS director 上。
但是,与 arptables 相比,使用 firewalld 方法有一些性能问题,因为每个返回数据包都有开销。
您也不能使用 firewalld 方法重复使用端口。例如:无法运行绑定到端口 80 的两个独立的 Apache HTTP 服务器服务,因为两者都必须绑定到 INADDR_ANY 而不是虚拟 IP 地址。
要使用 firewalld 方法配置直接路由,请在每个真实服务器上执行以下步骤:
  1. 确保 firewalld 正在运行。
    # systemctl start firewalld
    确保 firewalld 已启用在系统启动时启动。
    # systemctl enable firewalld
  2. 为每个要为真实服务器提供服务的 VIP、端口和协议(TCP 或 UDP)组合输入以下命令。此命令将导致真实服务器处理以 VIP 和端口指定的数据包。
    # firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -d vip -p tcp|udp -m tcp|udp --dport port -j REDIRECT
  3. 重新加载防火墙规则,并保留状态信息。
    # firewall-cmd --reload
    当前永久配置将成为新的 firewalld 运行时配置以及下一次系统启动时的配置。

3.2.3. 使用 iptables 直接路由

您还可以通过创建 iptables 防火墙规则,使用直接路由方法解决 ARP 问题。要使用 iptables 配置直接路由,您必须添加创建透明代理的规则,以便实际服务器将服务发送到 VIP 地址的数据包,即使系统上不存在 VIP 地址。
iptables 方法的配置比 arptables 方法更为简单。此方法也完全规避 LVS ARP 问题,因为虚拟 IP 地址仅存在于活动的 LVS director 上。
但是,与 arptables 相比,使用 iptables 方法有一些性能问题,因为转发/伪装每个数据包存在开销。
您也不能使用 iptables 方法重复使用端口。例如:无法运行绑定到端口 80 的两个独立的 Apache HTTP 服务器服务,因为两者都必须绑定到 INADDR_ANY 而不是虚拟 IP 地址。
要使用 iptables 方法配置直接路由,请执行以下步骤:
  1. 在每个真实服务器中,为旨在为真实服务器提供服务的每个 VIP、端口和协议(TCP 或 UDP)组合输入以下命令:
    iptables -t nat -A PREROUTING -p <tcp|udp> -d <vip> --dport <port> -j REDIRECT
    此命令将导致真实服务器处理以 VIP 和端口指定的数据包。
  2. 保存每个真实服务器中的配置:
    # iptables-save > /etc/sysconfig/iptables
    # systemctl enable iptables.service
    systemctl enable 命令将在启动网络前在启动时重新载入 iptables 配置。

3.2.4. 使用 sysctl 直接路由

使用直接路由时处理 ARP 限制的另一种方法是使用 sysctl 接口。管理员可以配置两个 systcl 设置,使得真实服务器不会在 ARP 请求中宣布 VIP,且不会回复 VIP 地址的 ARP 请求。要启用此功能,请输入以下命令:
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
或者,您可以在 /etc/sysctl.d/arp.conf 文件中添加以下行:
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.