31.7. 链路聚合与故障转移

Written by Andrew Thompson.

FreeBSD 提供了lagg(4)接口,它可将多个网口合成一个虚拟网口,以提供故障转移和链路聚合功能。故障转移允许流量继续流动,只要至少有一个聚合的网络接口具有已建立的链接。链路聚合在支持LACP的交换机上效果最佳,因为此协议在响应单个链路故障时双向分布流量。

lagg 接口支持的聚合协议决定了哪些端口用于传出流量以及特定端口是否接受传入流量。lagg(4)支持以下协议:

failover (故障转移)

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

fec / loadbalance(负载均衡)

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

lacp

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

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

roundrobin (轮转)

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

31.7.1. 设定示例

本章介绍如何在 FreeBSD 和 Cisco® 交换机上设置 LACP 负载均衡。如何设置两个网口为故障转移模式。还将介绍如何在有线网络和无线网络之间设置故障转移。

例 31.1. 在Cisco®交换机上设置LACP Aggregation

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

帧排序在以太网链路上是强制性的,两个站点之间的任何流量始终通过同一物理链路流动,将最大速度限制为一个接口。传输算法尝试使用尽可能多的信息来区分不同的流量并平衡跨可用接口的流。

Cisco® 路由器上将FastEthernet0/1FastEthernet0/2添加到通道组1

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

在 FreeBSD 上使用物理接口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
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.3 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

标记为ACTIVE 的端口是与远程交换机协商好的LAG的一部分。流量将通过这些活动端口进行传输和接收。在上述命令中添加-v以查看LAG标识符。

查看Cisco®交换机上的接口状态:

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查看详细状态。

要在重新启动期间保留此配置,请向 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"

例 31.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 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"

例 31.3. 以太网络与无线界面间的容错移转模式

对于笔记本电脑用户来说,通常情况下,最好将无线设备配置为辅助设备,只有在没有有线网连接时才使用。通过lagg(4),可以配置一个故障转移,出于性能和安全的考虑,在保持通过无线连接传输数据的能力的同时,优先使用有线连接。

这是通过将以太网接口的MAC地址替换为无线接口的MAC地址来实现的。

注意:

理论上来说,无论是以太网还是无线MAC地址,都可以通过改变MAC地址来匹配对方。但是,一些流行的无线接口缺乏对覆盖MAC地址的支持。因此,我们建议为此目的重写以太网MAC地址。

在本例中,re0以太网接口为主接口,wlan0无线接口为故障切换接口。wlan0接口是由ath0物理无线接口创建的,而以太网接口将以无线接口的MAC地址配置为无线接口。首先,确定无线接口的MAC地址:

# ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	ether b8:ee:65:5b:32:59
	groups: wlan
	ssid Bbox-A3BD2403 channel 6 (2437 MHz 11g ht/20) bssid 00:37:b7:56:4b:60
	regdomain ETSI country FR indoor ecm authmode WPA2/802.11i privacy ON
	deftxkey UNDEF AES-CCM 2:128-bit txpower 30 bmiss 7 scanvalid 60
	protmode CTS ampdulimit 64k ampdudensity 8 shortgi -stbctx stbcrx
	-ldpc wme burst roaming MANUAL
	media: IEEE 802.11 Wireless Ethernet MCS mode 11ng
	status: associated
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

替换wlan0为系统无线网卡的名称。 ether 行将包含指定接口的MAC地址。现在,更改以太网接口的MAC

# ifconfig re0 ether b8:ee:65:5b:32:59

启用无线网络接口(将 FR 替换为您所在的两位区域代码),先不设置 IP 地址:

# ifconfig wlan0 create wlandev ath0 country FR ssid my_router up

确保re0接口已启动,然后创建lagg(4)接口,将re0作为主接口,故障转移接口设置为wlan0

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

虚拟端口信息如下所示:

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether b8:ee:65:5b:32:59
        laggproto failover lagghash l2,l3,l4
        laggport: re0 flags=5<MASTER,ACTIVE>
        laggport: wlan0 flags=0<>
        groups: lagg
        media: Ethernet autoselect
        status: 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"

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

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

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