Gestion d'une application sur plusieurs serveurs, ou PXE vs cfEngine / Chef / Puppet

15

Nous avons une application qui s'exécute sur quelques boîtes (environ 5 et va grandir). Le matériel est identique dans toutes les machines, et idéalement le logiciel le serait aussi. Je les gère à la main jusqu'à présent, et je n'en veux plus (adresses IP statiques, désactivation de tous les services nécessaires, installation des packages requis ...). Quelqu'un peut-il équilibrer les avantages et les inconvénients des options suivantes, ou suggérer quelque chose de plus intelligent?

1: Installez individuellement les centos sur toutes les boîtes et gérez les configurations avec chef / cfengine / puppet. Ce serait bien, car j'ai voulu une excuse pour apprendre à utiliser l'une des applications, mais je ne sais pas si c'est la meilleure solution.

2: Faites une boîte parfaite et imaginez-la. Servir l'image sur PXE et chaque fois que je veux apporter des modifications, je peux simplement redémarrer les boîtes à partir d'une nouvelle image. Comment les gars du cluster gèrent-ils normalement des choses comme avoir des adresses mac dans les fichiers / etc / sysconfig / network-scripts / ifcfg *? Nous utilisons également l'infinibande, et il refuse également de démarrer si le hwaddr est erroné. Peut-on les générer correctement au démarrage?

Je penche vers la solution PXE, mais je pense que le suivi avec munin ou nagios sera un peu plus compliqué avec ça. Quelqu'un a de l'expérience avec ce type de problème?

Tous les serveurs ont des SSD et sont rapides et puissants.

Merci, mat.

mat
la source

Réponses:

12

Votre cluster ressemble plus à un cluster HPC qu'à un cluster OLTP comme le mien, mais je pense que la configuration que j'utilise fonctionnerait également pour vous. Je l'appelle le "mpdehaan trifecta" parce que c'est l'ircnick du gars qui a écrit ou gère les trois outils impliqués.

1.) Cobbler pour l'approvisionnement de base-build. Cobbler est un projet qui vise à être l'intersection de vos systèmes kickstart, pxe, yum-repo, dhcp, dns, etc. C'est de loin le moyen le plus simple d'obtenir une configuration de démarrage et de fonctionner, et vous pouvez développer les autres fonctionnalités selon vos besoins.

2.) Marionnette pour la gestion de la configuration. Idéalement, vos hôtes construits par cordonnier sont des configurations très simples qui en savent juste assez pour téléphoner à la maison à votre serveur de marionnettes au démarrage. Puppet appliquera alors vos paramètres de configuration et les gardera cohérents dans votre environnement à perpétuité.

3.) Func pour les commandes ad-hoc sur plusieurs machines en parallèle. Par exemple "déployer une nouvelle extraction svn du code et redémarrer apache". Il est assez facile d'utiliser simplement func pour appeler la même commande bash sur un groupe de serveurs un peu comme cluster-ssh. Si vous voulez vraiment vous lancer, vous pouvez écrire vos propres modules avec du python très simple.

Ces trois outils ont un bon wiki et des canaux irc actifs pour obtenir de l'aide sur freenode.

cagenut
la source
Je pense que c'est la solution que je vais choisir. Je vais essayer et je vous le ferai savoir. Je vais probablement aussi bloguer le processus. Merci!
mat
5

Aperçu

À certains égards, vous avez deux questions ici ..

  • Comment créer et entretenir des serveurs standard?
  • Comment conserver la configuration standard et apporter des modifications ultérieurement?

J'ai divisé ma réponse ci-dessous en abordant ces deux choses séparément, mais elles sont très étroitement liées. Je m'adresse ici aux solutions technologiques et non aux meilleures pratiques associées, telles que le contrôle des modifications.

Si cela ne couvre pas la portée de votre question, veuillez clarifier et je me ferai un plaisir de vous expliquer. Il s'agit d'une base nécessaire, essentielle pour une infrastructure technologique bien gérée.

Serveurs de bâtiment

Je n'aime pas les images dans le monde UNIX; c'est plus une approche de style Windows. Même certaines personnes Windows semblent se recentrer sur les scripts pour les versions standard maintenant.

Le satellite semble devenir quelque peu populaire dans le monde RHEL. Spacewalk est l'homologue Open Source. Vous devez absolument adhérer entièrement à l'approche RHEL pour l'utiliser. Cela sert à la fois de création de serveurs et de gestion de configuration.

Idéalement, vous voudriez établir des miroirs et des référentiels locaux sur un serveur de fichiers pour tous les logiciels nécessaires.

Tout d'abord, profitez de l'automatisation de votre build de distribution, comme Kickstart dans RHEL / CentOS. Le Kickstart serait une base de référence avec des variations, selon vos besoins. Les builds Kickstart peuvent être lancés à partir d'un serveur PXE.

Pour la partie la plus avancée de la construction et tout ce qui ne convenait pas à un fichier Kickstart, vous pouvez écrire vos propres scripts personnalisés. Cependant, vous pouvez trouver des marionnettes ou cfengine qui fonctionnent bien pour vous au lieu de scripts personnalisés. J'ai trouvé que les scripts personnalisés étaient les plus flexibles et ne se limitaient pas à une seule approche.

Si vous choisissez d'écrire vos propres scripts, je recommande un script de base pour une configuration universelle. Ce serait la configuration de la sécurité, le renforcement et tout ce qui s'applique à toutes les versions. Puis un script final pour finaliser le rôle serveur. Par exemple, un serveur Web ou un serveur de base de données.



Maintien des normes

Ce que vous décrivez relève également du maintien des configurations. Les normes de construction, les mises à jour logicielles et d'autres choses sont liées aux générations mais se séparent à bien des égards.

Si vous choisissez de vous fier aux packages système plutôt que de créer vos propres builds basés sur la source pour vos rôles de serveur les plus importants, une grande partie de cela peut être maintenue avec les utilitaires système natifs. Cela peut être aussi simple qu'un script pour exécuter une forboucle sur votre liste de serveurs et exécuter a yum -y update package.

Pour la gestion de la configuration, c'est là que marionnettes, cfengine et autres utilitaires de gestion de la configuration entrent en jeu. Ce sont des utilitaires très utiles et fournissent les bases nécessaires sans écrire vos propres scripts à partir de zéro.

Lorsque vous mettez à jour vos normes de configuration pour vos serveurs, il est important de les remplir dans vos versions de serveur standard.

Warner
la source
0

J'ai récemment terminé un gros projet pour déployer un système centralisé de build / provisioning et de gestion de configuration chez $ WORK. Nous exécutons CentOS.

Ma conception, que j'aime beaucoup, nous donne un processus de construction pratiquement en un clic (enfin, une page d'interface graphique Web), en utilisant des scripts PHP personnalisés pour tout lier via une interface utilisateur Web simple mais efficace.

La théorie générale est:

  1. Effectuez toutes les installations à partir d'un seul fichier KickStart minimaliste unifié (enfin, OK, un pour x86 et un pour x86-64, mais toujours des fichiers pratiquement identiques avec une sélection minimale de packages).
  2. Marionnette de démarrage du script de post-installation KickStat.
  3. Puppet applique toute la configuration spécifique au nœud / hôte, l'installation du package, etc.

Je suis d'accord que les images ne sont pas une façon de faire Unix-y ... elles sont vraiment plus adaptées au monde Windows où l'installation et la configuration scriptées / automatisées ne sont pas aussi simples.

Vous pouvez remplacer Puppet par n'importe quel autre système de gestion de configuration qui convient, mais il se trouve que j'aime la nature déclarative de Puppet et son concept de convergence.

Ce système présente un certain nombre d'avantages:

  • Puppet gère tout ce qui se passe après une installation de base générique, de sorte que tous les packages et la configuration requis se trouvent au même endroit.
  • Les manifestes Puppet constituent une source supplémentaire de documentation de bas niveau.
  • Tant que vous restez avec Puppet (c'est-à-dire que vous ne modifiez pas la configuration locale ou ne les fusionnez pas dans Puppet), il est trivial de créer un doublon d'une machine.
  • Étant donné que tous les hôtes sont construits à partir d'une base commune, vous pouvez préinstaller le matériel ou les machines virtuelles avec l'ensemble de packages de base (KickStart), puis les transformer en nœuds fonctionnels simplement en ajoutant des classes selon les besoins.
  • Puppet permet de "baliser" les hôtes pour la production ou le développement, il est donc incroyablement facile de créer une copie de développement / test d'un hôte, de mettre à niveau les packages ou d'apporter des modifications de configuration selon les besoins, de tester, puis de revenir en production.
Jason Antman
la source
0

Si vous descendez la route pxe, assurez-vous de jeter un œil à

http://etherboot.org/wiki/index.php

Gpxe vous donnera plus de flexibilité avec les cibles de démarrage. Il est assez facile de démarrer une lame aoe et rien de tel que de démarrer un noyau sur un serveur http distant !!!!!!!!!! :-).

De quels temps de disponibilité du serveur avez-vous besoin?

Il est impossible de créer une image parfaite, car vous devrez toujours appliquer des correctifs de sécurité et des mises à niveau logicielles. S'ils sont connectés à Internet, vous ne pouvez pas ignorer les correctifs.

Du côté pxe, vous avez quelques options, selon votre E / S de fichiers de votre cluster. Soit il suffit de démarrer un noyau et de monter le disque à distance sur aoe ou iscsi.

Vous pouvez également faire des trucs très intelligents avec la copie d'images d'écriture. Il est idéal pour les mises à niveau et pour annuler les modifications qui pourraient être problématiques.

J'ai également réussi à utiliser la racine nfs, en utilisant une solution nfs en cluster. Vous pouvez spécifier différents fichiers à servir en fonction de leurs adresses client.

Encore une fois, vous devez vérifier si votre ou vos applications aiment exécuter nfs. Il n'est pas adapté à chaque charge de travail.

le serveur NFS en cluster peut contenir 192.168.0.1:/etc/hostname 192.168.0.2:/etc/hostname

ainsi, chaque client fait référence au même fichier, mais il reçoit le fichier correspondant au client. C'est assez impressionnant, mais ce n'est pas simple!

Tout cela vous donnera des temps de déploiement plus rapides si vous centralisez le système de fichiers sur le stockage réseau. L'imagerie d'un système d'exploitation sur un réseau vers un disque distant prend du temps !!!!

Si vous utilisez l'une de ces solutions, assurez-vous que vous disposez d'une couche réseau bien conçue et tolérante aux pannes et que votre serveur nfs / SAN est bien conçu + sécurisé!

Perdre la connexion de votre NFS / SAN serait mauvais pour la santé du serveur. :-(

Il est assez facile de créer des scripts pour tftp / pxe pour contrôler le processus de démarrage.

Si j'en savais plus sur ce que vous essayez réellement de regrouper, je pourrais peut-être penser à une solution qui vous conviendrait mieux.

Le concierge Unix
la source