34.9.链路聚合与故障转移
FreeBSD 提供了 lagg(4) 接口,它可以用来将多个网络接口聚合到一个虚拟接口中,以便提供故障转移和链路聚合。故障转移允许流量继续流动,只要至少有一个聚合网络接口具有已建立的链接。链路聚合在支持 LACP 的交换机上效果最佳,因为此协议在响应单个链路的故障时双向分配流量。
- failover此模式仅通过主端口发送和接收流量。如果主端口不可用,则使用下一个活动端口。添加到虚拟接口的第一个接口是主端口,随后添加的所有接口都用作故障转移设备。如果故障转移到非主端口,则原始端口在再次变为可用后将成为主 端口。
- loadbalance这提供了静态设置,并且不会与对等帧或交换帧协商聚合以监视链路。如果交换机支持 LACP,则应该用该参数。
- lacpIEEE® 802.3ad 链路聚合控制协议(LACP)将一组可聚合链路与对等方协商到一个或多个链路聚合组(LAG)中。每个 LAG 由相同速度的端口组成,设置为全双工操作,并且流量在 LAG 中具有最大总速度的端口之间均衡。通常,只有一个 LAG 包含所有端口。如果物理连接发生更改,LACP 将快速收敛到新配置。LACP 根据散列协议标头信息均衡活动端口之间的传出流量,并接受来自任何活动端口的传入流量。哈希包括以太网源地址和目标地址,以及 VLAN 标记(如果可用)以及 IPv4 或 IPv6 源地址和目标地址。
- roundrobin此模式使用轮循机制调度程序在所有活动端口之间分配传出流量,并接受来自任何活动端口的传入流量。由于此模式违反了以太网帧排序,因此应谨慎使用。
- broadcast此模式将传出流量发送到滞后接口上配置的所有端口,并在任何端口上接收帧。
本节演示如何配置思科 ® 交换机和 FreeBSD 系统以实现 LACP 负载均衡。然后,它演示如何在故障转移模式下配置两个以太网接口,以及如何在以太网和无线接口之间配置故障转移模式。
例 1.使用 Cisco® 交换机进行 LACP 聚合此示例将 FreeBSD 机器上的两个 fxp(4) 以太网接口连接到 Cisco® 交换机上的前两个以太网端口,作为单个负载均衡和容错链路。可以添加更多接口以提高吞吐量和容错能力。替换示例中显示的 Cisco® 端口、以太网设备、通道组编号和 IP 地址的名称 ,以匹配本地配置。帧排序在以太网链路上是强制性的,两个站之间的任何流量始终流经同一物理链路,从而将最大速度限制为一个接口的速度。传输算法尝试使用尽可能多的信息来区分不同的流量,并在可用接口之间均衡流量。在 Cisco® 交换机上,将 FastEthernet0/1 和 FastEthernet0/2 接口添加到通道 group 1:interface FastEthernet0/1channel-group 1 mode activechannel-protocol lacp!interface FastEthernet0/2channel-group 1 mode activechannel-protocol lacp# ifconfig fxp0 up# ifconfig fxp1 up# ifconfig lagg0 create# ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24接下来,验证虚拟接口的状态:# ifconfig lagg0lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500options=8<VLAN_MTU>ether 00:05:5d:71:8d:b8inet 10.0.0.3 netmask 0xffffff00 broadcast 10.0.0.255media: Ethernet autoselectstatus: activelaggproto lacplaggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>标记为ACTIVE
的端口是已经与远程交换机协商好的 LAG 的一部分。流量将通过这些活动端口传输和接收。在上述命令中添加-v
,以查看 LAG 标识符。要查看 Cisco® 交换机上的端口状态:switch# show lacp neighborFlags: S - Device is requesting Slow LACPDUsF - Device is requesting Fast LACPDUsA - Device is in Active mode P - Device is in Passive modeChannel group 1 neighborsPartner's information:LACP port Oper Port PortPort Flags Priority Dev ID Age Key Number StateFa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3DFa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D有关更多详细信息,请键入show lacp neighbor detail
。要在重新引导时保留此配置,请将以下条目添加到 FreeBSD 系统上的 /etc/rc.conf:ifconfig_fxp0="up"ifconfig_fxp1="up"cloned_interfaces="lagg0"ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24"
例 2.故障转移模式如果主接口上的链路丢失,则故障转移模 式可用于切换到辅助接口。要配置故障转移,请确保底层物理接口已启动,然后创建 lagg(4) 接口。在此示例中,fxp0 是主接口,fxp1 是辅助接口,并为虚拟接口分配了 IP 地址 10.0.0.15/24:# ifconfig fxp0 up# ifconfig fxp1 up# ifconfig lagg0 create# ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24虚拟接口应如下所示:# ifconfig lagg0lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500options=8<VLAN_MTU>ether 00:05:5d:71:8d:b8inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255media: Ethernet autoselectstatus: activelaggproto failoverlaggport: fxp1 flags=0<>laggport: fxp0 flags=5<MASTER,ACTIVE>流量将在 fxp0 上传输和接收。如果链接在 fxp0 上丢失,fxp1 将成为活动链接。如果在主接口上恢复了链接,它将再次成为活动链接。要在重新启动后保留此配置,请将以下条目添加到 /etc/rc.conf:ifconfig_fxp0="up"ifconfig_fxp1="up"cloned_interfaces="lagg0"ifconfig_lagg0="laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24"
例 3.以太网和无线接口之间的故障转移模式对于便携式计算机用户,通常需要将无线设备配置为辅助设备,仅在以太网连接不可用时使用。使用 lagg(4) 时,可以配置一个故障转移,由于性能和安全原因,它更喜欢以太网连接,同时保持通过无线连接传输数据的能力。这是通过将以太网接口的 MAC 地址替换为无线接口的 MAC 地址来实现的。从理论上讲,以太网或无线 MAC 地址都可以更改以匹配另一个。但是,一些流行的无线接口不支持覆盖 MAC 地址。因此,我们建议为此覆盖以太网 MAC 地址。如果无线接口的驱动程序没有在GENERIC
或定制内核中加载,而计算机运行的是 FreeBSD 12.1,可以在/boot/loader.conf
中加载相应的.ko
,在该文件中加入driver_load="YES"
并重启。另一个更好的方法是在/etc/rc.conf
中加载驱动程序,将其添加到该文件的kld_list
,详见(rc.conf(5))中,然后重新启动。这是有必要的,因为否则在设置 lagg(4) 接口的时候,驱动程序还没有被加载。在此示例中,以太网接口 re0 是主接口,无线接口 wlan0 是故障转移。wlan0 接口是从 ath0 物理无线接口创建的,以太网接口将使用无线接口的 MAC 地址进行配置。首先,启动无线接口(将 FR 替换为你自己的 2 个字母的国家/地区代码),但不要设置 IP 地址。更换 wlan0 以匹配系统的无线接口名称:# ifconfig wlan0 create wlandev ath0 country FR ssid my_router up现在,你可以确定无线接口的 MAC 地址:# ifconfig wlan0wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500ether b8:ee:65:5b:32:59groups: wlanssid Bbox-A3BD2403 channel 6 (2437 MHz 11g ht/20) bssid 00:37:b7:56:4b:60regdomain ETSI country FR indoor ecm authmode WPA2/802.11i privacy ONdeftxkey UNDEF AES-CCM 2:128-bit txpower 30 bmiss 7 scanvalid 60protmode CTS ampdulimit 64k ampdudensity 8 shortgi -stbctx stbcrx-ldpc wme burst roaming MANUALmedia: IEEE 802.11 Wireless Ethernet MCS mode 11ngstatus: associatednd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>ether
行将包含指定接口的 MAC 地址。现在,更改以太网接口的 MAC 地址以匹配:# ifconfig re0 ether b8:ee:65:5b:32:59# ifconfig re0 up# ifconfig lagg0 create# ifconfig lagg0 up laggproto failover laggport re0 laggport wlan0虚拟接口应如下所示:# ifconfig lagg0lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500options=8<VLAN_MTU>ether b8:ee:65:5b:32:59laggproto failover lagghash l2,l3,l4laggport: re0 flags=5<MASTER,ACTIVE>laggport: wlan0 flags=0<>groups: laggmedia: Ethernet autoselectstatus: active然后,启动 DHCP 客户端以获取 IP 地址:# dhclient lagg0要在重新启动后保留此配置,请将以下条目添加到 /etc/rc.conf:ifconfig_re0="ether b8:ee:65:5b:32:59"wlans_ath0="wlan0"ifconfig_wlan0="WPA"create_args_wlan0="country FR"cloned_interfaces="lagg0"ifconfig_lagg0="up laggproto failover laggport re0 laggport wlan0 DHCP"