Nous avons un référentiel central de fichiers dans, par exemple, server-1 à /srv/www
. Ensuite, nous avons également un nombre N de serveurs. Nous voulons que server-1 puisse déployer ses fichiers /srv/www
sur tous les serveurs aussi rapidement et efficacement que possible.
Existe-t-il quelque chose comme rsync, mais au lieu de spécifier une seule cible, de spécifier un cluster (N serveurs) de cibles?
Je pensais que cela git
pouvait fonctionner, mais pouvons-nous également spécifier plusieurs télécommandes à pousser?
Quelle est la meilleure solution, en supposant que N serveurs peuvent éventuellement atteindre des centaines.
rsync
deployment
git
Justin
la source
la source
Réponses:
Eh bien, Twitter et Facebook ont commencé à utiliser bittorrent dans leurs clusters pour distribuer de nouvelles révolutions de code. Ce faisant, ils sont capables de transmettre du code à des dizaines de milliers de serveurs en très peu de temps par rapport aux méthodes de déploiement centralisées à l'ancienne.
Cela ne semble pas encore être à cette échelle, mais il n'y a aucun mal à concevoir votre système de déploiement de telle sorte qu'il ne se révélera pas de goulot d'étranglement de sitôt.
la source
Je ne recommande pas git pour les gammes auxquelles vous parlez. Cela peut fonctionner, mais je constate personnellement des lacunes dans l'utilisation de ce modèle pour la récupération.
Il y a quelques éléments qui déterminent la meilleure façon de procéder:
Pour une convergence parfaite et une vitesse maximale, vous devrez opter pour un système de fichiers réseau, tel que NFSv4. Les systèmes de fichiers en cluster que je connais ne s'adaptent pas à plusieurs centaines de nœuds, il doit donc s'agir d'un système de fichiers réseau. Cela présente ses propres défis, mais cela signifie que vous atteindrez la convergence au moment où les fichiers sont mis à jour sur la tête NFS.
Pour une convergence rapide, vous pouvez utiliser une astuce rsync. Si le démon rsync finit par être lié au processeur, vous pouvez certainement placer deux ou trois serveurs rsync derrière un équilibreur de charge comme haproxy. Ajoutez à cela des tâches cron pour extraire des données (ou une autre méthode de déclenchement des mises à jour de code) et vous pouvez atteindre la convergence assez rapidement.
Pour les deux, ce sera probablement une bonne idée de placer le référentiel central sur des liaisons 10 GbE pour un débit maximal.
Un autre est un push-rsync, où il est exécuté à partir du référentiel central pour envoyer des mises à jour à vos serveurs. Il ne convergera pas aussi rapidement que les deux ci-dessus, mais sera plus convivial pour votre bande passante interne. Utilisez plusieurs hôtes poussant sur des plages divisées pour une meilleure vitesse.
la source
rdist peut fonctionner pour vous.
la source
[affilié] En utilisant Kwatee ( http://www.kwatee.net ), vous pouvez déployer sur autant de serveurs que vous le souhaitez. Les déploiements sont incrémentiels (seuls les fichiers modifiés sont transmis) et peuvent être parallélisés donc c'est très rapide. Vous pouvez également configurer Kwatee pour qu'il reconnaisse l'équilibreur de charge afin que les serveurs soient supprimés du LB pendant les mises à jour, puis réinsérés. Il existe une interface graphique pour configurer les paramètres de déploiement, puis les déploiements peuvent être déclenchés manuellement via l'interface graphique ou automatisés à l'aide de commandes python.
la source