Changer de serveur - Rediriger vers une nouvelle IP = pas de temps d'arrêt?

13

Je change de serveur de mon site Web. L'adresse IP de l'ancien serveur ne peut pas être déplacée vers le nouveau. Pour ne pas avoir de temps d'arrêt, je prévois de faire ce qui suit, veuillez confirmer que cela fonctionnera:

  1. Configurez le nouveau serveur et écoutez sur la nouvelle IP
  2. L'ancien serveur redirige tout le trafic vers la nouvelle IP
  3. Modifier les enregistrements DNS pour pointer vers la nouvelle IP

Ma logique me dit que lorsque je redirige vers la nouvelle IP depuis mon ancienne boîte, l'utilisateur ne verra pas le nom de domaine dans le navigateur mais verra la nouvelle IP. Existe-t-il un moyen de rediriger vers la nouvelle IP et d'envoyer avec le HOSTNAME avec lui afin que l'utilisateur voit le nom de domaine dans le navigateur?

Je fais cela parce que le site est en utilisation constante et que la simple modification des paramètres DNS ne fera pas comme la base de données ne sera pas synchronisée entre les nouveaux et les anciens serveurs pendant la propagation.

Denis Pshenov
la source
3
Vous y avez probablement pensé mais ne l'avez pas mentionné: n'oubliez pas de réduire le TTL des entrées DNS pertinentes.
cjc
Ce site Web est-il utilisé uniquement par des humains ou existe-t-il des applications qui pourraient s'y connecter? Par exemple, consommer des services Web? Si tel est le cas, vous pouvez néanmoins avoir des temps d'arrêt. Java met en cache les résultats DNS et peut ne pas respecter la nouvelle entrée DNS jusqu'à ce qu'ils soient redémarrés. À moins que vous ne puissiez conserver la transmission en ligne pendant une longue période. De plus, si vous utilisez la redirection de chiffrement, certaines étapes supplémentaires seront nécessaires.
Bram
Quel type de bases de données utilisez-vous? Vous avez raison en ce que le changement de DNS ne résoudra pas le problème des temps d'arrêt, je le fais tout le temps dans mon travail et je peux vous donner des étapes détaillées mais si vous effectuez une base de données sur le même serveur, cela pose un problème mineur qui est généralement facilement résolu viens.
Anthony Fornito
Aussi quel type de serveur avez-vous Windows ou Linux, après avoir lu certaines des réponses, ils pointent tous vers Linux mais je ne vois vraiment rien dans votre question que vous utilisez IIS vs linux
Anthony Fornito

Réponses:

19

Voici la méthode qui a fonctionné pour moi:

  1. Synchronisez les fichiers et les bases de données avec le nouveau serveur.
  2. Effectuez une resynchronisation juste avant la coupure.
  3. Modifiez le DNS pour pointer vers le nouveau serveur.
  4. Transférez la demande provenant de l'ancienne adresse IP vers le nouveau serveur jusqu'à ce que la propagation DNS soit terminée.

Voici comment je ferais l'étape 4:

Nous allons configurer IPTables sur un serveur Linux pour rediriger tout le trafic provenant du port 80 (qui est le port de serveur Web par défaut) vers un serveur avec l'IP 122.164.34.240. La première étape consiste à configurer votre box Linux pour autoriser ce type de transfert. Ouvrez une fenêtre de terminal, connectez-vous en tant qu'utilisateur root et exécutez la commande suivante:

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

L'étape suivante consiste à dire à IPTables de rediriger le trafic vers le nouveau serveur:

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

Voici où la magie IPTables se produit. Avec la troisième et dernière étape, nous demandons à IPTables de réécrire l'origine des connexions au port 80 du nouveau serveur pour sembler provenir de l'ancien serveur.

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

La dernière étape est nécessaire car si nous n'informons pas le serveur Web du nouveau serveur que les connexions proviennent des machines clientes, il penserait qu'elles proviennent de l'ancien serveur.

Vous pouvez également répéter cette opération pour les bases de données et le port du serveur de messagerie.

Shain Padmajan
la source
vouliez-vous dire -A au lieu de -D ?? -D est de supprimer une règle, n'est-ce pas? Quoi qu'il en soit, après avoir fait cela, l'ancienne boîte essaie définitivement de rediriger car elle ne charge plus le Web, mais elle échoue parce que le nouveau Web ne s'affiche pas non plus, dit simplement que la connexion a expiré. Y a-t-il d'autres paramètres que je dois faire? Peut-être quelque chose sur ma nouvelle boîte?
Denis Pshenov
Tant pis, je l'ai réparé! Il s'avère que mon mur de rivage bloquait la redirection. Je l'avais permis dans les règles.
Denis Pshenov
Je suis désolé à ce sujet. Vous avez raison, c'était -A et non -D. J'ai mis à jour le message.
Shain Padmajan
1
Juste un avertissement - l'approche utilisant iptables transmettra tout le trafic vers le nouveau site, mais lorsqu'il y arrivera, il semblera provenir de votre ancien serveur et non de l'adresse IP réelle du navigateur d'origine. Cela va casser des choses comme l'analyse géographique. En particulier, ne soyez jamais tenté de transférer le port 25 de cette façon pour le courrier électronique ou vous pouvez accidentellement créer un relais ouvert car le courrier provenant d'un spammeur via l'ancien serveur sera traité par votre nouveau serveur comme s'il provenait de l'une de vos propres machines qui peut bien faire confiance et être autorisé à relayer.
Gary Bilkus
@ShainPadmajan, bien qu'en retard, merci beaucoup, cela a fonctionné comme par enchantement même en 2015.
Abhishek Madhani
5

Vous pouvez également envisager d'ajouter plusieurs enregistrements A. Par exemple, Google l'utilise, vérifiez leur sortie 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

Si vous ajoutez plusieurs enregistrements A à un domaine, les visiteurs recevront plusieurs adresses IP et les essayeront dans cet ordre. Si l'un échoue, le client passe au suivant pour essayer.

Configurez la nouvelle IP comme un enregistrement A supplémentaire 24 heures à l'avance, démarrez le nouveau serveur, arrêtez l'ancien, supprimez l'IP.

JapyDooge
la source
Sauf, n'ajoutez pas l'enregistrement A tant que le nouveau serveur n'a pas été démarré. :)
Aaron Copley
@Aaron: pourquoi pas? L'ajout d'un enregistrement A prend plusieurs heures (jusqu'à 24 heures pour être pleinement actif), et tant que le 2ème serveur n'est pas opérationnel, les clients choisissent le premier.
JapyDooge
Lorsque TTL pour une zone expire, votre serveur de noms est à nouveau interrogé pour la ressource et il obtiendra les deux réponses. Si vous ajoutez le nouvel enregistrement A et attendez un certain temps arbitraire pour démarrer le serveur, les gens se résoudront probablement déjà à un hôte qui n'est pas encore disponible. Si le nouveau serveur est déjà opérationnel, vous n'avez pas à vous en soucier.
Aaron Copley
1

Une autre option consiste à utiliser un VIP (IP virtuelle). Ainsi, vos étapes seront:

  1. Configurez le nouveau serveur et écoutez sur la nouvelle IP.
  2. Ajoutez un VIP à l'ancien serveur.
  3. Modifiez les enregistrements DNS pour pointer vers l'IP VIP. Jusqu'à présent, tout le trafic sera toujours envoyé à l'ancien serveur mais en utilisant le VIP.
  4. Lorsque vous êtes prêt à partir, déplacez le VIP sur le nouveau serveur.
  5. Facultativement, vous pouvez changer le DNS en la nouvelle adresse IP du serveur et supprimer le VIP (après un certain temps) du DNS.
Khaled
la source
J'aime ta solution. Mais je ne connais pas le VIP et comment en obtenir un. Pourriez-vous pointer dans la bonne direction?
Denis Pshenov
C'est vraiment simple. Une commande comme ifconfig eth0:0 <ip> <mask> upva créer une sous-interface configurée avec l'IP, et ifconfig eth0:0 downsuffit pour la désactiver.
Khaled
0

Ok, puisque vous avez mentionné la réplication de la base de données, vous devez procéder comme suit.

  1. Configurez la réplication entre les bases de données des deux serveurs.
  2. Pendant la transition, définissez la base de données du nouveau serveur en tant que serveur principal et l'ancien en lecture seule.
  3. Pointez la chaîne de connexion à la base de données de l'application vers le nouveau serveur sur l'ancien et le nouveau serveur. Si votre site utilise des sessions, assurez-vous que la session est conservée dans la base de données.
  4. Modifiez l'adresse IP dans DNS sur le nouveau serveur.
  5. Continuez à exécuter les deux serveurs pendant au moins 48 heures.
Shyam Sundar CS
la source
0
  1. Configurez le nouveau serveur et écoutez sur la nouvelle IP
  2. Configurez ensuite la redirection transparente. Sur l'ancien serveur, installez rinetd.

Dans rinetd.conf:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. Modifier les enregistrements DNS pour pointer vers la nouvelle IP
yadaya
la source
J'ai fait installer apt-get rinetd, changé /etc/rinetd.conf aux nouveaux paramètres, redémarré avec /etc/init.d/rinetd restart mais il ne redirige pas. rien non plus dans le journal /var/run/rinetd.log
Denis Pshenov
Montrez votre iptables-save et cat /etc/sysctl.conf | grep ip_forwards'il vous plaît.
yadaya
0

vous pouvez utiliser HA-Proxy devant vos serveurs Web, lorsque l'un d'eux passe en mode maintenance, le serveur secondaire prendra le relais.

apoc
la source
-1

Votre liste de choses à faire semble assez judicieuse.

Par exemple, en supposant que vous utilisez apache, lorsque vous faites quelque chose comme ça dans apache sur l'ancien serveur:

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

L'utilisateur verra le nouveau domaine dans le navigateur lorsqu'il naviguera vers l'ancien site. Dans ce cas, la redirection est également permanente tant que le navigateur est en cours d'exécution.

Donc, tant que vous implémentez une sorte de redirection sur votre serveur Web en plus de vos autres modifications, tout devrait bien se passer.

aseq
la source