DNS failover

Neogreen

Member
Hallo,

Ist es möglich mit DNS ein failover zu bauen?
Sprich es gibt 2 Webserver, einen web01.domain.de und web02.domain.de
auf jeden Webserver gibt es auch ein DNS Server sprich dns01.domain.de und dns02.domain.de. Nun fällt web01 aus, nun werden ja die DNS anfragen an dns02 geleitet gibt es irgend eine möglichkeit das der Besucher dann auch auf web02 geleitet wird?
 

Whistler

Blog Benutzer
Prinzipiell ja, so ähnlich funktionieren geolocated services.

dns01.domain.de gibt für www.domain.de die IP von web01.domain.de zurück,
dns02.domain.de gibt für www.domain.de die IP von web02.domain.de zurück.
Beide haben synchrone SOA-Einträge (insbesondere Serial).

Die TTL der Einträge mußt Du relativ niedrig ansetzen, damit Kunden, die "gerade noch so" vor dem Ausfall von dns01.domain.de an web01.domain.de verwiesen wurden, zügig erneut fragen und diesmal von dns02.domain.de bedient werden. Eine kleine Totzeit bleibt so aber immer.

Schöner wäre ein echter Loadbalancer mit immer gleicher IP, entweder auf einem dritten Server oder z.B. bei Cloudflare.
 

Neogreen

Member
Die Idee ist aber nur das man immer zu web01 geleitet wird essieden der fällt aus, die last soll nicht verteilt werden.
 

Firewire2002

Registered User
Du kannst aber nie sicherstellen in welcher Reihenfolge die DNS Server abgefragt werden. Daher ist diese Lösung für ein reines Failover ungeeignet. Hier wäre immer mit einem gewissem "Loadbalancing" zu rechnen.
 

Neogreen

Member
Die beiden Server würden sich gegenseitig pingen sprich, merkt der eine der andere antwortet nicht wird der DNS geändert auf den Server der noch Online ist. Wäre doch theoretisch umsetzbar?

Solange alles läuft zeigen eben beide DNS Server auf web01
 

d4f

Kaffee? Wo?
Wäre doch theoretisch umsetzbar?
Damit läuft du Risiko in ein Split-Brain zu verfallen.
Üblicherweise verwendet man einen externen dritten (v)Server und die Umschaltung erfolgt wenn:
- der Failoverserver den Hauptserver nicht mehr sieht
- der Failoverserver den vServer sieht
- der vServer den Hauptserver nicht mehr sieht.
 

Neogreen

Member
D.h er würde nur umschalten wenn der Externe VServer das bestätigt?
Was wäre wenn der Externe VServer auch ausfällt?

Kennt jemand dann von euch dafür ein gutes Tutorial?
Sprich DNS server einrichten/konfigurieren dafür.
Habe zwar schon was geogelt konnte mich aber zwischen bind9 und powerdns noch nicht entscheiden.
 

d4f

Kaffee? Wo?
Was wäre wenn der Externe VServer auch ausfällt?
Manuelles Umschalten. Die Gefahr eines Split-Brain ist zu hoch als dass man das Risiko verkraften könnte.
Du kannst natürlich mehrere externe vServer verwenden und dann die Entscheidung der Mehrheit als Basis nehmen.

konnte mich aber zwischen bind9 und powerdns noch nicht entscheiden
Das ist Geschmackssache, respektiv was du an Funktionen brauchst.
Entscheide dich für einen =)
 

Firewire2002

Registered User
Man sollte aber vielleicht auch noch etwas Aufwand und Nutzen im Auge behalten. Wer soviel frickelt, wäre vermutlich besser beraten einen Hoster zu nehmen, der Failover IPs anbietet. Dann wäre man diese DNS HA-Lösung für ganz Arme wenigstens los.

Ansonsten sollte man sich mal überlegen ob der Aufwand überhaupt wirtschaftlich ist. Wenn man mehr Geld (private Arbeitszeit lässt sich auch in Geld messen!) investieren muss um die Redundanz zu planen, zu implementieren und zu warten, als man Verlust hat, wenn das Ding einfach mal paar Stunden ausfällt, dann kann man eben so gut drauf verzichten.
Zudem wird die Welt nicht untergehen, wenn ein Dienst mal nicht erreichbar ist. Sogar Dienste wie Facebook & Co würden es überleben, wenn sie alle Webserver einen ganzen Tag vom Netz nehmen würden. Einige derer Nutzer würden es vielleicht nicht überleben, aber der Dienst selbst schon. ;)

Und wer hier solche Frickellösungen anstrebt, kann nicht sonderlich viel Kapital dahinter haben. Somit würde ich auch kaum erwarten, dass da sonderlich viel Kapital unter Verlust zu verbuchen wäre, falls es zum Ausfall kommt. ;)
 

Whistler

Blog Benutzer
Mir ist noch nicht klar, was überhaupt erreicht werden soll.
Wenn es nur um ein hochverfügbares Frontend geht, kann man z.B. auch CloudFlare für lau nehmen.
Entweder als Loadbalancer oder zum schnellen Umschalten (von web02 aus automatisch per API).
Warum dürfen nicht beide Server parallel antworten?
Wenn es dynamischer Content (z.B. ein Forum) ist, dann geht mit dem Ausfall von web01 sowieso etwas verloren - es sei denn, man hat eine hochverfügbare Datenbank im Hintergrund. Und wenn man die hat, kann man sie auch gleich für beide Server nehmen.
 

Neogreen

Member
Nun es geht rein um das Interesse mag evtl sein das die Lösungen billig sind das waren nunmal meine ersten denkansätze, ich will aber auch nicht über Cloudfare gehen. Zum Thema failover IP's mag gut sein aber setzt vorraus selber Hoster und 2 Server dort, es sind teilweise Rechnezentren ausgefallen im übertrieben sinne. 2x Server beim Selben provider.... naja.

Es handelt sich einmal um OwnCloud um in zweiten um externe mysql datenbanken für Minecraft/Gameserver... Das problem wäre bei Mysql das paralle antworten evtl zu problemen kommen kann würden diese eben nicht alle paar sekunden mit einander abgeglichen werden.
 

Whistler

Blog Benutzer
Ja, MySQL-Replikation ist asynchron und kann (je nach Last der beteiligten Systeme) schon mal einen Zeitversatz aufweisen.
Das spielt aber m.E. keine Rolle, solange beide Webserver den Master (web01) als Datenbank nutzen und erst im Fehlerfall web02 verwendet wird.

Das Du aber OwnCloud ansprichst würde ich eher über DRBD nachdenken. Damit kannst Du nicht nur die Cloud-Daten, sondern auch die Datenpartition mit der SQL-Datenbank synchron halten, auf dem Slave läuft dann eben bis zum Failover kein MySQL.

Die beiden Knoten können sich gegenseitig mit Heartbeat überwachen, bei einem Ausfall von web01 wird auf web02 der MySQL gestartet.

Das IP-Problem kannst Du dadurch umgehen, daß web02 die Daten, die er selbst nicht bedienen kann quasi als Web-Proxy von web01 holt (solange dieser "lebt") und nach einem Failover die Dienste selbst anbietet.

Clienten, die aktuell eine Verbindung mit web01 haben laufen bei einem Ausfall von diesem natürlich trotzdem erstmal in ein Timout.
 

Neogreen

Member
@infinitnet ich will nicht dafür zahlen sprich von irgendwelchen Hostern abhängig sein das habe ich bereits oben geschrieben.

@Whistler ich schau mir das mal mit der Mysql replication an, die owncloud datein kann man ja dann jede minuten mit rsync abgleichen.
 

infinitnet

New Member
Ist ja kein Hoster und wäre wohl die beste Möglichkeit. Ansonsten bau dir auf deinem DNS ein Skript, welches jede Minute per cURL o.Ä. schaut, ob Server A online ist und wenn nicht, die DNS Zonen so ändert, dass Server B verwendet wird (sed/awk). Sollte nicht schwierig sein.
 

Neogreen

Member
Ja egtl aber allerdings wüsste ich dort garnicht wo ich ansetzen sollte, gibt es keine gute software dafür? oder könnte mir evtl jemand beim script helfen?
 

infinitnet

New Member
Naja, du setzt dir einfach einen DNS mit BIND auf (dazu liefert Tante Google bestimmt genug Ergebnisse) und lässt dann durch einen Cronjob jede Minute ein Skrip ausführen, was etwa so aussieht:

Code:
#!/bin/sh

check() {
    curl -I 1.2.3.4 | grep "200 OK"
}

if check
then
    ;;
else
    sed -i 's/1.2.3.4/4.3.2.1/g' /var/named/domain.com.zone
    /etc/init.d/bind9 reload
fi

exit 0
1.2.3.4 = Server A
4.3.2.1 = Server B
domain.com = Deine Domain

Der Code ist sehr Quick & Dirty und ändert die Zonen nur auf Server B, aber nicht wieder auf Server A, sobald der wieder online ist. Das ist nur ein Beispiel und ich würde nicht empfehlen, den Code genau so einzusetzen.
 
Last edited by a moderator:

Whistler

Blog Benutzer
Mindestens die Serial im SOA-Record sollte noch erhöht werden, sonst erkennt man von außen (Slaves) nicht, daß sich die Zone geändert hat.
 

infinitnet

New Member
Richtig, an den SOA Serial sollte auch noch gedacht werden und natürlich auch an das Veringern der TTLs. Dies wurde alles schon zuvor erwähnt und ist nicht in meinem Skript enthalten, ist jedoch einfach in dem "else"-Block einzufügen. Kleiner Tip: Wieder "sed" und dazu "date" und "+" (Integer).
 
Last edited by a moderator:

Neogreen

Member
Nun danke erstmal für alles, allerdings ergibt sich dort noch ein Problem. Das Script was ich aktuelle einsetze produziert fehler sprich schaltet um wenn der Server garnicht offline ist, nun wie kann ich einen anderen vserver dazu bringen das dier anpingt und dann Feedback erstatt?
 
Top