« TeX wird überleben... | Main | Wie immer zum Monatsanfang ... »

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:

  1. 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.)
  2. 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").
  3. 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.
  4. Zum direkten Umzug den alten Webserver stoppen (Begin der Downtime) und den letzten Datenbankstand auf den neuen Server rüberkopieren und dort einspielen.
  5. 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.
  6. 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.
  7. Fertig. Nach und nach werden immer mehr Anfragen direkt an den neuen Webserver gerichtet.
  8. 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.

Tags:

Geschrieben von Jan Theofel am 5.06.2005 um 18:05 Uhr (Permalink)
Abgelegt unter Internet

TrackBacks für »Apache Webserver (fast) ohne Ausfall umziehen«

TrackBack URL: http://www.theofel.de/mt-cgi/mt-tb.cgi/1869

Die folgenden Artikel beziehen sich auf:
Apache Webserver (fast) ohne Ausfall umziehen:

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

Webserverumzug mit SSL
Kürzlich hatte ich eine Anleitung gebloggt, wie man einen Webserver (fast) ohne Ausfallzeit umziehen kann, wenn man Apache mod_rewrite verwendet. Dabei hatte ich auch angenommen, dass es mit SSL auch funktionieren sollte. Und in der Tat ist dem so,... [Weiterlesen]

» Jans Technik-Blog | 15.06.2005 um 19:33

7 Kommentare zu »Apache Webserver (fast) ohne Ausfall umziehen«

Eine andere Alternative, sofern es sich um dynamische Websites mit Datenbank handelt, ist die Möglichkeit die Website zu kopieren. Es wird legentlich eine Datenbank mit externen Zugriff auf dem zweiten Server benötigt.

Dazu die Datenbank auf den zweiten Server kopieren und den ersten Server diese Datenbank nutzen lassen. Danach auf dem zweiten Server die Website kopieren und so anpassen, dass diese auch die zweite Datenbank nutzt.

Nun ist egal, welcher Server genutzt wird, beide sind voll funktionsfähig. Nun muss nur der Domainumzug ablaufen und man hat einen Umzug ohne Ausfall (abgesehen von den zwei Minuten zum Wechsel der Datenbank).

1 | Reimer | 5.06.2005 um 19:14

Auch eine interessante Variante. Allerdings denke ich man sollte den Datenbankzugriff auf jeden Fall noch durch eine verschlüsselte Verbindung z.B. über einen stunnel schützen.

2 | Jan Theofel | 5.06.2005 um 21:54

Sofern ganze Server umziehen hat sich bei uns ein Portforwarding als praktisch erwiesen. Neuen Server live nehmen, auf dem alten z.B. via xinetd ein Portforwarding bauen und DNS-Einträge ändern. Vorteil: Klappt auch wunderbar mit POP3, SMTP und VirtualHosts...

3 | Michael Metz | 6.06.2005 um 8:19

Noch eine weitere interessante Variante. Dass das mit anderen Diensten auch geht ist hier natürlich ein Vorteil. Für das Forwarding eines Apaches alleine ist es vielleicht etwas komplizierter, weil man ggf. zusätzliche Software installieren und kennen muss.

4 | Jan Theofel | 6.06.2005 um 8:30

Dafür kann man aber beim port forwarding auch vhosts mitnehmen. Falls mehrere Adressen auf einer IP gehostet werden ist das die pragmatischere Variante

5 | Kai Hoerner | 16.10.2006 um 9:20

Eine sehr schöne Methode, die ich in paar Tagen ausprobieren werde. "Datenbank mit externem Zugriff" wie von Reimer angesprochen würde bei einer Gallery-Anwendung keine Alternative darstellen, da hier die Abbildungen auf zwei verschiedenen Rechner im Filesystem gespeichert werden und irgendwie synchronisiert werden müssten.

6 | Sonya* | 25.11.2008 um 15:02

@Sonya*: Je nach Infrastruktur kannst du den Ordner mit den Bildern ja z.B. auch über NFS zwischen den beiden Servern gemeinsam nutzen. Nicht gerade hochperformant aber für die Umstellungsphase kann man das ja kurzzeitig akzeptieren.

7 | Jan Theofel | 26.11.2008 um 0:16

Schreib bitte Deine Meinung:

Kommentare werden moderiert und erscheinen daher ggf. zeitverzögert. Bitte nur themenbezogene Kommentare abgeben die sich auf diesen Eintrag beziehen.

ACHTUNG: Es gilt meine Anti-SPAM-Policy! Werbende Kommentare und SEO-Linkspam werden nicht freigeschaltet. Statt dessen sende ich eine Beschwerde an den Profiteur der Werbung.
Bei persönlichen Meinungen bitte keine Links zu kommerziellen Projekten sonder zu eurer privaten Seite.