Warum verbinden zwei Server dieselbe NIC, wenn ich unter Linux Bonding mit mode = 6 verwende?

448
flypen

Ich schaffe eine Bonding-Schnittstelle mit 3 NICs in CentOS6.3. Ich verwende mode = 6, was die Hardware-Unterstützung des Switches nicht benötigt.

Hier ist die Bonding-Datei:

[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 

Ich verwende drei Windows-Server, um die Bonding-IP zu verbinden. In der Theorie erhält jeder Server eine andere MAC-Adresse. Server 1 stellt beispielsweise eine Verbindung zu eth1 her, Server 2 stellt eine Verbindung zu eth2 her, und Server 3 stellt eine Verbindung zu eth3 her. Dann wird die Last ausgeglichen.

Server 1 stellt jedoch eine Verbindung zu eth2 her und Server 2 stellt eine Verbindung zu eth3 her, Server 3 stellt jedoch erneut eine Verbindung zu eth2 her. eth1 wird nie verwendet. Ich habe es viele Male versucht, aber gescheitert. Schließlich bindet ich manuell die IP-Adresse und die MAC-Adresse zusammen, um dieses Problem zu lösen.

Warum passiert das? Gibt es eine Möglichkeit, jede NIC zu verwenden? Es sind nur drei Server verbunden, daher sollte sich jeder Server an eine andere Netzwerkkarte anschließen.

Danke vielmals!

0

1 Antwort auf die Frage

1
suprjami

Sie haben die Annahme gemacht:

Jeder Server erhält eine andere MAC-Adresse. Server 1 stellt beispielsweise eine Verbindung zu eth1 her, Server 2 stellt eine Verbindung zu eth2 her, und Server 3 stellt eine Verbindung zu eth3 her.

Das ist jedoch nicht richtig. Wie in der Dokumentation zum Linux-Kernel-Bonding beschrieben :

Verschiedene Peers verwenden unterschiedliche Hardwareadressen

Aber nicht jeder Peer wird eine andere Hardware - Adresse verwenden.

Der Lastausgleichsalgorithmus basiert auf einer Hashtabelle. Sie müssen mehr als drei Hosts in derselben Broadcastdomäne verwenden, um eine gleichmäßige Lastverteilung für alle Slaves zu erreichen.

Wenn eine große Anzahl von Hosts mit Ihrer Bondverbindung kommunizieren würde, beispielsweise Dutzende oder Hunderte von Hosts in derselben Broadcast-Domäne, wäre die Anzahl der Hosts für alle Bond-Slaves ziemlich gleich.

Für die Art des Lastausgleichs, nach dem Sie suchen, ist es möglicherweise besser, Modus 2 oder Modus 4 mit der xmit_hash_policyEinstellung auf layer2+3oder zu verwenden. Wenn dies layer3+4jedoch nur für den Lastausgleich sorgt, muss der Switch einen ähnlichen Lastausgleich für eingehende Daten bereitstellen.

(Hinweis: layer3+4Ist nicht mit Modus 4 kompatibel. Möglicherweise beschwert sich Ihr Switch, wenn er so konfiguriert ist. Versuchen Sie es und sehen Sie.

Wenn Sie möchten, dass Ihre drei Windows-Systeme über verschiedene Schnittstellen mit Ihrem Linux-System kommunizieren, besteht die einzige zu 100% zuverlässige Möglichkeit darin, die Schnittstellen auf Layer 2 zu trennen - jeder Ihrer eth1 / eth2 / eth3 muss sich in einem anderen Bereich befinden VLAN mit einer anderen IP-Adresse, und die Windows-Systeme kennen das Linux-System anhand dieser anderen IP-Adresse.