我的设置是两台戴尔 R720 服务器,它们分别通过 4 个千兆端口连接到 Cisco WS-C2960S-24TS-L 交换机,该交换机又通过 100MBit 连接到 Internet。
服务器正在运行带有 openvz (redhad) 内核的 Wheezy:
2.6.32-openvz-042stab081.3-amd64
我想要的是两台服务器之间更快的文件传输和一定程度的容错。
我设法设置了绑定并尝试了绑定模式balance-rr
,802.3ad
并且balance-alb
. 就我能够连接到服务器而言,所有这些都有效。但是我没有在它们之间的数据传输中得到任何加速。
(删除:我明白这balance-rr
仅适用于 xover 布线。)
查看 ifconfig 的流量计数和我看到的各个接口:
802.3ad
:仅使用第一个接口的传出流量。如果转移到具有不同 MAC 地址的另一台主机,情况也是如此。balance-alb
:传出流量“不知何故”在接口之间分布不均,但传入流量仅在一个接口上
内核文档告诉我,该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"
所以问题是:
什么是适合我使用的模式以及如何设置它才能正常工作?
如果这通常是不可能的,那么以某种方式进行设置将有助于服务器/服务器和服务器/互联网连接使用不同的接口。但这必须使用绑定而不是不同的内部/外部 IP 地址。(因为这反过来会使 openvz 设置变得不必要地困难)
提前致谢!
更新:在玩过交换机之后,我已经为处于“活动”模式的两台服务器设置了两个以太通道(这是正确的吗?)。但是在 linux 端使用 802.3ad 作为绑定方法,我没有看到行为/速度有任何变化。
更新2:对不起。似乎现在传出流量使用不同的接口。可能取决于目的地的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 x.x.x.x
------------------------------------------------------------
Client connecting to warp1, TCP port 5001
TCP window size: 23.8 KByte (default)
------------------------------------------------------------
[ 3] local 80.190.169.17 port 54861 connected with x.x.x.x port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.10 GBytes 944 Mbits/sec
第一个测试是使用 balance-rr 的 2 个 nic,目前在两个 vlan 中(每个 nic 对一个,用于模拟 x-link 电缆。)
第二个测试是使用 802.3ad 和 EtherChannel 的 2 个网卡。
使用链路聚合(etherchannel)不会加速单个文件传输。不同的连接可以在同一个以太通道中使用不同的接口来增加同时传输的最大吞吐量,但是单个传输将只能使用单个接口,这就是您所描述的行为。
在这两个服务器之间的流量交换期间,恐怕您无法在如此简单的设置中使用您的绑定的多个链接。原因:此 Cisco 交换机基于 IP 和 MAC 执行负载平衡。甚至多个文件传输将映射到相同的物理路径。
它可以使用直接交叉电缆。设置不应该像您害怕的那样复杂。我相信这里不需要切换(Veth)openvz 设置。我想,VENET 和简单的静态路由就足够了。
网络设置可能如下所示:
而且
iptables
,当然,允许所有这些员工而不是尝试 nat/伪装恶作剧。UPD:
通过容器迁移,最好使用 Veth 设置……确实好多了;)
我一直在尝试类似的设置,并认为我了解解决方案。就我而言,我有两台服务器,每台都有双千兆网卡,通过 3com 3824 第 2 层交换机连接。
在尝试了各种选项后,我发现我需要为服务器之间的每个 1:1 NIC 创建一个 VLAN(例如,一个包含 server1:eth0 和 server2:eth0 的交换机端口的 VLAN,另一个用于 server1:eth1 和 server2:eth1 的 VLAN )。这需要一些额外的配置和路由,但它导致了我预期的近 2 倍的吞吐量增益。
到目前为止,我还没有完全消化细节;但是,由于 802.11ad 对聚合链路中的所有 NIC 使用相同的 MAC,我认为交换机倾向于通过单个端口为目标 MAC 发送流量,而不是将负载分散到聚合链路中的所有端口。通过将每条链路隔离到其自己的 VLAN 中,交换机将以与发送数据相同的方式转发数据——如果发送方在两个端口之间平衡传输,则交换机将通过两个 VLAN 将数据转发到两个接收端口。
在我的脑海中,唯一的权衡是允许网络上的非聚合主机访问这些服务器的额外配置。我仍然需要进行冗余测试——如果一台服务器上的 eth0 和另一台服务器上的 eth1 都失败,他们将失去通信。但是我认为这不太可能发生——它应该通过与其他主机相同的路径并穿过 VLAN(另外,因为我每台服务器只有两个 NIC,丢失任何一个 NIC 都会破坏设置的目的,并且它变得没有实际意义观点)。
带着一粒盐来看待这一切。我已经修改了很多选项和设置,并且我相信您的交换机也支持第 3 层,但我相当有信心将接口配对到隔离的 VLAN 是利用所有可用吞吐量的门票。