déploiement automatisé de Linux et gestion de la configuration à petite échelle - cela en vaut-il la peine?

24

Je suis sur le point de déployer ~ 25 serveurs exécutant Debian . Les machines auront différents rôles - serveurs Web, serveurs d'applications Java, proxys, boîtiers MySQL. L'environnement ne se développera probablement pas beaucoup à l'avenir - peut-être 2 à 5 serveurs supplémentaires au cours des 2 prochaines années.

J'utiliserai probablement fai pour l'installation du système, mais je ne sais pas si cela vaut la peine d'ajouter également la gestion de configuration centralisée de cfengine ou de marionnettes pour une si petite échelle.

La gestion de la configuration est-elle judicieuse pour un environnement de cette taille?

pQd
la source

Réponses:

29

Je recommanderais d'utiliser un mélange de pré-amorçage Debian, où vous donnez à l'installateur un fichier texte qui répond à toutes les questions qu'il poserait, et Puppet.

La raison de l'utilisation de la préconfiguration, plutôt que de FAI, est que vous n'avez pas à configurer une image en premier et à gérer sa mise à jour. Vous vous retrouverez avec une installation très similaire à ce que vous auriez si vous les faisiez tous à la main. Lorsque vous venez d'installer une nouvelle version, vous devrez mettre à jour un fichier de configuration avec les modifications, plutôt que d'avoir à reconstruire une nouvelle image.

Un outil de gestion de configuration est particulièrement utile lorsque vous avez plusieurs serveurs jouant le même rôle et que vous souhaitez qu'ils soient identiques, par exemple un cluster de serveurs Web. Cependant, ils peuvent également être utiles pour configurer l'installation de base de tous les serveurs. Vous allez vouloir installer des packages particuliers sur tous vos serveurs, comme ntpd et un MTA. Vous allez vouloir changer un fichier de configuration sur tous vos serveurs. Un avantage supplémentaire est que vous pouvez conserver vos manifestes dans quelque chose comme subversion et garder une trace de ce qui a changé sur un serveur et qui l'a fait et pourquoi. La gestion de la configuration peut également vous sauver la vie en cas de panne d'un serveur et vous devez la reconstruire rapidement. Installez le système d'exploitation (à l'aide de FAI ou de préconfiguration), installez la marionnette et c'est parti, reconstruit exactement comme avant. De toute évidence, vous devrez conserver des sauvegardes de données.

La gestion de la configuration nécessite un dévouement pour vous assurer que vous n'effectuez que des modifications et que les coûts initiaux seront configurés, mais une fois que vous aurez une configuration fonctionnelle, vous ne le regretterez pas.

Puppet est le plus moderne des deux outils que vous avez mentionnés. Je le recommande vraiment à tout le monde. La configuration est un langage déclaratif et il est facile de construire des constructions de niveau supérieur. Il y a aussi une très grande communauté autour d'elle et il y a toujours des gens bienvenus pour aider sur la liste de diffusion ou sur le canal IRC.

David Pashley
la source
merci pour un indice de pré-ensemencement. je regarde les documents à ce sujet en ce moment.
pQd
FAI est une vieille école; Je ne le recommanderais certainement pas. Pré-ensemencement + Puppet ftw.
womble
Nous utilisons FAI et cfengine, nous avons environ 1000 machines et cela fonctionne très bien. Il vaut la peine de noter que vous pouvez utiliser ssh dans la machine au fur et à mesure qu'elle se construit, ce qui peut faciliter l'écriture des micro scripts.
James
Vieille scool FAI? NON! FAI est solide comme le roc et a plus de 10 ans d'expérience. Jetez un œil à la longue liste des utilisateurs FAI sur fai-project.org/reports
Thomas Lange
Bon conseil, nous utilisons une approche similaire et cela fonctionne bien. Cependant, je ne rejetterais pas FAI. FAI n'utilise pas d'images pour l'installation (SystemImager le fait). Vous devez configurer un répertoire racine nfs minimal utilisé pour exécuter le programme d'installation FAI. Le processus d'installation est automatisé avec des fichiers de configuration et l'exécution de divers hooks définis par l'utilisateur. L'avantage par rapport à la préconfiguration est que le concept de classes FAI facilite la gestion de plusieurs serveurs (et même des postes de travail) ayant des rôles différents.
JooMing
10

Je recommanderais CFengine pour tout environnement de plus de 2-3 cases et où vous avez un concept de «modèles» ou de serveurs remplissant des rôles spécifiques.

Pourquoi? Autrement dit, il réduit les erreurs, vous disposez d'un outil qui garantira que les autorisations de fichiers / répertoires sont correctes partout dans l'environnement et lorsque vous venez de déployer plus de serveurs, l'outil gère absolument tout et ne fait jamais d'erreurs.

Contrairement à même un administrateur système qualifié déployant un serveur Web à la fin d'un quart de travail de 12 heures lorsque les choses ont déjà mal tourné ... Sont-ils susceptibles de se souvenir de ce petit fichier de configuration désagréable qui doit aller dans / etc / random / location / foo / bar sinon l'application échouera silencieusement à faire quelque chose d'assez important, comme facturer les clients? :)

Des outils comme CFengine sont également un excellent moyen d'effectuer des mises à jour de sécurité à l'échelle de l'environnement. Déposer une configuration Nagios (NRPE) sur toutes les boîtes est également un jeu d'enfant. Que vous avez affaire à cinq boîtes ou cinq cents boîtes vous allez gagner du temps avec CFengine.

Il est probablement intéressant de noter que mon environnement est un peu plus grand, mais j'ai également déployé CFengine pour des environnements plus petits que vous ne le notez, d'où la recommandation!

Votre prochaine question sera probablement CFengine vs Puppet? C'est une décision plus difficile à prendre, et j'ai toujours opté pour CFengine en raison (au début) d'une certaine immaturité de Puppet, en particulier en ce qui concerne la journalisation des erreurs .... ces jours-ci, je ne suis vraiment pas sûr - jouer à voir? En repensant à mes problèmes spécifiques avec Puppet, ils étaient liés au certificat SSL, rappelant douloureusement le temps que j'ai passé 3 heures à diagnostiquer les problèmes de connectivité du serveur <-> client dans irc.freenode.net/#puppet avec quelques RTFM et RTFS lourds uniquement pour trouver une erreur, ne pas être enregistré, et Luke a dit: "Ah, c'est vraiment difficile à corriger" et n'a jamais fait. :(

nixgeek
la source
bon point. le problème est dans mon cas que les choses vont être très spécialisées, le nombre de modèles [en raison de la redondance] sera probablement autour de n / 2 [où n est le nombre total de serveurs].
pQd
1
Ce n'est pas une mauvaise chose, la plupart de mes clusters WWW sont n + 2 sinon n / 2 et vous pouvez être assez flexible avec CFengine pour déployer des nœuds derrière vos équilibreurs de charge comme HAproxy. Il est parfaitement viable de gérer IPVS et les choses persistantes aussi :-) Même avec des exigences de redondance n / 2, je parierais que vous avez beaucoup de fichiers de configuration identiques ou similaires dans votre environnement? N'oubliez pas qu'avec CFengine, vous disposez de l'outil «editfiles» pour faire des choses comme un fichier de configuration «basé sur des modèles» contenant quelque chose comme IP , puis (au moment de l'exécution) une recherche et un remplacement par les bonnes informations. ;)
nixgeek
@astinus merci pour vos commentaires. j'ai aussi un peu peur de baisser ma production par vissage en configuration centrale. que pensez-vous de la désactivation de l'interrogation automatique de la configuration et de la journalisation sur chacune des machines et de la forcer à mettre à jour et à vérifier manuellement si tout va bien? [oui, j'aurai aussi des nagios / surveillance personnalisée en place ... mais quand même].
pQd
1
Je pense que la confiance dans vos techniques de gestion de la configuration vient avec le temps, mais en attendant, désactivez simplement l'interrogation automatique des boîtes et utilisez 'cssh' pour vous connecter à chaque classe de boîtes pour exécuter 'cfagent -qv' (ou autre!) Quand vous souhaitez envoyer des mises à jour. Si vous voulez une astuce pour améliorer la confiance, déployez une machine virtuelle en tant qu'environnement de «mise en attente» et assurez-vous que toutes les modifications sont effectuées en premier. Assez facile si vous conservez votre configuration CFengine ou Puppet dans Subversion, utilisez simplement des branches et des balises.
nixgeek le
Je recommanderai également d'utiliser SLACK pour simplifier ridiculement la (ré) installation des systèmes, la gestion de la configuration. Il est disponible ici: sundell.net/~alan/projects/slack
HK_
5

En plus de cfengine et marionnette, il y a aussi un chef . Je suggérerais fortement d'utiliser l'un de ces outils, car les choses évolueront toujours dans des directions inattendues. Cela permet de gérer les choses dans un emplacement centralisé.

La chose importante à reconnaître est que les chances sont que vous n'obtiendrez pas tout, mais si vous pouvez au moins obtenir 90%, c'est un début. De plus, c'est amusant et vous facilitera la vie à long terme. Enfin, c'est une bonne compétence d'avoir à aller de l'avant.

Jauder Ho
la source
chef est une entrée récente sur la scène de la gestion de la configuration. Il est conçu pour être configuré en écrivant ruby ​​pour faire ce que vous voulez, par opposition au langage déclaratif personnalisé de marionnette. Le temps nous dira quelle méthode fonctionne bien. Je suis actuellement assis dans le camp de marionnettes.
David Pashley
3

J'utilise cfengine depuis 5 ans pour installer debian (de Woody à Lenny de nos jours). Avec etch, je crée un installateur Debian personnalisé. Grâce à la préconfiguration, une seule question se pose: "quel est le nom d'hôte". Après cela, cfengine configure le serveur entier (dns + dhcp avec dnssec, samba, ntpd, utilisateurs et mots de passe par défaut (Samba), ssh, openvpn, apache vHosts, sauvegarde avec rsnapshot sur LVM, webminmodules personnalisés, etc.).

Même lorsque j'installe un seul serveur, j'utilise cfengine-scripts de ma boîte à outils comme ceci:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

J'aime cfengine, car les scripts cf2 sont quelque peu lisibles par l'homme.

il vaut donc vraiment la peine de travailler avec des outils de gestion automatique de la configuration.

/ thorsten

ThorstenS
la source
2

Cela en vaut la peine, même pour un petit site. Il s'agit de cohérence à mesure que vous grandissez. Et vous savez que votre site va grandir. Mieux vaut commencer alors que vous êtes encore petit. Cfengine est génial. Surtout la version 3, qui peut gérer tous les gestionnaires de paquets à travers le domaine, et sa vraie légèreté et sécurité et cela "fonctionne tout simplement". Puppet n'a tout simplement pas livré ce qu'il prétendait. Je n'ai pas essayé le chef.

L'avantage de cfengine par rapport aux autres est qu'il est ultra léger mais a en fait plus de capacités. C'est la sécurité, c'est comme ssh, plutôt que les certificats web utilisés par marionnette. Quand j'ai parlé de cfengine à mon patron, il pensait que c'était de la science-fiction :) Si vous cherchez quelque chose de futuriste, essayez de lire certains des articles de recherche de Marc Burgess. Truc cool.

SAnnukka
la source
1

L'outil numéro un que j'aurais aimé avoir lors de l'exécution d'un petit site est la création de boutons-poussoirs. Il facilite les correctifs, les mises à jour et les reconstructions, ce qui peut résoudre une multitude d'autres problèmes à l'avenir.

Pas de ssh correctement installé sur toutes les boîtes? pas de boucle / wget / vim non plus? Qu'en est-il des autres outils internes que vous aimeriez avoir sur chaque boîte?

La gestion centralisée de vos serveurs est l'un des premiers outils que vous devriez utiliser pour faciliter les efforts futurs.

ericslaw
la source
1

Je suis d'accord avec tout le monde ici. Vous devriez commencer à apprendre et à mettre en place une infrastructure fonctionnelle lorsque vous n'êtes pas trop grand. Parce qu'alors vous êtes prêt quand vous grandissez.

Selon ce que vous voulez exécuter, j'opterais pour FAI, cfengine et pré-amorçage pour Debian / Ubuntu. FAI peut fonctionner avec de nombreux outils différents, c'est donc un bon début pour toute distribution de type Debian. Avec la configuration contrôlée par classe FAI (et cfengine), vous pouvez facilement diviser vos installations en petits modules, que vous pourrez ensuite sélectionner lesquels utiliser pour chacune de vos machines. De cette façon, il sera utile même si vous avez plusieurs machines différentes. C'est en fait plus utile, car vous documenterez votre installation avec ces scripts. Et lorsque vous installez sur une nouvelle machine, vous n'oublierez rien.

Oui, vous DEVRIEZ avoir des machines à tester avant de déployer vos modifications dans une installation en direct. Mais avec un script de configuration comme celui-ci, vous n'oublierez pas de faire une étape de l'installation en direct.

Anders
la source