PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MAC address flapping bei Bonding in Mode 0



timbo123
22.04.10, 09:28
Hi.

Ich habe folgende Interface-Konfiguration in CentOS:

eth0 und eth2 sind zusammengefasst zu bond0.

bond0 wird in vlan1 und vlan2 verwendet.

Habe dann mal versucht, den Server von meinem PC aus anzupingen:


[PC-NAME] C:\>hrping.exe <IP des Servers>
-t -s 100
This is hrPING v2.44 by cFos Software GmbH -- http://www.cfos.de

Using source IP address <IP MEINES PCs> to send packets
Pinging <IP1 des Servers>
with 32 bytes data (60 bytes IP):

[...] (verlorene Pings)

Reply from <IP1 des Servers>: seq=002c time=2.498ms TTL=63 ID=7a28
Reply from <IP1 des Servers>: seq=002d time=0.280ms TTL=63 ID=7a2a
Reply from <IP1 des Servers>: seq=002e time=2.196ms TTL=63 ID=7a2c
Reply from <IP1 des Servers>: seq=002f time=0.287ms TTL=63 ID=7a2d
Reply from <IP1 des Servers>: seq=0030 time=0.966ms TTL=63 ID=7a2e
Reply from <IP1 des Servers>: seq=0031 time=1.728ms TTL=63 ID=7a2f
Reply from <IP1 des Servers>: seq=0032 time=0.282ms TTL=63 ID=7a30
Reply from <IP1 des Servers>: seq=0033 time=1.083ms TTL=63 ID=7a31
Reply from <IP1 des Servers>: SEQ=0035 time=0.277ms TTL=63 ID=7a33
[...] (verlorene Pings)

Reply from <IP1 des Servers>: SEQ=00ca time=64.026ms TTL=63 ID=7a40
Reply from <IP1 des Servers>: SEQ=00c9 time=164.959ms TTL=63 ID=7a3f
Reply from <IP1 des Servers>: SEQ=00cb time=0.273ms TTL=63 ID=7a42
Reply from <IP1 des Servers>: seq=00cc time=2.070ms TTL=63 ID=7a44
Reply from <IP1 des Servers>: seq=00cd time=0.272ms TTL=63 ID=7a45
Reply from <IP1 des Servers>: seq=00ce time=0.918ms TTL=63 ID=7a46
Reply from <IP1 des Servers>: seq=00cf time=1.549ms TTL=63 ID=7a47
Reply from <IP1 des Servers>: seq=00d0 time=0.274ms TTL=63 ID=7a48
Reply from <IP1 des Servers>: seq=00d1 time=2.409ms TTL=63 ID=7a49
Reply from <IP1 des Servers>: SEQ=00d3 time=0.274ms TTL=63 ID=7a4b

[...] (verlorene Pings)

[Aborting...]
274 Requests timed out.

Statistics for <IP1 des Servers>:
Packets: sent=293, rcvd=19, error=0, lost=274 (93% loss) in 21.101700 sec
RTTs of replies in ms: min/avg/max/dev: 0.272 / 12.980 / 164.959 / 39.538
################################################## #############################


Das gleiche Problem tritt bei IP2 des Servers auch auf.
Eine ssh-Verbindung ist nahezu unmöglich, weil die Verbindung immer abbricht.

Habe mir jetzt mal angeguckt, was auf meinem Switch passiert.
Dort flappt die MAC-Adresse immer zwischen den beiden Ports hin und her, weil an beiden die gleiche Adresse anliegt. Liegt wohl daran, dass bond0 sich die MAC-Adresse von eth0 geschnappt hat und diese jetzt für beide Ports verwendet.

Kann ich dieses Problem irgendwie umgehen?

Danke.

just4uk
22.04.10, 23:18
Die Vorgehensweise mit der MAC-Adresse ist aber so wie es sein soll!
Der bondingtreiber nimmt die MAC des ersten Interfaces und verwendet diese für alles drei (d.h. bond0 eth0 und eth1).
Das ist schon richtig so. Was jetzt aber Dein Switch macht sollte er eigentlich nicht tun.
Um was für einen Switch handelt es sich da? Lässt sich das etwas konfigurieren?

Gruß aus L.E.
Uwe
Hier mal der Output von meinem ifconfig
nas1:~# ifconfig
bond0 Link encap:Ethernet Hardware Adresse 00:17:31:c4:63:79
inet Adresse:192.168.99.221 Bcast:10.0.0.255 Maske:255.255.255.0
inet6-Adresse: fe80::217:31ff:fec4:6379/64 Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metrik:1
RX packets:382128 errors:0 dropped:0 overruns:0 frame:0
TX packets:307571 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:0
RX bytes:49207975 (46.9 MiB) TX bytes:641951167 (612.2 MiB)

eth0 Link encap:Ethernet Hardware Adresse 00:17:31:c4:63:79
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metrik:1
RX packets:188047 errors:0 dropped:0 overruns:0 frame:0
TX packets:153786 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:24450310 (23.3 MiB) TX bytes:319417684 (304.6 MiB)
Interrupt:247

eth1 Link encap:Ethernet Hardware Adresse 00:17:31:c4:63:79
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metrik:1
RX packets:194081 errors:0 dropped:0 overruns:0 frame:0
TX packets:153785 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:24757665 (23.6 MiB) TX bytes:322533483 (307.5 MiB)
Interrupt:246 Basisadresse:0x2000

timbo123
23.04.10, 08:25
Ich hab ein Cisco Switch.

Cisco sagt zu der Fehlermeldung, dass man etwas am Client ändern soll.
Scheint also nicht möglich zu sein :(

honkstar
23.04.10, 13:44
Hast du am Cisco die Konfig angepasst, oder läuft die noch auf default?
Poste die Konfig mal (für die betreffenden Ports)

timbo123
23.04.10, 13:58
Hast du am Cisco die Konfig angepasst, oder läuft die noch auf default?
Poste die Konfig mal (für die betreffenden Ports)

Für den Switch ist ein anderer Kollege zuständig. Er meinte, da lässt sich nichts umkonfigurieren.

Ports sind auf Trunk gesetzt, weil später mehrere VLANs darüber laufen sollen.


http://www.cisco.com/en/US/products/ps10118/index.html <- Dieser Switch müsste es sein.

HBtux
23.04.10, 14:25
Bei Cisco müsste meines Wissens "Etherchannel" für die Port konfiguriert werden.... (so heißt bei Cisco das Bonding)

Beide Geräte müssen logischerweise im gleichen Bonding-Mode laufen.

Das flappen der MAC-Adresse deutet darauf hin, dass der Switch nicht im Etherchannel-Modus läuft und deshalb die MAC auf zwei verschiedenen Ports gleichzeitig sieht.... (also die MAC flappt zwischen den Ports)

timbo123
23.04.10, 15:37
Danke :) Funktioniert.

Habe jetzt mal mit iperf ein paar Daten hin und her geschickt.

eth0:
RX bytes:123817392 (118.0 MiB) TX bytes:63136082 (60.2 MiB)

eth2:
RX bytes:2805 (2.7 KiB) TX bytes:63138460 (60.2 MiB)

Wie kommts, dass er auf eth2 keine Daten empfängt?

BedriddenTech
23.04.10, 16:01
Weil einer Verbindung beim Senden dann eine MAC-Adresse zugeordnet ist.
Den Aufwand hättest Du Dir mit einem anderen Bonding-Modus eigentlich sparen können. :)

timbo123
23.04.10, 16:23
Weil einer Verbindung beim Senden dann eine MAC-Adresse zugeordnet ist.
Den Aufwand hättest Du Dir mit einem anderen Bonding-Modus eigentlich sparen können. :)

Wäre das dann mode6?
Den hatte ich vorhin (nachdem ich etherchannel aktiviert hatte) mal ausprobiert. da ging gar nix :/

HBtux
23.04.10, 21:22
Danke :) Funktioniert.
Habe jetzt mal mit iperf ein paar Daten hin und her geschickt.
eth0:
RX bytes:123817392 (118.0 MiB) TX bytes:63136082 (60.2 MiB)
eth2:
RX bytes:2805 (2.7 KiB) TX bytes:63138460 (60.2 MiB)
Wie kommts, dass er auf eth2 keine Daten empfängt?
Welchen Mode hast Du hier eingestellt....?
Ist auf dem Cisco-Switch nun Etherchannel konfiguriert?
Ist auf beiden Seiten der gleiche Mode eingestellt?

Ich weiß nicht genau was Du mit dem Bondig erreichen willst, aber dass was ich bisher gelesen habe, sollte für Dich der Mode 0, 5 oder 6 in Frage kommen.

http://www.cisco.com/en/US/tech/tk389/tk213/technologies_tech_note09186a0080094714.shtml

http://www.cisco.com/en/US/tech/tk389/tk213/tech_configuration_examples_list.html

http://www.blazilla.de/index.php?/archives/310-Bonding-Modes-unter-Linux.html

timbo123
23.04.10, 21:39
Welchen Mode hast Du hier eingestellt....?
Ist auf dem Cisco-Switch nun Etherchannel konfiguriert?
Ist auf beiden Seiten der gleiche Mode eingestellt?

Ich weiß nicht genau was Du mit dem Bondig erreichen willst, aber dass was ich bisher gelesen habe, sollte für Dich der Mode 0, 5 oder 6 in Frage kommen.

http://www.cisco.com/en/US/tech/tk389/tk213/technologies_tech_note09186a0080094714.shtml

http://www.cisco.com/en/US/tech/tk389/tk213/tech_configuration_examples_list.html

http://www.blazilla.de/index.php?/archives/310-Bonding-Modes-unter-Linux.html

Ich habe momentan Mode 0. Dabei wird halt leider nur der Upstream auf beide Interfaces verteilt.

Eigentliches Ziel war es bspw. VLAN 1 bis 10 über eth0 laufen zu lassen und VLAN 11 bis 20 auf eth2. Wenn ein Interface ausfällt, sollen alle aufs andere umschwenken.
Dafür müsste ich 2 Bonding-Interfaces in Mode 1 konfigurieren. Das geht aber nicht, weil ein physikalisches Interface nur in einem bond Slave sein kann.
Also hab ich mich dafür entschieden nur ein Bonding-Interface zu erstellen, das Load-Balancing betreibt.

Etherchannel wurde auf dem Switch konfiguriert. Sonst würde Mode nicht funktionieren (hatte ich ja am Anfang. Stichwort: MAC address flapping).

Zu den empfohlenen Modes:
0: nur der Upstream wird verteilt
5: klingt für mich genau so wie 0
6: da verstehe ich die Beschreibung nicht wirklich


Was meinst du mit "Ist auf beiden Seiten der gleiche Mode eingestellt?"?

HBtux
23.04.10, 22:13
Zu den empfohlenen Modes:
0: nur der Upstream wird verteilt
5: klingt für mich genau so wie 0
6: da verstehe ich die Beschreibung nicht wirklich

Das ist meine ich nicht ganz richtig....
Einen Upstream in dem Sinne gibt es nicht.....
Jeder Reguest wird beantwortet. Egal ober er vom Server oder vom Client aus geht....
Im Ethernet redet man deshalb nicht vom Upstream.



Mode 0 (balance-rr)
Round-robin Policy: Übertragt Pakete über alle im Bonding
enthaltene NICs. Dieser Modus bietet Lastverteilung und Redundanz.

Bei Mode 0 (Round-robin) werden die Pakete meines Wissens einfach abwechselnd auf alle Interfaces verteilt....



Mode 5 (balance-tlb)
Adaptive transmit load balancing: Ausgehender Verkehr wird, abhängig von
der Last, über alle NICs verteilt. Eingehender Verkehr wird von der
jeweiligen NIC empfangen. Fällt eine NIC aus, übernimmt eine andere
NIC im Bonding die Mac-Adresse der ausgefallenen Karte.

Hier wird je nach Last verteilt....
Wobei die Antwort dann wieder an die Netzwerkkarte zurückgeschickt wird, von der auch der Request kam....
Also - Pakete versenden mit gleichmäßiger Lastverteilung - Rückantwort allerdings auf das gleiche Interface - egal wie dieses gerade ausgelastet ist.



Mode 6 (balance-alb)
Adaptive load balancing: Wie balance-tlb, aber mit einer Lastverteilung
für IPv4 Traffic. Dazu werden ausgehende ARP Anfragen manipuliert und jedes
Mal eine andere Mac-Adresse einer NIC im Bonding verwendet.

Ähnlich wie Mode 5 - nur wird beim ARP-Request die MAC-Adresse variabel zurückgegeben....

Quelle: Blog von bla!zilla
http://www.blazilla.de/index.php?/archives/310-Bonding-Modes-unter-Linux.html




Was meinst du mit "Ist auf beiden Seiten der gleiche Mode eingestellt?"?
Das soll heißen, dass der Server und der Switch im gleichen Bonding-Mode betrieben werden muss....
Server z.B. auf Mode 0 und Switch z.B. auf Mode 5 ist so, wie wenn sich ein Japaner und ein Franzose unterhalten.....

BedriddenTech
23.04.10, 22:51
Eigentliches Ziel war es bspw. VLAN 1 bis 10 über eth0 laufen zu lassen und VLAN 11 bis 20 auf eth2. Wenn ein Interface ausfällt, sollen alle aufs andere umschwenken.
Dafür müsste ich 2 Bonding-Interfaces in Mode 1 konfigurieren. Das geht aber nicht, weil ein physikalisches Interface nur in einem bond Slave sein kann.
Also hab ich mich dafür entschieden nur ein Bonding-Interface zu erstellen, das Load-Balancing betreibt.

Das verstehe ich nicht. Wenn Du Ausfallsicherheit haben willst, dann packst Du beide Schnittstellen in einen Verbund, und der wird bspw. mit Modus 1 konfiguriert. Dann ist eine der Schnittstellen passiv mit drin und übernimmt dann, wenn die erste nicht mehr funktioniert.

timbo123
24.04.10, 17:29
Das ist meine ich nicht ganz richtig....
Einen Upstream in dem Sinne gibt es nicht.....
Jeder Reguest wird beantwortet. Egal ober er vom Server oder vom Client aus geht....
Im Ethernet redet man deshalb nicht vom Upstream.


Bei Mode 0 (Round-robin) werden die Pakete meines Wissens einfach abwechselnd auf alle Interfaces verteilt....


Dann wunderts mich, dass er es trotzdem nicht richtig aufteilt. Receive läuft ja nur über eth0.




Das soll heißen, dass der Server und der Switch im gleichen Bonding-Mode betrieben werden muss....
Server z.B. auf Mode 0 und Switch z.B. auf Mode 5 ist so, wie wenn sich ein Japaner und ein Franzose unterhalten.....


Beim Switch wurde nur die Option Etherchannel ausgewählt. Müsste dann ja standardmäßig (wenn es so ist wie beim Bonding unter Linux) Mode 0 sein. Werde mir das am Montag mal angucken.



Das verstehe ich nicht. Wenn Du Ausfallsicherheit haben willst, dann packst Du beide Schnittstellen in einen Verbund, und der wird bspw. mit Modus 1 konfiguriert. Dann ist eine der Schnittstellen passiv mit drin und übernimmt dann, wenn die erste nicht mehr funktioniert.


Der Server steht in mehreren VLANs. Mode 1 war ja eigentlich gewünscht. Aber dann so, dass ich 2 bonds habe, von denen einer primär auf eth0 und einer primär auf eth2 läuft.
Allerdings könnte die Geschichte eine angenehme Wendung finden, da das ganze unter Umständen später mal für ESX-Server und somit für VMs verwendet wird. Da kann ich ja dann auf jeder virtuellen Maschine einen bond erstellen mit PRIMARY. Dann würde alles optimal so laufen, wie ich es auch schon mal konfiguriert hatte.
Das klärt sich auch alles Montag.
Gebe dann noch mal ne Rückmeldung.

MfG
und schönes Restwochenende

bla!zilla
24.04.10, 20:31
Die Erklärung war übrigens aus meinem Blog kopiert, oder eine der zahlreichen im Internet zu findenden Kopien.

BedriddenTech
25.04.10, 21:51
Welche...?

HBtux
25.04.10, 22:34
Die Erklärung war übrigens aus meinem Blog kopiert, oder eine der zahlreichen im Internet zu findenden Kopien.
Wenn Du die von mir kopierten Textpassagen meinst....

Diese habe ich zufällig über google auf einem Web-Server in Rumänien gefunden.
Der Text selbst sah mir nich wie ein geschützter Text aus...

Wenn Du aber nur etwas Werbung für Deine Domain machen wolltest, ist es gelungen.

bla!zilla
26.04.10, 15:05
Tja, wenn das wirklich eine rumänische Domain war, dann hat da (mal wieder) jemand von meiner Seite kopiert. Wäre nicht das erste Mal... Leider setzt kaum eine Sau mit dem deutschen Urheberrecht auseinander.

btw: Deutscher Text auf rumänischer Seite??? Wer mal bei Google nach "bonding modes linux" sucht, findet meine Seite an zweiter Stelle. Sorry, aber fällt mir schwer das zu glauben. Aber gut. Back on topic.

timbo123
30.04.10, 13:22
Da das alles nicht so funktionierte wie gewünscht, bin ich jetzt wieder auf Mode 1 umgestiegen.

Habe 2 Interfaces zu einem Bond (primary=eth0) zusammengefasst und diesen als Interface für ein VLAN-Interface genommen.

Immer wenn ich eth0 aus- und wieder einschalte, ist die Verbindung weg... Die kommt auch erst wieder, wenn ich z.B. den Switch vom Server aus anpinge.

Jemand ne Idee, woran das liegt?

HBtux
30.04.10, 19:20
Ist überhaupt schon mal irgend ein Bonding-Mode halbwegs gelaufen?

Ich habe irgendwie das Gefühl, dass in Verbindung mit dem Switch oder mit dem Bonding unter Linux was falsch konfiguriert ist....




Immer wenn ich eth0 aus- und wieder einschalte, ist die Verbindung weg... Die kommt auch erst wieder, wenn ich z.B. den Switch vom Server aus anpinge.

Was passiert denn wenn Du eth0 ausgesteckt lässt?
Funktioniert dann der ping über das Secondary-Interface eth2...?

Wie schaltest Du den die eth0 aus und wieder ein?
Vielleicht solltest Du mal einfach das Kabel abziehen anstatt das Interface auf Down zu setzen.