MCollective : lancez des actions en parallèle sur des machines distante
Contents
Software version | 2.0.0 |
---|---|
Operating System | Debian 7 / RedHat 6.3 |
Website | MCollective Website |
Last Update | 14/05/2013 |
Others |
1 Introduction
Mcollective, pour " Marionnette Collective ", est un logiciel écrit par R.I. Pienaar. Le but est de faciliter la gestion d’un parc comportant de nombreuses machines depuis un point central. Il peut se comparer à des outils comme Fabric, ou Capistrano, car il permet de lancer de nombreuses actions en parallèle sur des machines distantes, mais il s’en différencie par un point notable : il ne repose pas sur SSH. En effet, le programme s’appuie sur un middleware (intergiciel si ma mémoire de langage avec du sirop au caramel ne me trompe pas) et dispose de fonctionnalités qui font de vous non plus une loutre, mais LA loutre ultime.
Pourquoi cela ? Parce qu’une bonne partie du travail répétitif et lassant est pris en charge directement dans le programme. Avec les deux logiciels cités précédemment, vous devez savoir quelles machines sont là, quelle configuration elles embarquent. Bref, vous devez tenir une liste à jour. Avec Mcollective, la découverte des clients est automatique : les machines viennent s’enregistrer sur un serveur, et lors d’une requête, les messages sont dispatchés vers tous les hôtes via le middleware.
Mcollective utilise un daemon qui tourne sur chaque machine. Ce dernier utilise des agents afin d’effectuer les différentes actions que l’on attend de lui : gérer des packages, des services ou envoyer des messages. Chaque agent s’inscrit à un "topic" du middleware et attend les messages qui lui correspondent.
J'ai tenté une installation mi Debian 6, mi Debian 7 pour profiter des packages ActiveMQ, mais je vous le déconseil, car il y a pas mal de problèmes de dépendances liées à la version de Ruby et gems. C'est pourquoi je suis parti sur une Debian 7.
Une interface web a vue le jour pour l'administration MCollective : MCOMaster.
2 Prérequis
Mcollective utilise un serveur de queues, je vais donc vous en proposer 2 :
- Stomp server : fait pour les petites installations
- ActiveMQ : une usine à gaz sous Java, mais nécessaire pour les grosses installations
Utilisez celui qui vous intéresse. Voici comment est structuré et doit fonctionner Mcollective :
- Le client correspond à la machine qui fait office de serveur Mcollective en fait. Il est le noeud qui va contrôler les serveurs Mcollective.
- Les serveurs Mcollective sont représentés ici par des noeuds sous forme de cluster. Pour qu'une machine puisse être contrôlée par le client Mcollective, il faut que le serveur soit installé dessus.
- Le middleware correspond au serveur de queues (ActiveMQ par exemple).
3 Middleware
3.1 Stomp server
3.1.1 Installation
L'installation du stomp serveur est facile :
aptitude |
aptitude install stompserver libstomp-ruby |
3.1.2 Configuration
Et sa configuration est simple, modifiez le host par l'ip de l'interface sur laquelle il doit écouter. Ou bien toutes :
3.2 ActiveMQ
3.2.1 Installation
On lance l'installation d'ActiveMQ :
aptitude |
aptitude install activemq |
3.2.2 Configuration
Nous allons configurer ActiveMQ. Je n'expliquerais pas toutes ces lignes, je l'ai simplement prise sur le site de PuppetLab :
Ceci va créer un utilisateur 'mcollective' avec le mot de passe 'marionette' et donne full accès (lecture,écriture et admin) à "/topic/mcollective.*". Adaptez le mot de passe selon vos besoins.
Nous allons insérer un fichier avec les identifiants par défaut d'ActiveMQ :
cp |
cp /usr/share/doc/activemq/examples/conf/credentials.properties /etc/activemq/instances-available/main |
Ensuite nous allons rajouter quelques options pour qu'il n'y ai pas de problème au boot d'ActiveMQ :
Ensuite nous allons activer cette configuration et démarrer ActiveMQ :
ln -s /etc/activemq/instances-available/main /etc/activemq/instances-enabled/main /etc/init.d/activemq start |
4 MCollective
4.1 Prérequis
4.1.1 Debian
Pour installer MCollective, nous allons faire simple et mettre en place le repository Debian :
wget http://apt.puppetlabs.com/puppetlabs-release-stable.deb dpkg -i puppetlabs-release-stable.deb |
Et ensuite, nous mettez à jour :
aptitude |
aptitude update |
4.1.2 RedHat
Tout comme Debian, il existe un repo yum sur Red Hat et nous allons installer un package qui va le configurer pour nous :
rpm |
rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-6.noarch.rpm |
4.2 Serveur
Nous allons voir dans cette partie comment installer et configurer Mcollective sur le serveur.
Notes |
Le serveur correspond au 'client' sur le schéma. C'est à dire la machine qui prendra le contrôle sur tous les noeuds Mcollective |
4.2.1 Installation
Installez mcollective sur Debian :
aptitude |
aptitude install mcollective mcollective-client |
Il vous sera proposé une première option. Si il y a puppet sur cette machine, il vous demandera de le supprimer, dites non et une seconde proposition plus souple vous sera proposé. Acceptez cette dernière.
4.2.2 Configuration
Nous allons configurer la partie serveur qui va nous permettre de faire les interrogations au serveur :
Puis configurer la partie cliente, même si c'est le serveur, cela nous permettra de faire des actions sur cette machine également :
Maintenant, redémarrez mcollective :
/etc/init.d/mcollective restart |
4.3 Client
Nous allons voir dans cette partie comment installer et configurer Mcollective sur les machines clientes.
4.3.1 Installation
4.3.1.1 Debian
Installez mcollective :
aptitude |
aptitude install mcollective |
4.3.1.2 RedHat
Installez mcollective :
aptitude |
yum install mcollective |
4.3.2 Configuration
Sur vos clients, il faut simplement éditer la configuration et mettre les bonnes valeurs :
5 Utilisation
Nous allons maintenant passer à la partie intéressante... l'utilisation :-)
5.1 Détecter les machines
Il existe une commande permettant de voir quels sont les hosts disponibles :
mco |
> mco ping mcollective.deimos.fr time=45.62 ms server1 time=52.32 ms ---- ping statistics ---- 2 replies max: 52.32 min: 45.62 avg: 48.97 |
5.2 Obtenir de l'aide
Pour obtenir de l'aide et voir les modules installés :
5.3 Récupérer des statistiques
Il est possible de récupérer des statistiques sur vos noeuds de cette façon :
5.4 Faire l'inventaire d'un noeud
Le but de cette commande est de nous montrer tout ce dont nous avons à disposition sur un noeud mcollective :
5.5 Reloader tous ses noeuds
Si vous venez de déployer un nouvel agent et que vous souhaitez recharger Mcollective sans le redémarrer, il est possible de le faire depuis le client :
mco |
mco controller reload_agents |
Si vous souhaitez le faire que sur une seule machine :
mco |
mco controller reload_agents -W /machine/ |
5.6 Utiliser les commandes RPC
Il est possible d'utiliser tous les modules sous forme de commande RPC. Voici un exemple de syntaxe avec le module service :
mco |
mco rpc service start service=httpd |
5.7 Les filtres
Je vais reprendre les exemples de la documentation officiel, car ils sont très explicites :
Pour les filtres encore plus poussés, je vous conseil la documentation officielle. Voici un exemple d'une recherche un peu complexe :
mco service restart httpd -S "((customer=acme and environment=staging) or environment=development) and /apache/" |
6 Les Modules
Les modules permettent de rajouter des fonctionnalités à Mcollective. Par exemple la prise en charge des services, des packages, des plugins nrpe...
Nous allons voir ici comment en installer certains. Pour rendre cet article simple et compatible RedHat/Debian, nous utiliserons des variables pour l'installation des plugins et nous allons créer quelques dossiers manquants :
6.1 Services
Le module Service permet de d'utiliser la gestion des services : stop, start, restart, enable, disable et status. Nous allons devoir installer une partie sur les serveurs et une autre partie sur le client.
6.1.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/agent wget -O service.rb "https://raw.github.com/puppetlabs/mcollective-plugins/master/agent/service/agent/puppet-service.rb" |
Redémarrez Mcollective.
6.1.2 Client
Sur le client :
Redémarrez Mcollective.
6.1.3 Utilisation
Pour l'utilisation c'est simple, voyez plutôt ma demande pour le service ssh :
6.2 File Manager Agent
Le module "File Manager Agent" permet de créer des fichiers vide, les supprimer ou récupérer des informations sur des fichiers.
6.2.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/agent wget "https://raw.github.com/puppetlabs/mcollective-plugins/master/agent/filemgr/agent/filemgr.rb" |
Redémarrez Mcollective.
6.2.2 Client
Sur le client :
Redémarrez Mcollective.
6.2.3 Utilisation
Pour l'utilisation c'est simple, voici comment récupérer des stats sur un fichier :
6.3 NRPE
Le module "NRPE" permet d'utiliser les checks NRPE définits dans vos configurations nagios.
6.3.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/agent wget "https://raw.github.com/puppetlabs/mcollective-plugins/master/agent/nrpe/agent/nrpe.rb" |
Redémarrez Mcollective.
6.3.2 Client
Sur le client :
Redémarrez Mcollective.
6.3.3 Utilisation
Pour l'utilisation c'est simple, voici comment récupérer des stats sur un fichier :
mco |
mco nrpe -W /dev_server/ check_load |
6.4 Package Agent
Le module "Package Agent" vous permet d'installer des packages ou bien de savoir si un package est installé ou non.
6.4.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/agent wget "https://raw.github.com/puppetlabs/mcollective-plugins/master/agent/package/agent/puppet-package.rb" |
Redémarrez Mcollective.
6.4.2 Client
Sur le client :
Redémarrez Mcollective.
6.4.3 Utilisation
Voici un exemple d'utilisation :
6.5 FactsFacter
Le module "FactsFacter" vous permet d'utiliser les facts que vous avez dans votre Puppet.
6.5.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/facts wget "https://raw.github.com/puppetlabs/mcollective-plugins/master/facts/facter/facter_facts.rb" |
Il faut modifier la configuration également avec les informations de facts. Rajouter ou adaptez ces lignes :
Redémarrez Mcollective.
6.5.2 Client
Sur le client :
wget |
cd $mco_plugins/facts wget "https://raw.github.com/puppetlabs/mcollective-plugins/master/facts/facter/facter_facts.rb" |
Redémarrez Mcollective.
6.5.3 Utilisation
Voici un exemple d'utilisation :
mco |
> mco find -W operatingsystem=RedHatserver1 |
6.6 Process Management Agent
Le module "Agent Process" vous permet de lister des process sur vos machines.
6.6.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/agent wget "https://raw.github.com/puppetlabs/mcollective-plugins/master/agent/process/agent/process.rb" |
Vous aurez également besoin d'une librairie ruby sys-proctable. J'ai fais un package RPM pour ceux qui souhaitent, vu que je ne l'ai pas trouvé packagé : rubygem-sysproctable-0.9-0.noarch.rpm.
Redémarrez Mcollective.
6.6.2 Client
Sur le client :
Redémarrez Mcollective.
6.6.3 Utilisation
Voici un exemple d'utilisation :
6.7 Agent Puppetd
Le module "Agent Puppet" vous permet de contrôler le démon puppetd et de lancer des runs puppet client. Le problème avec celui ci est qu'il n'est pas à jour, ne supporte pas les tags et l'option noop. Heureusement, quelques personnes s'y sont penchées, nous installerons donc cette version en attendant que la version officielle sorte.
6.7.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/agents wget "https://gist.github.com/raw/2983382/3cd8ca0764d0f1ab4411a2da3fd8a75262ce2ad9/puppetd.rb" |
Redémarrez Mcollective.
6.7.2 Client
Sur le client :
Redémarrez Mcollective.
6.7.3 Utilisation
Voici un exemple d'utilisation :
- -f : permet de forcer la synchro tout de suite au lieu d'attendre un intervalle de temps aléatoire
- --tags : permet de définir un tag en particulier à synchroniser
- --noop : permet de simuler
Si nous voulons l'exécuter sur plusieurs machines en parallèle (2 simultanément) :
mco |
> mco puppetd runall 2 |
6.8 Shell
Le module "Shell" vous permet de lancer n'importe quelle commande shell sur toutes vos machines.
6.8.1 Serveur
Sur tous les noeuds serveurs, ajoutez ceci :
wget |
cd $mco_plugins/agents wget "https://raw.github.com/phobos182/mcollective-plugins/master/agent/shell/shell.rb" |
Redémarrez Mcollective.
6.8.2 Client
Sur le client :
Redémarrez Mcollective.
6.8.3 Utilisation
Voici un exemple d'utilisation :
7 FAQ
7.1 Debugger ActiveMQ
Il peut arrive que l'on ai des problèmes lors del a mise en place d'ActiveMQ. Pour récupérer plus d'informations sur le retour, voici comment lancer manuellement ActiveMQ :
activemq |
/usr/bin/activemq console xbean:/etc/activemq/instances-enabled/main/activemq.xml |
7.2 Caught TERM; calling stop
Si vous rencontrez ce genre de message d'erreur dans Puppet Dashboard quant vous lancez depuis Mcollective des runs Puppet, il vous faut travailler sur le manifest de puppet, pour que cette ligne soit commentée :
/etc/puppet/modules/puppet/manifests/redhat.pp |
[...] service { 'puppet-srv' : name => 'puppet', # Let this line commented if you're using Puppet Dashboard #ensure => stopped, enable => false } [...] |
7.3 `load': no such file to load
Si vous avez ce genre de message au démarrage d'MCollective :
/usr/lib/ruby/1.8/mcollective/pluginmanager.rb:169:in `load': no such file to load -- mcollective/facts/facter_facts.rb (LoadError) from /usr/lib/ruby/1.8/mcollective/pluginmanager.rb:169:in `loadclass' from /usr/lib/ruby/1.8/mcollective/config.rb:137:in `loadconfig' from /usr/sbin/mcollectived:29
C'est parce que le chemin des librairies est mauvais[1]. Corrigez ceci dans le fichier de configuration server d'MCollective :
/etc/mcollective/server.cfg |
[...] # libdir = /usr/libexec/mcollective libdir = /usr/share/mcollective/plugins [...] |
8 References
http://www.unixgarden.com/index.php/gnu-linux-magazine/mcollective-l-administration-systeme-massive
http://docs.puppetlabs.com/mcollective