Bewegliche Hosts klingen beängstigend und sind hauptsächlich rsync, DNS und Geduld. Der Trick besteht aus zwei Durchgängen: einem langsamen, während der alte Server noch läuft, und einem schnellen letzten, der Sekunden dauert.
Bestellung a Buran VPSInstallieren Sie die gleiche OS-Version wie der alte Server und führen Sie die Grundlagen aus: SSH Keys und FirewallInstallieren Sie die gleichen Dienste (nginx, PostgreSQL, Docker) in den gleichen Versionen - aber starten Sie sie noch nicht.
Vom neuen Server ziehen Sie die Daten ab. Dieser Pass kann so lange dauern, wie er will; niemand merkt es.
rsync -avz --delete \
--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp \
--exclude=/var/lib/postgresql \
root@OLD_SERVER_IP:/etc /etc
rsync -avz --delete root@OLD_SERVER_IP:/var/www /var/www
rsync -avz --delete root@OLD_SERVER_IP:/root /root
Datenbankdatenverzeichnisse sind absichtlich ausgeschlossen - ein Live-PostgreSQL oder MySQL, das von Datei zu Datei kopiert wurde, ist gebrochen. Datenbanken bewegen sich als Dumps.
Auf dem alten Server:
pg_dumpall -U postgres > /root/all-databases.sql
# or per database, compressed:
pg_dump -Fc -U postgres appdb > /root/appdb.dump
Ziehen Sie die Dumps auf den neuen Server und importieren Sie sie:
rsync -avz root@OLD_SERVER_IP:/root/all-databases.sql /root/
sudo -u postgres psql < /root/all-databases.sql
Setzen Sie die App in den Wartungsmodus, führen Sie die endgültige Synchronisierung aus und starten Sie die Dienste:
# on the old server
pg_dumpall -U postgres > /root/final.sql
# on the new server
rsync -avz --delete root@OLD_SERVER_IP:/var/www /var/www
rsync -avz root@OLD_SERVER_IP:/root/final.sql /root/
sudo -u postgres psql < /root/final.sql
systemctl enable --now nginx postgresql myapp
Testen Sie zuerst lokal - bevor Sie DNS berühren:
curl -H "Host: example.com" http://127.0.0.1
Ändern Sie den A-Record auf die neue IP und senken Sie die TTL auf 300 Sekunden pro Tag vor – der alte Wert läuft schnell ab. Innerhalb weniger Minuten sind die meisten Besucher auf dem neuen Server; Nachzügler kommen in den nächsten Stunden an.
Bescheinigungen: Lauf certbot --nginx auf dem neuen Server, nachdem DNS dort aufgelöst wurde. Wenn Sie Cloudflare-Proxy verwenden, drehen Sie den Datensatz um und stellen Sie ihn wie gewohnt neu aus - die Befehle sind in der Nginx-Leitfaden.
Überprüfen Sie von mehreren Orten: Website, API, Mail, Cron-Jobs, Backups. Beobachten Sie die Protokolle des alten Servers für eine Stunde - jeder verbleibende Datenverkehr bedeutet, dass etwas immer noch auf die alte IP zeigt.
tail -f /var/log/nginx/access.log
crontab -l
systemctl list-timers
Behalten Sie den alten Server eine Woche nach dem Wechsel. Dann stornieren Sie es - kein Drama und ein einfaches Rollback, wenn Sie etwas verpasst haben.
Bei der Zwei-Pass-Rsync-Methode ist die Ausfallzeit nur die endgültige Synchronisation plus DNS-Ausbreitung - typischerweise 2 bis 10 Minuten. Eine Wartungsseite auf dem alten Server macht es unsichtbar.
Jede fest codierte alte IP muss sich ändern: nginx-Upstreams, App-Konfigurationen, Firewall-Erlaubnislisten. Durchsuchen Sie die Konfigurationen mit grep nach der alten IP vor der endgültigen Synchronisierung.
Die Bereitstellung erfolgt vollautomatisch, und das Panel bietet Ihnen den Zugriff auf die Konsole und die Neuinstallation; Migration ist ein Standard-Rsync-Job, den Sie in einer halben Stunde selbst ausführen können. Wenn etwas nicht passt, antwortet [email protected] innerhalb von 30 Minuten.