Arbeiten im Kollektiv - mcollective mit rabbitmq

In der Sache der parallelen Datenverarbeitung fehlt es zuweilen an Tools, die leicht zu installieren sind und dennoch einen gewissen Mehrwert als pssh bieten. Einen Anspruch darauf erhebt MCollectiv

Posted by eumel8 on July 08, 2013 · 6 mins read

In der Sache der parallelen Datenverarbeitung fehlt es zuweilen an Tools, die leicht zu installieren sind und dennoch einen gewissen Mehrwert als pssh bieten. Einen Anspruch darauf erhebt MCollective [teaserbreak] Marionette COllective (MCOllective) wird als Framework zur Server Orchestrierung und parallele Jobausfuehrung betrieben. Die gute Nachricht ist zugleich eine schlechte, denn wer schluesselfertige Loesungen erwartet, wird erstmal enttaeuscht. Dennoch lohnt sich vielleicht ein Blick unter die Motorhaube.

 

Installiert wird MCollective als Server auf allen beteiligten Instanzen, sowie als Command Line Tool (CLI) auf dem Admin Node. Damit ist die Richtung des Datenflusses schon klar: Der Admin Node moechte zu den Servern connecten und dort gewisse Dinge tun. Was er dort tun kann, muss dem Server durch die Verknuepfung bestimmter Plugins beigebracht werden. Da sind dann so Sachen wir Paketverwaltung oder Kontrolle von Diensten. Und da ganz viele Nachrichten von allen Systemen eingezogen und ausgegeben werden koennen, bedarf es einer Message Queue. An der Stelle kommt RabbitMQ ins Spiel.

 

Einen Installationsversuch kann man zwar wagen mit Sourceinstallation oder Puppet-Module von https://github.com/puppetlabs/puppetlabs-mcollective, aber da werden sich bald Versionskonflikte auftun und man wird feststellen, dass das alles nicht besonders passt. Weit ergiebiger sind fertige RPM-Paket in den Sourcen vom OBS, die man in sein System einbinden kann, um dann die erforderlichen Pakete zu installieren:

zypper addrepo http://download.opensuse.org/repositories/systemsmanagement:puppet/openSUSE_12.1/systemsmanagement:puppet.repo 
zypper refresh 
zypper install mcollective 
zypper addrepo http://download.opensuse.org/repositories/systemsmanagement:chef:10/openSUSE_12.1/systemsmanagement:chef:10.repo 
zypper refresh 
zypper install erlang 
zypper install rabbitmq-server 
zypper install rabbitmq-server-plugins 

Wenden wir uns erst der Installation des RabbitMQ-Servers zu. Er sollte sinnigerweise auf dem Admin Node laufen, dazu brauchen wir erlang, rabbitmq-server und die rabbitmq-server-plugins. Der Server sollte auch out of the box laufen, aber wir brauchen natuerlich noch Anpassungen fuer MCollective:

rabbitmqctl add_vhost /mcollective 
rabbitmqctl add_user mcollective secret 
rabbitmqctl set_permissions -p "/mcollective" mcollective ".*" ".*" ".*" 

Wir haben so einen neuen VHost fuer unsere Queue, einen User “mcollective” und ein Passwort “secret” und Zugriffsrechte fuer den User auf den VHost.

rabbitmq-plugins enable amqp_client 
rabbitmq-plugins enable rabbitmq_stomp 
rabbitmq-plugins enable rabbitmq_management 

RabbitMQ wollen wir mit Stomp benutzen und ueber Web administrieren. Die einzige Konfigurationsdatei, die wir anlegen muessen ist: /etc/rabbitmq/rabbitmq.config

%% Single broken configuration 
[ {rabbitmq_stomp, [{tcp_listeners, [{"0.0.0.0", 6163}, {"::1", 6163}]}]} ]. 

Jetzt koennen wir mit

/etc/init.d/rabbitmq-server start

den Service starten. Ueber http://127.0.0.1:15672/#/exchanges sollten wir auf die Web-Administrationsoberflaeche des RabbitMQ zugreifen koennen (default login: guest/guest). Unter “exchanges” muessen wir noch 2 Eintraege fuer unsere mcollective Queue machen:

Die letzten 2 Eintraege sind neu und muessen durch uns hinzugefuegt werden.

Unter /etc/mcollective gibt es sowohl eine server.cfg als eine client.cfg. Beide Konfigurationsfiles benoetigen die Infos ueber den Connector und den RabbitMQ Service:

connector = rabbitmq 
plugin.rabbitmq.vhost = /mcollective 
plugin.rabbitmq.pool.size = 1 
plugin.rabbitmq.pool.1.host = localhost 
plugin.rabbitmq.pool.1.port = 6163 
plugin.rabbitmq.pool.1.user = mcollective 
plugin.rabbitmq.pool.1.password = secret 

Passende Kommandos zum Auffinden und Testen der Clients:

# mco find -v 

Discovering hosts using the mc method for 2 second(s) .... 2 

mcollective 
nagios3 

Discovered 2 nodes in 2.00 seconds using the mc discovery plugin 

und

# mco ping 
mcollective time=53.44 ms 
nagios3 time=55.38 ms 

und

# mco inventory nagios3 

Inventory for nagios3: 
Server Statistics: 
Version: 2.3.1 
Start Time: Tue Jul 02 22:56:31 +0200 2013 
Config File: /etc/mcollective/server.cfg 
Collectives: mcollective 
Main Collective: mcollective 
Process ID: 19395 
Total Messages: 15 
Messages Passed Filters: 15 
Messages Filtered: 0 
Expired Messages: 0 
Replies Sent: 14 
Total Processor Time: 0.05 seconds 
System Time: 0.01 seconds 

Agents: discovery rpcutil 
Data Plugins: agent fstat 

Configuration Management Classes: No classes applied 

Facts: mcollective => 1 

Fuer etwas mehr Funktionalitaet koennen wir noch ein paar Plugins installieren. Ausgangspunkt ist https://github.com/puppetlabs/mcollective-puppet-agent https://github.com/puppetlabs/mcollective-plugins/ beschrieben in http://projects.puppetlabs.com/projects/mcollective-plugins/wiki Wenn wir zum Beispiel https://github.com/puppetlabs/mcollective-puppet-agent/archive/master.zip herunterladen und auspacken, koennen wir alle Files einfach in das "libdir" in /etc/mcollective/server.cfg benannte Verzeichnis kopieren, mcollective neu starten und haben das neue Kommando

# mco puppet status 

* [ ============================================================> ] 1 / 1 

mcollective: Currently stopped; last completed run 15895 days 9 hours 38 minutes 02 seconds ago 

Summary of Applying: false = 1 
Summary of Daemon Running: stopped = 1 
Summary of Enabled: enabled = 1 
Summary of Idling: false = 1 
Summary of Status: stopped = 1 

Finished processing 1 / 1 hosts in 47.30 ms 

# mco puppet runonce

 * [ ==========================================================> ] 1 / 1




Finished processing 1 / 1 hosts in 591.58 ms