32.6. 链路聚合与故障转移
上一页 | 第 32 章 高级网络 | 下一页

## 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/1` 和 `FastEthernet0/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`

使用 `fxp0` 和 `fxp1` 创建 lagg(4) 接口， 启用这个接口并配置 IP 地址 `10.0.0.3/24`：

`#` `ifconfig `fxp0` up` `#` `ifconfig `fxp1` up` `#` `ifconfig `lagg`0`` create` `#` `ifconfig `lagg`0`` up laggproto lacp laggport `fxp0` laggport `fxp1` `10.0.0.3/24``

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

`#` `ifconfig `lagg`0```

标记为 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="`lagg`0``" ifconfig_`lagg`0``="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 `lagg`0`` create` `#` `ifconfig `lagg`0`` up laggproto failover laggport `fxp0` laggport `fxp1` `10.0.0.15/24``

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

`#` `ifconfig `lagg`0``` 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="`lagg`0``" ifconfig_`lagg`0``="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 `lagg`0`` create` `#` `ifconfig `lagg`0`` up laggproto failover laggport `bge0` laggport `wlan0``

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

`#` `ifconfig `lagg`0``` 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 `lagg`0```

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

ifconfig_bge0="up" ifconfig_iwn0="ether 00:21:70:da:ae:37" wlans_iwn0="wlan0" ifconfig_wlan0="WPA" cloned_interfaces="`lagg`0``" ifconfig_`lagg`0``="laggproto failover laggport bge0 laggport wlan0 DHCP"

上一页 | 上一级 | 下一页
32.5. 桥接 | 起始页 | 32.7. 无盘操作

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

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.