7 votes

Déploiement de production sur EC2 avec un temps d'arrêt minimal

J'ai une application web simple déployée sur une grande instance avec EC2. Je veux maintenant déployer le dernier code sur ce serveur, mais je veux le faire d'une manière qui minimise les temps d'arrêt et soit aussi fluide que possible pour l'utilisateur final. Voici mon plan :

  1. Démarrer une autre grande instance
  2. Installer toutes les couches de logiciels sur cette instance
  3. Restaurer et attacher un lecteur EBS à l'instance
  4. Déployer notre dernier code prêt pour la production sur la nouvelle instance
  5. Exécuter tous les tests (y compris les tests manuels de l'application)
  6. (Si les tests passent) Mettre un avis de "Site en maintenance" sur le site en direct.
  7. Sauvegarder l'instance EBS sur le site en direct
  8. Détacher l'instance EBS du nouveau serveur et la remplacer par la dernière sauvegarde
  9. Utiliser ec2-associate-address pour déplacer l'adresse IP vers la nouvelle instance
  10. Se retirer et attendre que le trafic commence à passer par la nouvelle instance
  11. Terminer l'ancienne instance

Cette stratégie vous semble-t-elle bonne ? Y a-t-il des tutoriels ou des livres qui pourraient couvrir ce sujet ? J'ai déjà lu Cloud Application Architectures de George Reese, qui est un excellent livre, mais qui ne couvre pas le déploiement. De plus, je sais qu'il existe des outils qui peuvent aider comme RightScale ou enStratus que j'utiliserai lorsque je commencerai à utiliser plus d'une instance.

7voto

Zameer Manji Points 1213

D'accord, cela a été demandé il y a un moment, mais je vais quand même donner mon avis. Je pense que vous passez à côté des avantages du cloud computing.

Tout d'abord, vous devriez séparer votre code d'application et vos données persistantes sur 2 machines virtuelles différentes. Cela vous coûtera un peu en termes de latence de communication inter-VM, mais devrait rendre votre administration beaucoup plus simple. Rappelez-vous, avoir 2 petites VM au lieu d'1 grande VM n'est pas plus cher; donc choisissez le nombre d'hôtes qui correspond le mieux à vos besoins.

Si possible, vous voulez que vos serveurs d'application soient "sans état" dans le sens où ils ne devraient pas avoir de données persistantes, et vous devriez être en mesure de démarrer une nouvelle instance avec un minimum de travail manuel.

Deuxièmement, vous devriez envisager si certains des services gérés par Amazon comme SimpleDB ou le service de base de données relationnelle (MySQL hébergé) sont bien adaptés à votre magasin de données persistantes.

Le flux idéal ressemble à ceci :

  1. Changer le système backend "le plus arrière" en premier. Par exemple, si votre changement nécessite d'ajouter une colonne à une table de base de données, ajoutez-la en utilisant des outils MySQL normaux sur une instance RDS en cours d'exécution. (Cela suppose que votre architecture permet à votre magasin de données de changer tout en maintenant la compatibilité ascendante, ou que vous mettez d'abord à jour le code de votre serveur d'application pour qu'il soit compatible vers l'avant.)
  2. Démarrer une nouvelle instance de serveur d'application, en utilisant une AMI prête à l'emploi personnalisée que vous avez préparée à l'avance.
  3. Installer votre code mis à jour sur le nouveau serveur d'application, c'est-à-dire le nouveau code qui utilise la nouvelle colonne et a la nouvelle fonctionnalité.
  4. Tester.
  5. Transférer une partie ou tout le trafic, c'est-à-dire basculer l'adresse IP / le basculement de l'équilibrage de charge élastique vers le nouveau serveur d'application. (Dans un monde idéal, vous ne transféreriez qu'un petit pourcentage, disons 5% de votre trafic au début, et vous surveilleriez ensuite tout problème. À ma connaissance, l'équilibrage de charge élastique ne prend pas en charge le routage pondéré persistant encore, donc vous ne devriez probablement pas le faire. Le basculement progressif peut également être réalisé en ayant 2 chemins d'exécution dans votre code, mais c'est fastidieux et ennuyeux à faire - l'équilibrage de charge pondéré persistant est plus simple.)
  6. Gardez l'ancienne instance de serveur d'application pendant quelques jours, au cas où le nouveau code aurait des régressions et que vous deviez revenir en arrière.

5voto

gareth_bowles Points 8717

Cela semble être une bonne approche globale. Vous pourriez supprimer l'étape 2, et ainsi réduire le temps de lancement, en créant une AMI personnalisée qui inclut toutes les couches logicielles dont vous avez besoin; ceci dit, je mettrais quand même à jour tous les packages au démarrage pour m'assurer d'obtenir toutes les dernières mises à jour de sécurité.

Vous pourriez également envisager d'utiliser une instance prise en charge par EBS - de cette façon, vous pourriez avoir le volume de démarrage, le stack logiciel et votre application tous sur EBS, ce qui supprimerait quelques-unes des étapes ci-dessus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X