Linux:使用绑定来连接两台服务器以实现更快的文件传输

我的设置是两台戴尔R720服务器,每台服务器通过4个千兆位端口连接到Cisco WS-C2960S-24TS-L交换机,后者通过100MBit连接到Internet。

服务器运行在openvz(redhad)内核的Wheezy中: 2.6.32-openvz-042stab081.3-amd64

我想要的是两台服务器之间更快的文件传输以及某种容错级别。

我设法设置绑定和尝试绑定模式balance-rr802.3adbalance-alb 。 所有的工作都在我能够连接到服务器。 但是他们之间的数据传输速度并没有提高。

(删除:我明白, balance-rr只适用于xover cabeling。)

看看ifconfig和单个接口的stream量计数,我看到:

  • 802.3ad :仅使用第一个接口的传出通信。 如果传输到具有不同MAC地址的其他主机,则更是如此。
  • balance-alb :输出stream量“莫名其妙”地在接口之间不均匀分布,而只在一个接口上inputstream量

内核文档告诉我, balance-rr模式需要: The balance-rr, balance-xor and broadcast modes generally require that the switch have the appropriate ports grouped together. The nomenclature for such a group differs between switches, it may be called an "etherchannel" The balance-rr, balance-xor and broadcast modes generally require that the switch have the appropriate ports grouped together. The nomenclature for such a group differs between switches, it may be called an "etherchannel"

所以问题是:

  • 什么是我使用的正确模式,我如何设置它,使其工作?

  • 如果这是不可能的,一般情况下,它将有助于设置一个使用不同接口的服务器/服务器和服务器/互联网连接。 但是这必须使用绑定而不是不同的内部/外部ip地址。 (因为这反过来会使openvz设置不必要的困难)

提前致谢!

更新:玩了开关,我已经设置了两个以太网通道的两个服务器在“主动”模式(这是正确的?)。 但是使用802.3ad作为linux端的绑定方法,我没有看到任何行为/速度的变化。

UPDATE2:对不起。 看起来像现在传出的stream量使用不同的接口。 可能取决于目的地的mac地址。 这是我能做的最好的吗?

UPDATE3:只显示我在说什么:

 root@warp2:/ssd/test# iperf -c 10.0.0.1 ------------------------------------------------------------ Client connecting to 10.0.0.1, TCP port 5001 TCP window size: 23.8 KByte (default) ------------------------------------------------------------ [ 3] local 10.0.0.2 port 55759 connected with 10.0.0.1 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 2.16 GBytes 1.85 Gbits/sec root@warp2:/ssd/test# iperf -c xxxx ------------------------------------------------------------ Client connecting to warp1, TCP port 5001 TCP window size: 23.8 KByte (default) ------------------------------------------------------------ [ 3] local 80.190.169.17 port 54861 connected with xxxx port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.10 GBytes 944 Mbits/sec 

第一个testing是使用2个nics使用balance-rr,目前有两个vlans(每个nic对模拟x-link电缆)。

第二个testing是使用802.3ad和EtherChannel的2个nics。

在这两个服务器之间的stream量交换期间,恐怕你不能在如此简单的设置中利用你的债券的几个链接。 原因是:这台Cisco交换机基于IP和MAC执行负载均衡。 这甚至是几个文件传输将映射到相同的物理path。

它可能使用直接交叉电缆。 设置不应该是复杂的,因为你害怕。 我相信切换(Veth)openvz设置在这里是不需要的。 VENET和简单的静态路线应该是足够的,我想。

networking设置可能如下所示:

 10.10.0.0/24 - subnet for direct interconnect. 10.20.1.0/24 - range for VEs on Server1 10.20.2.0/24 - range for VEs on Server2 Server1: bond1: IP=10.10.0.1/24 VE1: IP=10.20.1.1/24 VE2: IP=10.20.1.2/24 ... route 10.20.2.0/24 -> 10.10.0.2 Server2: bond1: IP=10.10.0.2/24 VE1: IP=10.20.2.1/24 VE2: IP=10.20.2.2/24 ... route 10.20.1.0/24 -> 10.10.0.1 

而且iptables当然是允许所有这些员工,而不是尝试NAT /伪装恶作剧。

UPD
随着容器迁移,最好使用Veth设置……确实好多了;)

使用链接聚合(etherchannel)不会加速单个文件传输。 不同的连接可以在同一个以太网通道中使用不同的接口来增加同时传输的最大吞吐量,但是一次传输将只能使用单个接口,这就是您所描述的行为。

我一直在尝试类似的设置,并认为我理解这个解决scheme。 在我的情况下,我有两个服务器,每个都有通过3com 3824二层交换机连接的双千兆网卡。

在尝试各种选项后,我发现我需要为服务器之间的每个1:1网卡创build一个VLAN(例如,包含server1:eth0和server2:eth0的交换机端口的VLAN,server1的另一个VLAN:eth1和server2:eth1 )。 这需要一些额外的configuration和路由,但是这导致我预期的吞吐量增加了近2倍。

到目前为止,我还没有完全消化细节。 但是由于802.11ad为聚合链路中的所有NIC使用相同的MAC,因此我认为交换机将倾向于通过单个端口为目标MAC发送stream量,而不是将负载分散到聚合链路中的所有端口。 通过将每个链路分隔到自己的VLAN中,交换机将以与发送方式相同的方式转发数据 – 如果发送方在两个端口之间平衡传输,则交换机将通过两个VLAN将其转发到两个接收端口。

除此之外,唯一的折衷是额外的configuration,以允许networking中的非聚合主机访问这些服务器。 我仍然需要进行冗余testing – 如果一台服务器上的eth0和另一台服务器上的eth1都失败了,就有可能失去通信。 不过,我认为这种情况不太可能发生 – 它应该像其他主机一样路由并穿越VLAN(另外,由于每个服务器只有两个NIC,丢失任何一个NIC都会破坏设置的目的,点)。

把所有这一切都用一粒盐。 我有很多选项和设置,我相信你的交换机也是第三层意识,但我相当有信心配对接口到分离的VLAN是利用所有可用的吞吐量的票。