Auch als “Operation am offenen Herzen” zu betrachten.
Zuständig bin ich nicht nur während der Arbeit für vielerlei Server, auch in der “Freizeit” gönne ich mir das eine oder andere Admin-Vergnügen. Heute stand der Umzug mehrerer Domains von einem Server auf einen anderen an, inkl. Switch der DNS-Einträge. Dabei sollten die Domains die gesamte Zeit erreichbar bleiben und die Inhalte sofort nach dem Umzug immer vom neuen Server kommen. Spannende Sache, wenn die lieben DNS-Server bis morgen brauchen um die neue IP zu lernen.
Ausgangslage:
Server 1 mit einem typischen LAMP, der für 8 Domains verantwortlich ist und bei Provider A steht.
Server 2 der alle Domains auf anderen IPs übernehmen soll und der bei Provider B steht.
Alle Domains sind als “NameVirtualHost” respektive “VirtualHost” konfiguriert.
Aufgabe:
Umziehen der Inhalte auf den neuen Server und Switch der DNS-Einträge. Das ist zunächstmal keine große Sache, nun sollten aber möglichst sofort nach dem Umzug alle Daten vom neuen Server geliefert werden, da sich einige der umgezogenen Seiten recht häufig ändern. Doppelte Änderungen auf der alten und der neuen Seite kamen nicht in Frage. Der DNS-Switch kann je nach TTL der Einträge einige Stunden bis einige Tage dauern. Hier durfte der Admin also in die Trickkiste greifen.
Lösung:
- Umziehen der Inhalte (SQL-Dump, Document-Root, Logfiles etc.)
- Testen der Konfig und der Daten mittels angepasster lokaler /etc/hosts
- Eintragen der Domains mit der neuen IP auf dem alten Server in die /etc/host
- Einrichten eine Proxy-Konfiguration vom alten auf den neuen Server für jede Domain
Das eigentliche Umziehen der Daten beschreibe ich nicht weiter. Das Testen der umgezogenen Daten kann man durch Anpassen der eigenen /etc/hosts ohne Probleme realisieren. Dazu werden die Domains mit den neuen IPs eingetragen. Danach sollte der Browser die Seiten vom neuen Server holen. Wenn der Test erfolgreich war und der neue Server alles korrekt liefert, können wie uns an das Umbiegen der Zugriffe auf den alten Server machen.
Der Trick ist, auf dem alten Server dafür zu sorgen, das die umgezogenen Domains bereits sicher auf die neuen IPs aufgelöst werden. Am einfachsten gelingt das wenn man sie in die /etc/hosts einträgt. Weiterhin benötigen wir für den Apache die Module “mod_rewrite”, “mod_proxy” und “mod_proxy_http”. Je nach verwendeter Linux-Distribution gibt es unterschiedliche Wege sie zu aktivieren. Im hier verwendete Debian war es ein einfacher “a2enmod rewrite” usw.
Nun können wir die Konfigs der bereits umgezogenen Domains anpassen. Das sieht dann wiefolgt aus:
< VirtualHost 192.168.0.111:80 >
ServerName www.ichbinzustaendig.de
...
<Directory /var/www/ichbinzustaendig.de>
RewriteEngine On
RewriteRule ^(.*)$ http://www.ichbinzustaendig.de/$1 [P]
...
< VirtualHost 192.168.0.111:80 >
Was auf den ersten Blick unsinnig aussieht, löst auf elegante Art unser Problem: “RewriteRule ^(.*)$ http://www.ichbinzustaendig.de/$1 [P]“.
Diese Proxyregel leitet alles was auf unserer Domain an Anfragen ankommt an sich selbst weiter. Allerdings löst unser netter Indianer vorher den Namen der Domain noch einmal auf. Da wir ihm aber in der /etc/hosts bereits die neuen IPs untergejubelt haben, geht der Proxy-Request auf den neuen Server.
Die Inhalte werden transparent durchgereicht. Damit sind wir unabhängig von den Caches der DNS-Server.
Nachdem die DNS-Einträge der Domains angepasst wurden sollten nach spätestens 2 Tagen keine Requests mehr auf dem alten Server ankommen.
Nachteile:
Auf dem neuen Server kommen alle Anfragen die noch über den alten Server laufen mit dessen IP an. Das muss bei den Auswertungen der Logfiles beachtet werden.
Da das Logfile auf dem alten Server aber auch vorhanden ist, könnte man mit ein wenig Scripterei diese Logfiles angleichen. Requests die über den Proxy des alten Servers laufen, brauchen länger in der Auslieferung der Daten, weil ein Host dazwischen hängt.
Related Articles
No user responded in this post
Leave A Reply