我正在尝试将 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 的性能是可能的,因为交换机不仅能够根据 MAC/IP 分配流量,还能够根据端口号分配流量。Cisco 设备完全能够做到这一点,但您可能必须将交换机配置为查看 L4 端口,而不仅仅是 L2 和 L3 地址(这可能是默认设置)。
你真正的原因是大概两台服务器之间的性能不会超过 1 个 NIC,因为 1Gbps 双向流量对于任何现代 CPU 来说都是非常大的。我不知道您的服务器有多强大,但如果服务器对收到的每个数据包都做了有意义的事情,那么我会惊讶于服务器是否能够处理 1Gbps 全双工。
抱歉,我无意侵犯@longneck 上面的回答,只是想澄清一些额外的观点。