FreeBSD 使用手册
上一页 | 第31章 　高级网络 | 下一页

# 31.6 链路聚合与故障转移

Written by Andrew Thompson.

## 31.6.1 介绍

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

## 31.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 (轮转)

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

## 31.6.3 例子

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

在 FreeBSD 使用 `fxp0` 和 `fxp1` 创建 lagg(4) 接口：

    # ifconfig lagg0 create
    # ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1

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

    # 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` 命令。

例 31-2. 故障转移模式

故障转移模式中， 当首选链路发生问题时， 会自动切换到备用端口。 下面的命令会创建 `lagg0` 接口， 并使用 `fxp0` 作为首选接口， 而 `fxp1` 作为备用接口：

    # ifconfig lagg0 create
    # ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1

创建成功之后， 接口状态会是类似下面这样， 主要的区别是 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
            media: Ethernet autoselect
            status: active
            laggproto failover
            laggport: fxp1 flags=0<>
            laggport: fxp0 flags=5<MASTER,ACTIVE>

系统将在 `fxp0` 上进行流量的收发。 如果 `fxp0` 的连接中断， 则 `fxp1` 会自动成为激活连接。 如果主端口的连接恢复， 则它又会成为激活连接。

例 31-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 create wlan0 wlandev iwn0 ssid my_router up

创建 lagg(4) 接口， 其中 `bge0` 作为主网络接口， 而以 `wlan0` 作为备选接口：

    # 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>

通过设置下列的 `/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>.