32.6. 链路聚合与故障转移

Written by Andrew Thompson.

32.6.1. 介绍

使用 lagg(4) 接口, 能够将多个网络接口聚合为一个虚拟接口, 以提供容灾和高速连接的能力。

32.6.2. 运行模式

Failover (故障转移)

只通过主网口收发数据。 如果主网口不可用, 则使用下一个激活的网口。 您在这里加入的第一个网口便会被视为主网口; 此后加入的其他网口, 则会被视为故障转移的备用网口。 如果发生故障转移之后, 原先的网口又恢复了可用状态, 则它仍会作为主网口使用。

Cisco® Fast EtherChannel®

Cisco® Fast EtherChannel® (FEC) 是一种静态配置, 并不进行节点间协商或交换以太网帧来监控链路情况。 如果交换机支持 LACP, 则应使用后者而非这种配置。

FEC 将输出流量在激活的网口之间以协议头散列信息为依据分拆, 并接收来自任意激活网口的入流量。 散列信息包含以太网源地址、 目的地址, 以及 (如果有的话) VLAN tag 和 IPv4/IPv6 源地址及目的地址信息。

LACP

支持 IEEE® 802.3ad 链路聚合控制协议 (LACP) 和标记协议。 LACP 能够在节点与若干链路聚合组之间协商链路。 每一个链路聚合组 (LAG) 由一组相同速度、 以全双工模式运行的网口组成。 流量在 LAG 中的网口之间, 会以总速度最大的原则进行分摊。 当物理链路发生变化时, 链路聚合会迅速适应变动形成新的配置。

LACP 也是将输出流量在激活的网口之间以协议头散列信息为依据分拆, 并接收来自任意激活网口的入流量。 散列信息包含以太网源地址、 目的地址, 以及 (如果有的话) VLAN tag 和 IPv4/IPv6 源地址及目的地址信息。

Loadbalance (负载均衡)

这是 FEC 模式的别名。

Round-robin (轮转)

将输出流量以轮转方式在所有激活端口之间调度, 并从任意激活端口接收进入流量。 这种模式违反了以太网帧排序规则, 因此应小心使用。

32.6.3. 例子

例 32.1. 与 Cisco® 交换机配合完成 LACP 链路聚合

在这个例子中, 我们将 FreeBSD 的两个网口作为一个负载均衡和故障转移链路聚合组接到交换机上。 在此基础上, 还可以增加更多的网口, 以提高吞吐量和故障容灾能力。 由于以太网链路上两节点间的帧序是强制性的, 因此两个节点之间的连接速度, 会取决于一块网卡的最大速度。 传输算法会尽量采用更多的信息, 以便将不同的网络流量分摊到不同的网络接口上, 并平衡不同网口的负载。

Cisco® 交换机上将 FastEthernet0/1FastEthernet0/2 这两个网口添加到 channel-group 1

interface FastEthernet0/1
 channel-group 1 mode active
 channel-protocol lacp
!
interface FastEthernet0/2
 channel-group 1 mode active
 channel-protocol lacp

使用 fxp0fxp1 创建 lagg(4) 接口, 启用这个接口并配置 IP 地址 10.0.0.3/24

# ifconfig fxp0 up
# ifconfig fxp1 up
# ifconfig lagg0 create 
# ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24

用下面的命令查看接口状态:

# ifconfig lagg0

标记为 ACTIVE 的接口是激活据合组的部分, 这表示它们已经完成了与远程交换机的协商, 同时, 流量将通过这些接口来收发。 在 ifconfig(8) 的详细输出中会给出 LAG 的标识。

lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:05:5d:71:8d:b8
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

如果需要查看交换机上的端口状态, 则应使用 show lacp neighbor 命令:

switch# show lacp neighbor
Flags:  S - Device is requesting Slow LACPDUs
        F - Device is requesting Fast LACPDUs
        A - Device is in Active mode       P - Device is in Passive mode

Channel group 1 neighbors

Partner's information:

                  LACP port                        Oper    Port     Port
Port      Flags   Priority  Dev ID         Age     Key     Number   State
Fa0/1     SA      32768     0005.5d71.8db8  29s    0x146   0x3      0x3D
Fa0/2     SA      32768     0005.5d71.8db8  29s    0x146   0x4      0x3D

如欲查看进一步的详情, 则需要使用 show lacp neighbor detail 命令。

如果希望在系统重启时保持这些设置, 应在 /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"

例 32.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

创建成功之后, 接口状态会是类似下面这样, 主要的区别是 MAC 地址和设备名:

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:05:5d:71:8d:b8
        inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet autoselect
        status: active
        laggproto failover
        laggport: 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"

例 32.3. 有线网络和无线网络接口间的自动切换

对于使用笔记本的用户来说, 通常会希望使用无线网络接口作为备用接口, 以便在有线网络不可用时继续保持网络连接。 通过使用 lagg(4), 我们可以只使用一个 IP 地址的情况下, 优先使用性能和安全性都更好的有线网络, 同时保持通过无线网络连接来传输数据的能力。

要实现这样的目的, 就需要将用于连接无线网络的物理接口的 MAC 地址修改为与所配置的 lagg(4) 一致, 后者是从主网络接口, 也就是有线网络接口, 继承而来。

在这个配置中, 我们将优先使用有线网络接口 bge0 作为主网络接口, 而将无线网络接口 wlan0 作为备用网络接口。 这里的 wlan0 使用的物理设备是 iwn0, 我们需要将它的 MAC 地址修改为与有线网络接口一致。 为了达到这个目的首先要得到有线网络接口上的 MAC 地址:

# ifconfig bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
	ether 00:21:70:da:ae:37
	inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active

您可能需要将 bge0 改为您系统上实际使用的接口, 并从输出结果中的 ether 这行找出有线网络的 MAC 地址。 接着是修改物理的无线网络接口, iwn0

# ifconfig iwn0 ether 00:21:70:da:ae:37

启用无线网络接口, 但不在其上配置 IP 地址:

# ifconfig wlan0 create wlandev iwn0 ssid my_router up

启用 bge0 接口。 创建 lagg(4) 接口, 其中 bge0 作为主网络接口, 而以 wlan0 作为备选接口:

# ifconfig bge0 up
# ifconfig lagg0 create
# ifconfig lagg0 up laggproto failover laggport bge0 laggport wlan0

新创建的接口的状态如下, 您系统上的 MAC 地址和设备名等可能会有所不同:

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:21:70:da:ae:37
        media: Ethernet autoselect
        status: active
        laggproto failover
        laggport: wlan0 flags=0<>
        laggport: bge0 flags=5<MASTER,ACTIVE>

接着用 DHCP 客户端来获取 IP 地址:

# dhclient lagg0

如果希望在系统重启时保持这些设置, 应在 /etc/rc.conf 中增加如下配置:

ifconfig_bge0="up"
ifconfig_iwn0="ether 00:21:70:da:ae:37"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP"

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.