Per VLAN-Failover ausprobiert

Es ist nun anderthalb Jahre her, seit ich nach Failover per VLAN gesucht habe. Die entscheidende Frage war aber immer, ob es auch tatsächlich funktioniert. Ein entsprechender Test wurde damals nicht dokumentiert. Also soll es nun mit einem neuen Kernel nachgeholt werden.

Ausgangslage

Ein Server an zwei Switchen. Einige VLANs liegen auf beiden Switchen an, andere sind nur pro Switch vorhanden.

nat-server-an-zwei-switchen

Die Aufgabe besteht darin, die übergreifend vorhandenen VLANs nicht zu verlieren, auch wenn ein Switch ausfällt. Ein typisches übergreifenden VLAN ist das Management-Netz. Naturgemäß hat jeder Server eine IP in dem Netz und sollte diese Verbindung niemals verlieren.

Nicht übergreifende VLANs sind i.d.R. lokale Versorgungsnetze, die am anderen Standort keine Bedeutung haben.

Wie man das macht, ist in dem alten Artikel beschrieben.

Test

Neuer Kernel, neues Glück. Diesmal mit Doku:

$ uname -a
... FreeBSD 10.3-PRERELEASE #1 r294196M ...

Und gleich das Einrichten der VLANs

# ifconfig vlan3140 create
# ifconfig vlan3140 vlan 140 vlandev igb0 up
# ifconfig vlan4140 create
# ifconfig vlan4140 vlan 140 vlandev igb1 up
# ifconfig lagg140 create laggport vlan3140 laggport vlan4140
# ifconfig lagg140 up

Das schaut dann so aus:

# ifconfig | egrep 'igb0|140|status' | uniq
igb0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: active
vlan3140: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: active
        vlan: 140 parent interface: igb0
vlan4140: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: active
        vlan: 140 parent interface: igb1
lagg140: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: active
        laggport: vlan4140 flags=0<>
        laggport: vlan3140 flags=5<MASTER,ACTIVE>

Also schalten wir einen Port mal aus.

# ifconfig | egrep 'igb0|140|status' | uniq
igb0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: no carrier
vlan3140: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: no carrier
        vlan: 140 parent interface: igb0
vlan4140: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: active
        vlan: 140 parent interface: igb1
lagg140: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        status: active
        laggport: vlan4140 flags=4<ACTIVE>
        laggport: vlan3140 flags=1<MASTER>

Ein tcpdump am lagg-Interface zeigt während der Umschaltung keinerlei Zuckungen. Er läuft einfach weiter.

Problem gelöst?

Es fehlt noch der Test mit dem Aussenden von Daten. Schließlich könnte sich ja spontan die MAC des Interfaces ändern.

16 bytes from fe80::204:23ff:...%lagg140, icmp_seq=26 hlim=64 time=0.240 ms
16 bytes from fe80::204:23ff:...%lagg140, icmp_seq=27 hlim=64 time=0.469 ms
16 bytes from fe80::204:23ff:...%lagg140, icmp_seq=28 hlim=64 time=0.216 ms
[... Abschalten des Ports ...]

Timeout. Der Datenfluss kommt zum Stillstand. Erst nach einigen langen Minuten geht es weiter.

Ein erneuter Test zeigt dieses Verhalten nicht mehr. Nun gehen nur noch einige Pakte des Pings verloren.

Die Umschaltzeit wird maßgeblich von der Geschwindigkeit bestimmt, mit der die Switch-Wolke die gewanderte MAC Adresse bemerken.

y 41:37.153: %LINK-5-CHANGED: Interface Gi5/41, changed state to administratively down
x 41:46.132: %C4K_EBM-4-HOSTFLAPPING: 00:1E:67:... in vlan 140 is moving from port Po32 to port Gi5/25
y 47:38.833: %LINEPROTO-5-UPDOWN: Line protocol on Interface Gi5/41, changed state to up
y 47:53.842: %C4K_EBM-4-HOSTFLAPPING: 00:1E:67:... in vlan 140 is moving from port Po32 to port Gi5/41
y 48:13.370: %LINK-5-CHANGED: Interface Gi5/41, changed state to administratively down
x 48:22.726: %C4K_EBM-4-HOSTFLAPPING: 00:1E:67:...in vlan 140 is moving from port Po32 to port Gi5/25
y 48:47.879: %LINEPROTO-5-UPDOWN: Line protocol on Interface Gi5/41, changed state to up
x 49:17.275: %C4K_EBM-4-HOSTFLAPPING: 00:1E:67:... in vlan 140 is moving from port Gi5/25 to port Po32
y 49:49.925: %LINK-5-CHANGED: Interface Gi5/41, changed state to administratively down
x 49:59.624: %C4K_EBM-4-HOSTFLAPPING: 00:1E:67:... in vlan 140 is moving from port Po32 to port Gi5/25
y 50:16.845: %LINEPROTO-5-UPDOWN: Line protocol on Interface Gi5/41, changed state to up
x 50:45.969: %C4K_EBM-4-HOSTFLAPPING: 00:1E:67:... in vlan 140 is moving from port Gi5/25 to port Po32

Man sieht schön, wie die erste Umschaltung etwas länger gebraucht hat und dass da ein zweiter Switch mit im Spiel ist.

Nachdem sich aber die Switch-Wolke an die neue MAC gewöhnt hatte, klappt die Umschaltung zügig.

Die typische Umschaltzeit liegt im Bereich einiger zig Sekunden. Das ist sehr zufrieden stellend.

Avatar
Lutz Donnerhacke 30.01.2017 14:58
Und es ist im Kernel drin ...
https://github.com/freebsd/freebsd/commit/a23a95f981ff4d4789caf8a8349c8b017b1ac351
Avatar
Lutz Donnerhacke 11.02.2016 13:01
Ja, das würde sich anbieten. Aber devd darf hier nicht laufen, weil die Kiste PPP über L2TP terminiert und sie mit diesem Eventhandling versterben würde.
Avatar
Jan Bramkamp 11.02.2016 12:39
Würde es sich nicht anbieten mit devd auf die Linkstateänderungen zu reagieren und Gratuitous ARP anzuwerfen um die Umschaltzeit zu reduzieren?

3 Kommentare

Post a comment

Verwandter Inhalt