Serverwechsel - Umleiten auf neue IP = Keine Ausfallzeit?

13

Ich wechsle die Server meiner Website. Die IP des alten Servers kann nicht auf den neuen verschoben werden. Um keine Ausfallzeiten zu haben, plane ich Folgendes zu tun, bitte jemand bestätigen, dass es funktioniert:

  1. Richten Sie den neuen Server ein und warten Sie auf die neue IP
  2. Der alte Server leitet den gesamten Datenverkehr an die neue IP weiter
  3. Ändern Sie die DNS-Einträge, um auf die neue IP zu verweisen

Meine Logik besagt, dass der Benutzer beim Umleiten auf die neue IP von meiner alten Box aus den Domainnamen nicht im Browser sieht, sondern die neue IP. Gibt es eine Möglichkeit, auf die neue IP umzuleiten und den HOSTNAME mitzusenden, damit der Benutzer den Domainnamen im Browser sieht?

Ich mache das, weil die Site ständig genutzt wird und das Ändern der DNS-Einstellungen nicht funktioniert, da die Datenbank während der Weitergabe nicht zwischen dem neuen und dem alten Server synchronisiert wird.

Denis Pshenov
quelle
3
Sie haben wahrscheinlich darüber nachgedacht, es aber nicht erwähnt: Vergessen Sie nicht, die TTL der relevanten DNS-Einträge zu reduzieren.
cjc
Wird diese Website nur von Menschen genutzt oder gibt es Anwendungen, die eine Verbindung dazu herstellen könnten? ZB Webservices verbrauchen? In diesem Fall kann es dennoch zu Ausfallzeiten kommen. Java speichert DNS-Ergebnisse zwischen und berücksichtigt den neuen DNS-Eintrag möglicherweise erst nach einem Neustart. Es sei denn, Sie können die Weiterleitung für eine lange Zeit online halten. Auch wenn Sie die Verschlüsselungsumleitung verwenden, sind einige zusätzliche Schritte erforderlich.
Bram
Welche Art von Datenbanken verwenden Sie? Sie haben Recht damit, dass das Ändern des DNS das Problem der Ausfallzeiten nicht löst. Ich mache dies die ganze Zeit in meinem Job und kann Ihnen detaillierte Schritte geben. Wenn Sie jedoch eine Datenbank auf demselben Server haben, wirft dies ein kleines Problem auf, das normalerweise leicht zu lösen ist Kommen Sie.
Anthony Fornito
Auch welche Art von Server haben Sie Windows oder Linux, Nachdem Sie einige der Antworten gelesen haben, verweisen sie alle auf Linux, aber ich sehe wirklich nichts in Ihrer Frage, dass Sie IIS vs Linux-
Variante

Antworten:

19

Hier ist die Methode, die bei mir funktioniert hat:

  1. Synchronisieren Sie die Dateien und Datenbanken mit dem neuen Server.
  2. Führen Sie kurz vor dem Abschneiden eine erneute Synchronisierung durch.
  3. Ändern Sie den DNS, um auf den neuen Server zu verweisen.
  4. Leiten Sie die an die alte IP-Adresse gesendete Anforderung an den neuen Server weiter, bis die DNS-Weitergabe abgeschlossen ist.

So würde ich Schritt 4 ausführen:

Wir werden IPTables auf einem Linux-Server so konfigurieren, dass der gesamte Datenverkehr auf Port 80 (dem Standard-Webserver-Port) an einen Server mit der IP umgeleitet wird 122.164.34.240. Der erste Schritt besteht darin, Ihre Linux-Box so einzustellen, dass diese Art der Weiterleitung stattfinden kann. Öffnen Sie ein Terminalfenster, melden Sie sich als Root an und führen Sie den folgenden Befehl aus:

# echo 1 >/proc/sys/net/ipv4/ip_forward

Der nächste Schritt besteht darin, IPTables anzuweisen, den Datenverkehr auf den neuen Server umzuleiten:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240

Hier passiert die IPTables-Magie. Mit dem dritten und letzten Schritt weisen wir IPTables an, den Ursprung der Verbindungen zum Port 80 des neuen Servers neu zu schreiben, damit dieser scheinbar vom alten Server stammt.

# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE

Der letzte Schritt ist erforderlich, da, wenn wir dem Webserver des neuen Servers nicht mitteilen, dass die Verbindungen von den Clientcomputern stammen, angenommen wird, dass sie vom alten Server stammen.

Sie können dies auch für die Datenbanken und den E-Mail-Server-Port wiederholen.

Shain Padmajan
quelle
Meinten Sie -A statt -D ?? -D ist eine Regel zu löschen, nicht wahr? Wie auch immer, nachdem ich das getan habe, versucht die alte Box definitiv umzuleiten, weil sie das Web nicht mehr lädt, aber es schlägt fehl, weil das neue Web auch nicht angezeigt wird. Muss ich noch andere Einstellungen vornehmen? Vielleicht was auf meiner neuen Box?
Denis Pshenov
Egal, ich habe es behoben! Es stellte sich heraus, dass meine Shorewall die Weiterleitung blockiert hat. Ich hatte es in den Regeln erlaubt.
Denis Pshenov
Das tut mir leid. Sie haben recht, es war-A und nicht-D. Ich habe den Beitrag aktualisiert.
Shain Padmajan
1
Nur eine Warnung: Der Ansatz mit iptables leitet den gesamten Datenverkehr an die neue Site weiter. Wenn er dort eintrifft, scheint er von Ihrem alten Server und nicht von der tatsächlichen IP-Adresse des ursprünglichen Browsers zu stammen. Dies wird Dinge wie die geografische Analyse brechen. Insbesondere sollten Sie niemals versucht sein, Port 25 auf diese Weise für E-Mails weiterzuleiten, da sonst versehentlich ein offenes Relay erstellt wird, da E-Mails von einem Spammer über den alten Server von Ihrem neuen Server so behandelt werden, als wären sie von einem Ihrer eigenen Computer gut vertraut und darf weitergeben.
Gary Bilkus
@ShainPadmajan, obwohl spät, ich danke Ihnen vielmals, dies funktionierte wie Charme auch im Jahr 2015.
Abhishek Madhani
5

Sie können auch mehrere A-Records hinzufügen. Zum Beispiel verwendet Google dies und überprüft die Ausgabe von nslookup:

Name:       google.com
Addresses:  209.85.148.101
            209.85.148.102
            209.85.148.113
            209.85.148.138
            209.85.148.100
            209.85.148.139

Wenn Sie einer Domain mehrere A-Einträge hinzufügen, erhalten die Besucher mehrere IP-Adressen und probieren sie in dieser Reihenfolge aus. Wenn einer fehlschlägt, wechselt der Client zum nächsten, um es zu versuchen.

Richten Sie die neue IP-Adresse 24 Stunden im Voraus als zusätzlichen A-Record ein, starten Sie den neuen Server, fahren Sie den alten herunter und entfernen Sie die IP-Adresse.

JapyDooge
quelle
Fügen Sie den A-Datensatz erst hinzu, wenn der neue Server gestartet wurde. :)
Aaron Copley
@ Aaron: warum nicht? Das Hinzufügen eines A-Datensatzes dauert mehrere Stunden (bis zu 24 Stunden, um vollständig aktiv zu sein). Solange der zweite Server nicht aktiv ist, wählen die Clients den ersten aus.
JapyDooge
Wenn TTL für eine Zone abläuft, wird Ihr Nameserver erneut nach der Ressource abgefragt und erhält beide Antworten. Wenn Sie den neuen A-Datensatz hinzufügen und eine beliebige Zeitspanne warten, um den Server zu starten, werden die Benutzer wahrscheinlich bereits auf einen Host aufgelöst, der noch nicht verfügbar ist. Wenn der neue Server bereits in Betrieb ist, müssen Sie sich keine Sorgen mehr machen.
Aaron Copley
1

Eine andere Möglichkeit ist die Verwendung eines VIP (virtuelle IP). So werden Ihre Schritte sein:

  1. Richten Sie den neuen Server ein und warten Sie auf die neue IP.
  2. Fügen Sie dem alten Server einen VIP hinzu.
  3. Ändern Sie die DNS-Einträge so, dass sie auf die VIP-IP verweisen. Bis jetzt wird der gesamte Datenverkehr weiterhin an den alten Server gesendet, jedoch unter Verwendung des VIP.
  4. Wenn Sie bereit sind, verschieben Sie den VIP auf den neuen Server.
  5. Optional können Sie den DNS auf die neue Server-IP ändern und den VIP (nach einiger Zeit) aus dem DNS entfernen.
Khaled
quelle
Ich mag deine Lösung. Aber ich kenne mich mit VIP nicht aus und weiß nicht, wie man es bekommt. Könnten Sie in die richtige Richtung weisen?
Denis Pshenov
Das ist ganz einfach. Ein Befehl wie ifconfig eth0:0 <ip> <mask> uperstellt eine mit der IP konfigurierte Subschnittstelle und ifconfig eth0:0 downreicht aus, um sie zu deaktivieren.
Khaled
0

Ok, da Sie über die Datenbankreplikation gesprochen haben, müssen Sie Folgendes tun.

  1. Richten Sie die Replikation zwischen Datenbanken auf den beiden Servern ein.
  2. Machen Sie während der Umstellung die Datenbank des neuen Servers zum primären und den alten Server zum schreibgeschützten Server.
  3. Zeigen Sie mit der Datenbankverbindungszeichenfolge der Anwendung sowohl auf dem alten als auch auf dem neuen Server auf den neuen Server. Wenn Ihre Site Sitzungen verwendet, stellen Sie sicher, dass die Sitzung in der Datenbank beibehalten wird.
  4. Ändern Sie die IP-Adresse in DNS auf den neuen Server.
  5. Lassen Sie beide Server mindestens 48 Stunden lang laufen.
Shyam Sundar CS
quelle
0
  1. Richten Sie den neuen Server ein und warten Sie auf die neue IP
  2. Konfigurieren Sie dann die transparente Umleitung. Auf altem Server installiere rinetd.

In der rinetd.conf:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. Ändern Sie die DNS-Einträge, um auf die neue IP zu verweisen
yadaya
quelle
Ich habe apt-get install rinetd installiert, /etc/rinetd.conf auf die neuen Einstellungen geändert und mit /etc/init.d/rinetd restart neu gestartet, aber es wird nicht umgeleitet. auch nichts im log /var/run/rinetd.log
Denis Pshenov
Zeigen Sie Ihr iptables-save und cat /etc/sysctl.conf | grep ip_forwardbitte.
Yadaya
0

Sie können HA-Proxy vor Ihren Webservern verwenden, wenn einer von ihnen den Wartungsmodus übernimmt.

apoc
quelle
-1

Ihre Liste der zu erledigenden Aufgaben ist sehr vernünftig.

Angenommen, Sie verwenden Apache, wenn Sie in Apache auf dem alten Server so etwas tun:

redirect permanent / http://newserver.example.com

Der Benutzer sieht die neue Domain im Browser, wenn er zur alten Site navigiert. In diesem Fall ist die Umleitung auch permanent, solange der Browser ausgeführt wird.

Solange Sie zusätzlich zu Ihren anderen Änderungen eine Art Umleitung auf Ihrem Webserver implementieren, sollten Sie in Ordnung sein.

aseq
quelle