BeoWurst Overview ganglia Cluster

wall < "Ganglia: Installation, Konfiguration, Inbetriebnahme"

Broadcast message from spillerm@unixe.de (pts/1) (Fr Sep 19 20:21:09 2008):
4
Diesen Beitrag schrieb ich vor 10 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

Um lustig bunte Bildchen unseres Clusters zu erhalten, installieren wir Ganglia. Für die Auswertung der Daten ist gmetad zuständig, der nur auf master01 zum Einsatz kommen wird; der gmond hingegen, der für das Einsammeln der Daten zuständig ist, muss auf jedem Host laufen, der überwacht werden soll.

Zuerst müssen die Abhängigkeiten aufgelöst werden; die Vorgehensweise ist für Debian und CentOS leicht unterschiedlich. Insbesondere benötigen wir auf master01 einen Apache mit PHP, da hier die Bildchen gemalt und angezeigt werden sollen.

Abhängigkeiten auf master01 installieren (Debian)

$ apt-get install librrd2 librrd2-dev rrdtool libxpat1 libexpat1-dev libapr1 libapr1-dev libconfuse0 libconfuse-dev apache2 php5

Sobald diese fehlerfrei installiert sind, nach /usr/src wandern, das Source-Paket von ganglia herunterladen, auspacken, kompilieren, installieren; wichtig ist hier die Option --with-gmetad, da der gmetad für das Sammeln und Auswerten der Daten zuständig sein wird:

Ganglia auf master01 installieren

$ cd /usr/src$ wget http://heanet.dl.sourceforge.net/sourceforge/ganglia/ganglia-3.1.0.tar.gz 
$ tar xvfz ganglia-3.1.0.tar.gz
$ cd ganglia-3.1.0
$ ./configure --prefix=/opt/local --with-gmetad 
$ make && make install

Besonderheit bei CentOS

Wie eingangs bereits erwähnt ist die Vorgehensweise bei auf einem CentOS-System eine leicht andere:

$ yum install apr.i386 apr-devel.i386 tar.i386 make.i386 libxml2-devel.i386 gcc-c++.i386 expat-devel.i386 gettext-devel.i386
$ export CC="/usr/bin/cc -I/opt/local/include -L/opt/local/lib"</code>
 
<span class="dropcaps">D</span>anach die Konfiguration für <tt>ldconfig</tt> beackern:
<pre lang="text">## Konfig: /etc/ld.so.conf.d/i486-linux-gnu.conf
/opt/local/lib
/lib
/usr/lib
/usr/local/lib

libconfuse gibt es nicht als RPM, das müssen wir also von Hand nach /opt/local bauen:

$ cd /usr/src
$ wget http://bzero.se/confuse/confuse-2.6.tar.gz
$ tar xvfz confuse-2.6.tar.gz
$ cd confuse-2.6
$ ./configure --prefix=/opt/local --enable-shared
$ make && make install
$ ldconfig -v

Konfiguration der Dienste

Die Konfigurationsdateien finden sich, sofern dies beim configure nicht anders angegeben wurde, unter /etc/ganglia und heissen gmond.conf (für den gmond, der die Daten liefert) und gmetad.conf (für den gmetad, der die gesammelten Daten auswertet und die Bildchen malt). Diese Dateien müssen wir anlegen.

Webinterface

Als erstes müssen wir herausfinden, wo unser apache2 seine Daten ablegt; da dieser Webserver nur genau diese eine Aufgabe hat im Moment — nämlich das Ganglia-Webinterface anzeigen — orientieren wir uns an der Konfiguration des Apache-Default und finden heraus, welches DocumentRoot es verwendet:

$ grep -i documentroot /etc/apache2/sites-enabled/000-default
   DocumentRoot /var/www/

Also legen wir uns innerhalb von /var/www einen Ordner an und schaufeln die benötigten Daten hinein:

$ mkdir /var/www/ganglia
$ cp -r /usr/src/ganglia-3.1.0/web/* /var/www/ganglia/

gmetad

gmetad dient der Auswertung der Daten und läuft ausschliesslich auf unserem master01, der auch das Webinterface zur Verfügung stellen wird.

$ mkdir /etc/ganglia
$ cd /etc/ganglia

Dann folgt die eigentliche Konfiguration des Dienstes:

## Konfig: /etc/ganglia/gmetad.conf
data_source "testcluster01" 30 localhost
scalable on
gridname "SpielCluster01"
trusted_hosts 127.0.0.1 10.16.0.0/24
setuid on
setuid_username "nobody"
xml_port 8651
interactive_port 8652
server_threads 10
rrd_rootdir "/var/ganglia/rrd"

Die Angabe in der letzten Zeile, rrd_rootdir, ist Geschmackssache; die ursprüngliche Installation sah vor, dass diese Daten in /var/lib/ganglia/rrds abgelegt werden; für meinen Geschmack haben veränderliche Daten dieser Art halt in /var/lib nichts verloren — deshalb habe ich das angepasst. Doch wichtig: ändert man diese Variable, muss man auch die conf.php des Webinterface anpassen!

## Konfig: /var/www/ganglia/conf.php
# Where gmetad stores the rrd archives.
$gmetad_root = "/var/ganglia";
$rrds = "$gmetad_root/rrd";

Wichtig ist dann, das Verzeichnis anzulegen, entsprechende Zugriffsrechte zu setzen — und den Dienst ein erstes Mal (als root!) zu starten:

$ mkdir -p /var/ganglia/rrd
$ chown -R nobody /var/ganglia
$ /opt/local/sbin/gmetad --debug=9
Going to run as user nobody  
Sources are ...
Source: [testcluster01, step 30] has 1 sources
        127.0.1.1
xml listening on port 8651 
interactive xml listening on port 8652
cleanup thread has been started
Data thread 262161 is monitoring [testcluster01] data source
        127.0.1.1
data_thread() got no answer from any [testcluster01] datasource
data_thread() got no answer from any [testcluster01] datasource

Sobald der Dienst gmetad gestartet ist, ist auch das Webinterface verfügbar; natürlich wird hier noch nicht viel angezeigt, da ja noch keine Daten einlaufen. Deshalb werden im nächsten Schritt die gmond-Instanzen konfiguriert und gestartet.

gmond

$ /opt/local/sbin/gmond -t > /etc/ganglia/gmond.conf

Dieser kleine Befehl erstellt und eine Basiskonfiguration für den gmond, die nur in wenigen Punkten angepasst werden muss.

## Konfiguration: /etc/ganglia/gmond.conf
...
globals {                    
  daemonize = yes              
  setuid = yes             
  user = compute
  debug_level = 0               
  max_udp_msg_len = 1472        
  mute = no             
  deaf = no             
  host_dmax = 0 /*secs */ 
  cleanup_threshold = 300 /*secs */ 
  gexec = no             
  send_metadata_interval = 0     
} 
...
cluster { 
  name = "SpielCluster01" 
  owner = "Bla and Fasel GmbH and Co. KG" 
  latlong = "N49.xxxxxx E6.xxxxxx" 
  url = "http://10.16.0.1/ganglia/" 
} 
...
host { location="master01" }
udp_send_channel { mcast_join = 224.0.0.0 port = 8649 ttl = 1 }
udp_recv_channel { mcast_join = 224.0.0.0 port = 8649 }
tcp_accept_channel { port = 8649 }
...

Netzwerkkonfiguration

Wie hier zu sehen ist, basiert das Setup der Dienste darauf, dass auf den Maschinen die entsprechende Multicast-Route gesetzt ist; für den Moment setzen wir diese von Hand und überall:

$ /sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

Um sie boot safe zu machen, kann man den Aufruf beispielsweise in die /etc/rc.local hineinschreiben. Und natürlich müsst ihr das Netzwerk-Interface nehmen, das das für euch richtige ist! Anschliessend kann auch dieser Dienst gestartet werden:

gmond starten

$ su - compute
$ /opt/local/sbin/gmond --debug=9

Dass das funktioniert zeigt sich an Meldungen wie »Processing a metric value message from« oder »Got a heartbeat message«; funktioniert es nicht wie gewünscht ist es wichtig, das syslog zu checken, ggf. auch das Error-Log des apache2.

4