Apache Webserver (fast) ohne Ausfall umziehen
Das Problem: Ausfallzeit beim Webserverumzug
Manchmal kommt man einfach nicht drum herum: Die Webpräsez soll oder muss auf einen neuen Server mit einer andere IP-Adresse umziehen. Das Problem dabei ist, dass dazu der DNS-Eintrag für die Domain geändert werden muss, was seine Zeit dauert. In der Zwischenzeit werden einige Anfragen noch an den alten Server gerichtet während die meisten schon beim neuen Server ankommen sollten. Solange man eine halbwegs statische Webseite ohne schreibende Datenbankzugriffe hat ist das auch kein Problem. Aber wer hat das schon? Schon alleine die Kommentarfunktion eines Weblogs erfordert schreibenden Zugriff auf die Datenbank.
Die Lösung: Alter Server spielt Proxy
Dabei gibt es eine ganz einfach Lösung, die aber scheinbar kaum bekannt ist: Der alte Server kann einfach alle Anfragen als eine Art Proxy an den neuen Server weiterleiten. Dazu wird lediglich ein Root-Zugriff auf den Webserver benötigt oder aber die Möglicchkeit per .htaccess-Datei Rewrite-Regelen für den Apache zu definieren. Das sollte auch mit HTTPS funktionieren. Das werde ich auch die nächsten Tage noch testen.
Das Rezept: Schritt für Schritt
Hier die Vorgehensweise Schritt für Schritt erklärt:
- Als erstes sollte man dafür Sorge tragen, dass die TTL (time to live) im DNS für die eigene Domain heruntergesetzt wird. In der Regel beträgt der Wert normalerweise 24 Stunden, d.h. DNS Server speichern die Anfrage nach dem Hostname bis zu 24 Stunden zwischen. Wenn der Wert herabgesetzt wird, ist die Umstellungsphase deutlich kürzer. Ich verwende einen Wert von 15 Minuten. (Dieser Schritt hat nichts mit dem Apache-Setup zu tun, aber ich wollte ihn hier auch erwähnen.)
- Den neuen Webserver aufsetzen mit einem Namen zum testen (z.B. "wwwneu.theofel.de") und alles ausgiebig testen. Danach auf den eigentlichen Hostnamen umkonfigurieren (z.B. "www.theofel.de").
-
Auf dem alten Webserver eine neue Apache-Konfiguration vorbereiten, die wie folgt aussieht:
<VirtualHost www.theofel.de>
ServerName www.theofel.de
RewriteEngine On
RewriteRule ^/(.*)$ http://your.new.ip.addr/$1 [P]
</VirtualHost>
Dadurch werden alle Anfragen auf den neuen Server über dessen IP-Adresse umgeleitet. Genau genommen werden alle Dateien von dort geladen und dann an den Browser weitergeleitet. Der Anwender merkt davon nichts. - Zum direkten Umzug den alten Webserver stoppen (Begin der Downtime) und den letzten Datenbankstand auf den neuen Server rüberkopieren und dort einspielen.
- Dann auf dem alten Webserver die obige Apache-Konfiguration aktivieren (Ende der Downtime). Damit werden ab sofort alle Anfragen vom neuen Webserver geladen - wenn auch indirekt.
- Nun das DNS-Setup anpassen. Dabei empfiehlt es sich für den alten Server auch einen Namen zu vergeben, so dass man diesen weiterhin über einen Namen und nicht nur über die IP-Adresse ansprechen kann. Dabei die TTL noch auf einem kleinen Wert belassen (siehe ersten Schritt) um im Zweifelsfall schnell zurückschalten zu können.
- Fertig. Nach und nach werden immer mehr Anfragen direkt an den neuen Webserver gerichtet.
- Wenn keine Anfragen mehr über den alten Server reinkommen kann dieser abgeschaltet werden. Und auch nicht vergessen die TTL wieder auf einen normalen Wert hochzusetzen.
Die Ausfallzeit beschränkt sich damit auf die Übertragung der Datenbank zwischen den Webservern. Sollte es sich um grosse Datenbanken handeln, kann eine Datenbankreplikation herangezogen werden um auch diese Ausfallzeit noch zu eliminieren. Dann geht die Umschaltung in wenigen Sekunden.
Geschrieben von Jan Theofel am 5.06.2005 um 18:05 Uhr (Permalink)
Abgelegt unter Internet
Umzug eines Webservers fast ohne Ausfall
Jan hat da ein sehr schönes kleines Howto geschrieben wie man einen Webserver fast ohne Ausfall auf einen anderen Server umzieht. Gelöst wird das Problem durch .htaccess Rewrite Regeln. Sehr nett, wenn ich mal wieder mit dem Server umziehen muss [Weiterlesen]
» h t t p : / / m a l i s o n . o r g | 7.06.2005 um 8:30