Ubuntu 12.04 和 Cisco 交换机上的网络绑定模式 802.3ad

Ubuntu 12.04 和 Cisco 交换机上的网络绑定模式 802.3ad

我正在尝试将 3 张网卡组合到 2 台服务器上。我试图实现 3Gbps 的最大吞吐量,以便在服务器之间复制数据。设置很简单,我有 2 台服务器,它们都配有 3 张千兆网卡,连接在同一台 Cisco 交换机上。服务器 1 的端口正好是 1-2-3,服务器 2 的端口正好是 4-5-6。我的接口配置如下:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual
        bond-master bond0

auto eth1
iface eth1 inet manual
        bond-master bond0

auto eth2
iface eth2 inet manual
        bond-master bond0

auto bond0
iface bond0 inet static
        address 192.168.1.11
        netmask 255.255.255.0
        gateway 192.168.1.1

        bond-miimon 100
        bond-mode 802.3ad
        #bond-downdelay 200
        #bond-updelay 200
        bond-lacp-rate 1
        # tried bond with slaves and no slaves interfaces
        bond-slaves eth0 eth1 eth2 
        # bond-slaves none

我尝试在这些卡上进行多种配置,但最终总是一次只使用 1 张网卡。

我使用 iperf 和 netcat 测试了性能

# server-1
iperf -s

# server-2 
iperf -c 192.168.1.10

# Wait for trafic
nc.traditional -l -p 5000 | pv > /dev/null 

# Push trafic
dd if=/dev/zero | pv | nc.traditional 192.168.1.11 5000

我们还在 Cisco 交换机上尝试了许多配置,有的没有端口通道,有的有端口通道,并且每次只使用 1 张网卡。如果我们单独测试每张卡,它们的工作速度为 1Gbps。

我还可以说,在 /proc/net/bonding/bond0 中,模式显示 802.3ad,LACP 速率显示 FAST。我没有链路计数故障,并且显示了 3 个接口。我还使用 ethtool 验证了每个 eth 接口,它们对我来说看起来不错。

我按照本指南进行设置https://help.ubuntu.com/community/UbuntuBonding并且我在内核中启用了绑定模块modprobe bonding,当我使用它lsmod来验证绑定模块是否启动时,是的,它在列表中。

为了实现这个目标我们还缺少什么?

答案1

两台服务器之间的性能永远不会超过 1 个 NIC。交换机不会将来自单个源的帧分散到链路聚合组 (LAG) 中的多个链路上。它们实际上所做的是对源 MAC 或 IP(或两者)进行哈希处理,并使用该哈希将客户端分配给一个 NIC。

因此,您的服务器可以根据需要通过任意数量的 NIC 进行传输,但这些帧都将通过一条链路发送到目标服务器。

答案2

要测试 LAG,请使用多个线程,以便它们使用多个链接。使用 netperf 尝试:

netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &

您应该会看到部分流量冲击了绑定中的其他从属服务器。

我在 LACP 绑定中有四个 10GbE 端口,并且在两个服务器之间每个方向可以获得 32Gb 到 36Gb 的速率。

另一种方法是在具有多个 IP 地址的绑定上设置别名,然后向不同的地址启动多个 netperf 实例。

您的服务器配备了 Intel Xeon 处理器 X5690,拥有足够的功率来驱动每个核心接近 10Gb。

我已经在 8x1GbE 端口上驱动了 80Gb 单向流量。关键是在交换机和 NIC 上使用 l3+l4 哈希并使用多个线程。

这是我的 4x10GbE 配置的示例...我的接口配置文件:

#Ports that will be used for VXLAN Traffic in on Bond0
auto p4p1
auto p4p2
auto p6p1
auto p6p2

iface p4p1 inet manual
bond-master bond0

iface p4p2 inet manual
bond-master bond0

iface p6p1 inet manual
bond-master bond0

iface p6p2 inet manual
bond-master bond0

#Configure Bond0. Setup script will provide VXLAN VLAN configuration on bond0
auto bond0
iface bond0 inet manual
#address 10.3.100.60
#netmask 255.255.0.0
bond-mode 4
bond-slaves none
bond-lacp-rate 0
bond-ad-select 1
bond-miimon 100
bond-xmit_hash_policy 1

猫/ proc / net / bonding / bond0

root@host2:~# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): bandwidth
Active Aggregator Info:
    Aggregator ID: 2
    Number of ports: 4
    Actor Key: 33
    Partner Key: 32768
    Partner Mac Address: 54:7f:ee:e3:01:41

Slave Interface: p6p1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:e4
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p4p2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:69
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p4p1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:68
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p6p2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:e5
Aggregator ID: 2
Slave queue ID: 0

以下是运行多个 netperf 实例的结果:

root@host6:~# vnstat -i bond0.192 -l
Monitoring bond0.192...    (press CTRL-C to stop)

   rx:    36.83 Gbit/s 353202 p/s          tx:   162.40 Mbit/s 314535 p/s

bond0.192  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------
  bytes                   499.57 GiB  |        2.15 GiB
--------------------------------------+------------------
          max           36.90 Gbit/s  |   170.52 Mbit/s
      average           20.05 Gbit/s  |    86.38 Mbit/s
          min               0 kbit/s  |        0 kbit/s
--------------------------------------+------------------
  packets                   39060415  |        34965195
--------------------------------------+------------------
          max             369770 p/s  |      330146 p/s
      average             186891 p/s  |      167297 p/s
          min                  0 p/s  |           0 p/s
--------------------------------------+------------------
  time                  3.48 minutes

希望这可以帮助...

答案3

抱歉将此作为答案发布。我无法对 @longneck 的答案添加评论,可能是因为声誉不佳……?

在两台服务器之间实现多于 1 个 NIC 的性能是可能的,因为交换机不仅能够根据 MA​​C/IP 分配流量,还能够根据端口号分配流量。Cisco 设备完全能够做到这一点,但您可能必须将交换机配置为查看 L4 端口,而不仅仅是 L2 和 L3 地址(这可能是默认设置)。

你真正的原因是大概两台服务器之间的性能不会超过 1 个 NIC,因为 1Gbps 双向流量对于任何现代 CPU 来说都是非常大的。我不知道您的服务器有多强大,但如果服务器对收到的每个数据包都做了有意义的事情,那么我会惊讶于服务器是否能够处理 1Gbps 全双工。

抱歉,我无意侵犯@longneck 上面的回答,只是想澄清一些额外的观点。

相关内容