我在 Ubuntu 12.04.2 LTS 上使 LACP 中继正常运行时遇到了问题。
我的设置是一台主机,通过两个 10 Gbe 接口连接到两个独立的 Nexus 5548 交换机,并将 vPC 配置为启用多机箱 LACP。Nexus 配置符合 Cisco 指南,Ubuntu 配置符合https://help.ubuntu.com/community/UbuntuBonding
服务器连接到每个 Nexus 交换机上的 Ethernet1/7 端口,这些端口的配置相同,并位于端口通道 15 中。端口通道 15 配置为 VPC 15,VPC 输出看起来不错。这些是简单的接入端口,即不涉及 801.1q 中继。
图表:
+----------+ +----------+ +----------+ +----------+
| client 1 |------| nexus 1 |------| nexus 2 |------| client 2 |
+----------+ +----------+ +----------+ +----------+
| |
| +--------+ |
+----| server |----+
eth4 +--------+ eth5
当任一链路断开时,客户端 1 和 2 都能够访问服务器。但是,当我打开辅助链路时,连接到具有新启用链路的交换机的客户端无法访问服务器。请参阅下表了解状态转换和结果:
port states (down by means of "shutdown")
nexus 1 eth1/7 up up down up
nexus 2 eth1/7 down up up up
connectivity
client 1 - server OK OK OK FAIL
client 2 - server OK FAIL OK OK
现在,我相信我已经将问题隔离到了 Linux 端。当处于 up-up 状态时,每个 nexus 都使用本地链接到服务器来传送数据包,这可以通过查看 mac 地址表来验证。我在服务器上能够看到的是,通过使用 tcpdump -i ethX,来自每个客户端的数据包都在 ethX 接口上接收(来自客户端 1 的数据包在 eth4 上,来自客户端 2 的数据包在 eth4 上),但是当我运行 tcpdump -i bond0 时,我只能从任一主机传输流量(根据我上面所述)。
我观察到 ARP 和 ICMP(IP)流量的相同行为;当两个链接都处于开启状态时,客户端的 ARP 会失败;当其中一个链接关闭时,ARP 会工作(与 ping 一起);当我再次启用链接时,ping 会失败(仍然在 eth 接口上接收数据包,但不在 bond0 上接收)。
需要澄清的是,我在这种配置下设置了多台服务器,并且都显示相同的症状,因此似乎与硬件无关。
所以 - 弄清楚如何解决这个问题是我正在处理的事情;到目前为止,我的谷歌搜索还没有给我带来任何运气。
非常感谢任何指点。
/etc/网络/接口
auto eth4
iface eth4 inet manual
bond-master bond0
auto eth5
iface eth5 inet manual
bond-master bond0
auto bond0
iface bond0 inet static
address 10.0.11.5
netmask 255.255.0.0
gateway 10.0.0.3
mtu 9216
dns-nameservers 8.8.8.8 8.8.4.4
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
#bond-slaves eth4
bond-slaves eth4 eth5
/proc/net/bonding/bond0
A little further information:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 33
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00
Slave Interface: eth4
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 8
Permanent HW addr: 90:e2:ba:3f:d1:8c
Aggregator ID: 1
Slave queue ID: 0
Slave Interface: eth5
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 13
Permanent HW addr: 90:e2:ba:3f:d1:8d
Aggregator ID: 2
Slave queue ID: 0
编辑:从 Nexus 添加配置
vpc domain 100
role priority 4000
system-priority 4000
peer-keepalive destination 10.141.10.17 source 10.141.10.12
peer-gateway
auto-recovery
interface port-channel15
description server5
switchport access vlan 11
spanning-tree port type edge
speed 10000
vpc 15
interface Ethernet1/7
description server5 internal eth4
no cdp enable
switchport access vlan 11
channel-group 15
编辑:添加了同一台服务器的 nexus1 上的非 VPC 端口通道的结果,包括 IP 更改前后的结果(更改 IP 以影响负载平衡算法)。这仍然在服务器上使用相同的设置。
port states (down by means of "shutdown")
nexus 1 eth1/7 up up down up
nexus 1 eth1/14 down up up up <= port moved from nexus 2 eth1/7
connectivity (sever at 10.0.11.5, hashing uses Eth1/14)
client 1 - server OK OK OK FAIL
client 2 - server OK OK OK FAIL
更改IP后的结果正如预期,未使用的接口被启动导致失败。
connectivity (sever at 10.0.11.15, hashing uses Eth1/7)
client 1 - server OK FAIL OK OK
client 2 - server OK FAIL OK OK
答案1
我在 Ubuntu 中设法运行的唯一 LACP 配置是:
auto bond0
iface bond0 inet dhcp
bond-mode 4
bond-slaves none
bond-miimon 100
bond-lacp-rate 1
bond-updelay 200
bond-downdelay 200
auto eth0
iface eth0 inet manual
bond-master bond0
auto eth1
iface eth1 inet manual
bond-master bond0
即我不使用 bond-slave,而是使用 bond-master。我不确定有什么区别,但我发现这个配置对我有用。
尽管这是采用 1Gbe 网络,但我的设置下 LACP 没有任何问题。
此外,如果仍然遇到问题,请尝试将两根电缆插入同一交换机并配置 LACP 端口。这只是为了消除多机箱 LACP 出现问题的可能性。
答案2
问题不在于 Linux 端,而在于 nexus 端以及它在 vPC 配置中的工作方式。
要在 nexus 上配置 vPC,首先您需要连接两个 nexus 交换机并将该链接配置为“peer-link”。
正常情况下,当从交换机到服务器的两条链路都处于 UP 状态时,在 vPC 上配置的 vlan 11 中的流量会在对等链路上被丢弃。
仅当 vPC 中的一个接口关闭时,对等链路上才允许 VLAN 11 中的流量。
这就是 vPC 在 nexus 交换机上的工作方式。
为了解决这个问题,您可以运行 fabric-path 并在交换机 nexus-1 和 nexus-2 之间建立另一个连接。