Zet*_*ten 11 linux bonding lacp
我在 Linux 下看到了一些关于绑定接口的令人困惑的行为,我想把这种情况扔出去,希望有人能帮我解决这个问题。
我有两台服务器:服务器 1 (S1) 有 4 个 1Gbit 以太网连接;服务器 2 (S2) 有 2 个 1Gbit 以太网连接。两台服务器都运行 Ubuntu 12.04,尽管内核是 3.11.0-15(来自 lts-saucy linux-generic 包)。
两台服务器都将各自的所有网络接口捆绑到一个具有以下配置(在 中/etc/network/interfaces
)的单一 bond0 接口中:
bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate fast
bond-slaves eth0 eth1 [eth2 eth3]
Run Code Online (Sandbox Code Playgroud)
服务器之间有几台 HP 交换机,(我认为)它们在相关端口上为 LACP 正确配置。
现在,链接正在工作 - 网络流量愉快地进出两台机器。并且所有相应的接口都在使用,因此聚合并非完全失败。但是,我需要在这两台服务器之间提供尽可能多的带宽,而且我没有获得预期的 ~2Gbit/s。
在我的测试中,我可以观察到每个服务器似乎将每个 TCP 连接(例如 iperf、scp、nfs 等)分配给单个从接口。基本上一切似乎都限制在最大 1 Gb。
通过设置bond-xmit-hash-policy layer3+4
,我可以使用iperf -c S1 -P2
在两个从接口上发送,但在服务器端,接收仍然只发生在一个从接口上,因此总吞吐量上限为 1Gbit/s,即客户端显示 ~40-50MB/s在两个从接口上,服务器在一个从接口上显示 ~100MB/s。不设置bond-xmit-hash-policy
发送也仅限于一个从接口。
我的印象是 LACP 应该允许这种连接捆绑,例如,允许单个 scp 传输使用两个主机之间的所有可用接口。
我对 LACP 的理解有误吗?还是我在某处错过了一些配置选项?任何建议或调查线索将不胜感激!
Mik*_*lor 18
一个简单粗暴的解释是,使用 LACP 的单线通信不会在多个接口上拆分数据包。例如,如果您有单个 TCP 连接将数据包从 HostA 流式传输到 HostB,则它不会跨越接口发送这些数据包。我最近一直在这里研究 LACP 以寻找我们正在研究的解决方案,这是一个常见的误解,即“绑定”或“中继”多个网络接口与 LACP 可为您提供组合接口的“吞吐量”。一些供应商已经制作了可以通过多个接口进行路由的专有驱动程序,但 LACP 标准与我所阅读的内容不同。这是我在搜索类似问题时从 HP 找到的一个不错的图表和解释的链接:http : //www.hp.com/rnd/library/pdf/59692372.pdf