当我在Linux中使用模式= 6的绑定时,为什么两台服务器连接相同的网卡?


0

我在CentOS6.3中创建了一个带有3个NIC的绑定接口。我使用mode = 6,它不需要交换机的硬件支持。

这是绑定文件:

[root@~]cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: eth3
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:e0:66:d3:70:b1
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:e0:66:d3:70:b2
Slave queue ID: 0

Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:e0:66:d3:70:b3
Slave queue ID: 0

我使用三台Windows服务器连接绑定IP。理论上,每个服务器将获得不同的MAC地址。例如,服务器1将连接到eth1,服务器2将连接到eth2,服务器3将连接到eth3。然后负载将平衡。

但是,服务器1连接到eth2,服务器2连接到eth3,但服务器3再次连接到eth2。 eth1从未使用过。我已经多次尝试但失败了。最后,我手动将IP地址和MAC地址绑定在一起以解决此问题。

为什么会这样?有没有办法让每个NIC都使用?只有三台服务器连接,所以理论上每台服务器应该连接到不同的网卡。

非常感谢!

Answers:


1

你已经做出了这样的假设:

每个服务器将获得不同的MAC地址。例如,服务器1将连接到eth1,服务器2将连接到eth2,服务器3将连接到eth3。

然而,这是不正确的。按照 Linux内核绑定文档

不同的对等体使用不同的硬件地

但不是 一切 窥视 使用不同的硬件地址。

负载均衡算法基于哈希表,您需要在同一广播域上使用三个以上的主机,以实现跨所有从站的相等负载均衡。

如果您有大量主机与您的绑定通信,在同一广播域上说数十或数百个主机,那么所有绑定从属的主机数量将相当相等。

对于您之后的负载平衡,您可能更适合使用模式2或模式4 xmit_hash_policy 调成 layer2+3 要么 layer3+4但是,这只会进行传输负载平衡,它可以由交换机提供类似的入站负载平衡。

(注意: layer3+4 与模式4不兼容,如果以这种方式配置,您的交换机可能会或可能不会抱怨,请尝试查看)

实际上,如果您希望三个Windows系统通过不同的接口与Linux系统进行通信,那么唯一100%可靠的方法是在第2层分离接口 - 让每个eth1 / eth2 / eth3处于不同的状态具有不同IP的VLAN,并且Windows系统各自通过不同的IP知道Linux系统。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.