Re: NIC failover

From: Christian Damm <christian.damm(at)diewebmaster.at>
Date: Wed, 27 Apr 2005 10:42:55 +0200

hi olli,

Oliver Fromme schrieb:
> Christian Damm <christian.damm(at)diewebmaster.at> wrote:
> > ich habe eine kleine serverfarm mit 8 hosts (6 MTA`s (postfix) + 2 DB
> > backends) - die MTA`s betreibe ich via round robin DNS (mx) redundant
> > bzw. load balanced. alle 8 hosts hangen ursprünglich an nem 24 port
> > 10/100 switch (hp procurve 2524) und genau dieser sollte nun redundant
> > ausgelegt bzw. via failover protected werden.
>
> Hast Du denn auch einen redundanten Uplink (bzw. mehrere)
> hinter dem/den Switch(es)? Irgendwie muß es dahinter ja
> auch weitergehen.

ja, habe ich.

>
> > meine low end lösung:
> > 1.) ein zweiter hp procurve switch
> > 2.) in jedem host ein zweiter NIC (oder ein dual port NIC)
> > 3.) jeder host wird (via 2 x cat5 kabel) an jeweils einen switch connected
> > 4.) einer der beiden NIC`s ist im normalfall DOWN
> > 5.) mein shell script checkt (läuft auf jedem host) via cron auf
> > eventuelle ausfälle von switch1 und bringt im fehlerfall den master NIC
> > DOWN und den failover NIC UP.
> > 6.) wenn switch1 tot wird switch2 verwendet
>
> Ich würde kein Shell-Skript (oder sonstiges Skript) nehmen,
> sondern das ganze in C schreiben. Erstens vergeudet das
> weniger Prozessor- und I/O-Zeit, zweitens kannst Du dann
> die Interfaces dauerhaft überwachen (und nicht nur z.B.
> einmal pro Minute checken) und zeitnah umschalten.

da hast du natürlich vollkommen recht was cpu und i/o anbelangt aber
mangels C bzw. C++ kenntnissen fällt diese lösung für mich flach (ich
habe mal ein wenig mit ansi C herumgetüftelt und mache das auch
teilweise heute noch). wenn ich mal luft habe werde ich das ganze evtl.
als einfachen daemon in perl oder python verwirklichen.
eine minute failover time ist dabei in meinem fall aber kein problem -
von daher ist die cron lösung durchaus praktikabel.

>
> Das C-Programm könnte z.B. alle 5 Sekunden die I/O-Error-
> Counter des jeweiligen Interfaces abfragen (d.h. das, was
> auch »netstat -i« ausgibt); den Code kann man einfach aus
> src/usr.bin/netstat/if.c borgen. Ebenso kann es gucken,
> ob noch ein Link auf dem Port ist (was ifconfig(8) als
> »Status: active« anzeigt; kann man per sysctl(3) abfragen,
> siehe src/sbin/ifconfig/ifconfig.c). Zusätzlich zu diesen
> passiven Tests könnte es auch aktiv testen, z.B. ICMP ECHO
> oder ARP-Anfragen losschicken und gucken, ob innerhalb ei-
> ner sinnvollen Zeit eine Antwort kommt. Den Code kann man
> sich entsprechend aus anderen Tools (ping(8), arp(8)) zu-
> sammenklauben.

danke, gute tips! - wo ist mein kamel buch? ;-)

>
> Es gibt sicherlich fertige Lösungen, die das eine oder an-
> dere davon tun, aber sowas richtig Gutes ist mir leider
> nicht bekannt.

das war nach einer stunde google`en auch mein eindruck.

>
> > darum war meine frage: welche alternativen (auf applikations- bzw.
> > kernel-ebene) fallen euch da ein? gibt es failover NIC`s die von FreeBSD
> > supportet werden etc...
>
> Die Frage, die ich mir stelle: Gibt es »Failover-NICs«?
> Oder sind das vielmehr ganz normale Dual-Port-NICs, bei
> denen Treiber für gewisse Betriebssysteme das eigentliche
> Umschalten besorgen?

sicherlich letzteres - in hardware hätte ich solche funktionalität auch
kaum vermutet...wenn dann treiberseitig.

>
> Gruß
> Olli
>

-- 
mfg.
chris
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 27 Apr 2005 - 10:48:40 CEST

search this site