3 votes

Exécution de crontab sur un groupe de mise à l'échelle automatique AWS

J'ai la configuration suivante : 1 serveur avec l'application X, qui exécute une crontab une fois par heure. Le crontab se connecte à la base de données, effectue des calculs lourds, exporte les données vers un fichier de données spécial et redémarre l'application. L'exportation peut durer entre 10 et 40 minutes.

Je le veux :

  • Déplacez ce serveur vers AWS et utilisez le groupe d'auto-scaling.

  • La crontab qui s'exécute sur un seul serveur, effectue le calcul, exporte les données et les synchronise avec tous les autres serveurs.

  • Tous les serveurs devraient détecter automatiquement les nouvelles données et se redémarrer en toute sécurité (pas pendant la synchronisation par exemple).

  • Les nouveaux serveurs qui démarrent à partir des groupes d'auto-scaling affichent automatiquement les fichiers de données au démarrage avant de démarrer l'application réelle.

Je n'ai pas d'idée "simple" sur la manière de le faire ou de solution spécifique à AWS.

C'est mon idée :

  • Exécuter un serveur en dehors du groupe d'auto-scaling. Exécutez la crontab uniquement sur ce serveur. Tous les fichiers de données seront téléchargés sur S3.

  • Tous les serveurs d'autoscaling auront une crontab qui s'exécute toutes les minutes et vérifie un fichier unique "please_download_me_TIMESTAMP".

  • Une fois les fichiers téléchargés, le script redémarre le service.

  • Si un nouveau serveur est lancé, il récupérera automatiquement tous les fichiers de S3 au démarrage.

Pensez-vous que cela pourrait fonctionner ?

1voto

Joe Friday Points 11

Il s'agit d'un problème courant dans AWS EC2 et il a été résolu. Voir https://gist.github.com/kixorz/5209217 pour un exemple avec mise en œuvre.

0voto

Tim Points 28848

Reconnaissant qu'il s'agit d'une vieille question de 2015, remontée par Joe, autant y répondre.

Si le travail est effectué une fois par heure et qu'il dure de 10 à 40 minutes, vous payez de toute façon pour une heure entière. Il est inutile de démarrer et d'arrêter les serveurs, il suffit de laisser un serveur en fonctionnement.

Si c'était moins fréquent, vous pourriez avoir un événement programmé qui place un message dans une file d'attente SQS - cela pourrait être fait par un t2.nano ou peut-être y a-t-il un moyen moins cher de le faire avec les services Amazon - Lambda ? Mise à l'échelle automatique en fonction de la taille de la file d'attente. Lorsqu'il y a des données à traiter, un serveur est créé, traite les données, les déplace là où elles doivent aller, puis se ferme.

Une autre façon de procéder serait une mise à l'échelle basée sur le temps, mais là encore, seulement si la fréquence est inférieure à l'heure.

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