我在Linux下看到一些关于绑定接口的混淆行为,我想把这种情况抛诸脑后,希望有人能为我解决这个问题。
我有两台服务器:服务器1(S1)有4个1Gbit以太网连接; 服务器2(S2)具有2个1Gbit以太网连接。 两台服务器都运行Ubuntu 12.04,尽pipe内核为3.11.0-15(来自lts-saucy linux-generic软件包)。
两台服务器都将其各自的networking接口绑定到单个bond0接口中,并具有以下configuration(在/etc/network/interfaces ):
bond-mode 802.3ad bond-miimon 100 bond-lacp-rate fast bond-slaves eth0 eth1 [eth2 eth3]
在服务器之间有几个惠普交换机(我认为)正确configurationLACP的端口有问题。
现在,链接正在工作 – networkingstream量愉快地stream入和stream出两台机器。 而且所有的接口都在使用,所以不像聚合是完全失败的。 但是,我需要在这两个服务器之间的尽可能多的带宽,我没有得到我期望的〜2Gbit / s。
在我的testing中,我可以观察到,每个服务器似乎都将每个TCP连接(例如,iperf,scp,nfs等)分配给一个从属接口。 基本上所有东西似乎都被限制在最大1千兆位。
通过设置bond-xmit-hash-policy layer3+4 ,我可以使用iperf -c S1 -P2发送两个从接口,但是在服务器端,接收仍然只发生在一个从接口上,因此总吞吐量上限为1Gbit / s,即客户端在两个从接口上显示〜40-50MB / s,服务器在一个从接口上显示〜100MB / s。 在没有设置bond-xmit-hash-policy的情况下,发送也仅限于一个从接口。
我觉得LACP应该允许这种连接捆绑,例如,允许单个scp传输来利用两个主机之间的所有可用接口。
我对LACP的理解错了吗? 还是我错过了一些configuration选项? 任何意见或线索调查将不胜感激!
一个快速和肮脏的解释是,使用LACP的单线通信不会将数据包分割到多个接口上。 例如,如果您有一个TCP连接将数据包从HostAstream式传输到HostB,则不会跨接口发送这些数据包。 最近我一直在研究LACP,这是我们正在研究的一个解决scheme,这是一个常见的误解,即使用LACP“绑定”或“中继”多个networking接口可以为您提供组合接口的“吞吐量”。 一些供应商已经制定了专有的驱动程序,将路由通过多个接口,但LACP标准不是从我读过的。 下面是我在HPsearch类似问题时find的一个体面图和说明的链接: http : //www.hp.com/rnd/library/pdf/59692372.pdf
bond-xmit-hash-policy layer3+4设置从源服务器到交换机的负载平衡。 它不会将您的交换机的负载平衡algorithm设置为第二台服务器。 这几乎肯定是二层或三层平衡,即根本不。
那么首先,在使用组合驱动程序时,会产生一些开销,并将1GB适配器上的预期最大吞吐量(〜940 MB / s)降低〜10%。
我不确定你有什么样的适配器,但是如果你使用的是内置的驱动程序,设置对于最大的吞吐量可能并不理想。 您可以考虑添加队列,最多4个,因为适配器上的单个队列可能无法达到线速。
另一个考虑因素是iperf的一个线程可能不会达到最高速度。 对于1GB,2-6个线程可能更理想,您可以使用简单的bash脚本同时启动多个线程。
对于英特尔网卡,但RSS和硬件RSC可能会影响吞吐量,请在Broadcom上确保TOE正常工作。
但是,第一步是去掉LAG,然后试着在每个系统上testing一个端口的stream量,看看它的吞吐量是多less,在所有的端口上都这么做,然后试试2. LACP是一个可以设置的易变的野兽正确的,我从来没有试图设置在惠普交换机,只有Force10(戴尔之前)。
另外,为什么有一个交换机?