据我了解,绑定除其他好处外,还能够提高局域网中两台机器之间的网络速度。
绑定 [...] 意味着将多个网络接口 (NIC) 组合到一条链路,以提供高可用性、负载平衡、最大吞吐量,或者这些的组合。
来源:Ubuntu 文档,强调一下。
我在两台服务器上配置了绑定;两台服务器都有两个 1Gbps NIC 适配器。在测试这些服务器之间的速度时使用iperf
,报告指出:
balance-rr
使用绑定模式时为 930 到 945 Mbits/sec 。- 使用时从机器 A 到 B 的速率为 520 到 530 Mbits/秒
802.3ad
, - 使用时从机器 B 到 A 的速度为 930 到 945 Mbits/秒
802.3ad
。
有趣的是,当使用时802.3ad
,ifconfig
表示实际上所有RX
都处于开启状态eth0
(2.5 GB 对几 KB/MB)且机器 A 上的所有都处于开启TX
状态eth1
,而机器 B 上则相反。
当要求iperf
使用多个连接(iperf -c 192.168.1.2 -P 10
)时,得到的总和与使用单个连接时显示的结果非常接近。
两台机器连接到 Netgear GS728TS,该设备已正确配置 LACP(我希望如此),两个 LAG 分别覆盖两个端口。已启用 IEEE 802.3x 模式。
适合iperf
这种测试吗?如果是,我是否遗漏了什么?
答案1
绑定接口不会为单个网络流授予额外带宽。因此,如果您只运行一份 iperf,那么您一次只能使用一个网络接口。如果您的 lagg 中有两个 NIC,那么您至少需要在计算机上运行两个完全独立的 iperf 副本才能看到任何同时利用率。这也适用于实际负载 - 例如,Samba 客户端仍然只能看到 1Gb 吞吐量,但如果您的 lagg 有两个 NIC,则两个客户端可以分别看到 1Gb。这一切都假设您已将 lagg 配置为使用两个 NIC(802.3ad 选项将执行此操作)。
答案2
与 Netgear 支持人员联系后,发现:
如果您使用 2 个站(1 个客户端/1 个服务器),它实际上将只使用一个链路(因此为 1Gbps/940mbps),使用的链路由 LACP 哈希算法决定。
要超过 1Gbps 的限制,您需要使用 1 个以上的客户端进行测试。
来源:Netgear 支持票回复
同一条票的回复链接至 Netgear 的公共论坛帖子,我们可以读到:
只有当 LACP 哈希算法将多个流量流放到不同的路径时,您才能获得 2Gbps 的聚合,但情况并非总是如此。如果客户端数量较少(您的情况是 2 个),则很有可能它们都散列到同一链路。
对于那些不想阅读整个论坛讨论的人,以下是要点:
至少应有两个客户端连接到服务器才能从 LACP 中受益。单个客户端将仅使用一条链路,这会将其速度限制为 1 Gbps。
两个客户端应该使用不同的链路才能从 LACP 中受益。
如果服务器上只有两个网络适配器,则从两个客户端获得相同链接的几率为 50%,这将导致总速度限制在 1 Gbps。如果有三个网络适配器,几率将降低到 33%,如果是四个,几率将降低到 25%。
总而言之,Netgear GS728TS 无法在两台机器之间实现 1.4 到 1.8 Gbps 的速度。
答案3
这个问答对我理解 LACP 绑定非常有帮助,但没有具体的例子来验证大约 1.8Gb/s 的吞吐量。对我来说,验证这一点很重要,所以我将分享我如何测试它。
作为@克里斯他在回答中指出,运行完全独立的 iperf 副本非常重要。为了实现这一点,我使用两个客户端连接到 lacp-server。在 lacp-server 上,我使用屏幕在两个屏幕窗口/会话中运行独立的 iperf 实例。我还通过为每个连接使用不同的端口来确保有独立的数据流。我的与服务器绑定 LACP 的交换机是 TP-LINK T1600G-52TS。所有设备都使用Debian 10(Buster)。两个测试客户端连接到交换机的一个端口。首先,我在 lacp-server 上以服务器模式启动 iperf 两次屏幕然后在客户端执行同时(使用 ssh):
iperf --time 30 --port 5001 --client lacp-server # first test client
iperf --time 30 --port 5002 --client lacp-server # second test client
以下是 lacp-server 上第一次连接的结果:
lacp-server ~$ iperf -s -p 5001
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.10.11 port 5001 connected with 192.168.10.69 port 44120
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-30.0 sec 2.99 GBytes 855 Mbits/sec
对于第二个连接:
lacp-server ~$ iperf -s -p 5002
------------------------------------------------------------
Server listening on TCP port 5002
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.10.11 port 5002 connected with 192.168.10.80 port 48930
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-30.0 sec 3.17 GBytes 906 Mbits/sec
合计带宽为 855Mb/s + 906Mb/s = 1.761Mb/s。
@ArseniMourzenko他在回答中指出:
如果服务器上只有两个网络适配器,则从两个客户端获得相同链接的几率为 50%,这将导致总速度限制在 1 Gbps。如果有三个网络适配器,几率将降低到 33%,如果是四个,几率将降低到 25%。
我已经重复测试十多次来验证这一点,但总是得到大约 1.8Gb/s 的带宽,所以我无法确认这一点。
接口统计显示其使用情况比较均衡:
lacp-server ~$ ip -statistics link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
3088 30 0 0 0 0
TX: bytes packets errors dropped carrier collsns
3088 30 0 0 0 0
2: eno1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
39231276928 25845127 0 0 0 916
TX: bytes packets errors dropped carrier collsns
235146272 3359187 0 0 0 0
3: eno2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
36959564721 24351697 0 0 0 60
TX: bytes packets errors dropped carrier collsns
267208437 3816988 0 0 0 0
4: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
69334437898 50196824 0 4253 0 976
TX: bytes packets errors dropped carrier collsns
502354709 7176175 0 0 0 0
通过三个测试客户端我得到了以下结果:
- 522 Mb/s + 867 Mb/s + 486 Mb/s = 1.875 Mb/s
- 541 Mb/s + 863 Mb/s + 571 Mb/s = 1.975 Mb/s
- 534 Mb/s + 858 Mb/s + 447 Mb/s = 1.839 Mb/s
- 443 Mb/s + 807 Mb/s + 606 Mb/s = 1.856 Mb/s
- 483 Mb/s + 805 Mb/s + 512 Mb/s = 1.800 Mb/s
参考:
链路聚合和 LACP 基础知识
LACP 绑定和 Linux 配置
Linux 以太网绑定驱动程序指南
RedHat - 使用通道绑定