
## Konfig: /etc/ld.so.conf.d/i486-linux-gnu.conf /opt/local/lib /lib /usr/lib /usr/local/lib
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.
$ 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.
$ 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
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"
Danach die Konfiguration für ldconfig beackern:
## 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
Die Konfigurationsdateien finden sich, sofern dies beim configure nicht anders angegeben wurde, unter /etc/ganglia und heißen 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.
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 dient der Auswertung der Daten und läuft ausschließlich 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 — ich hab das mal 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.
$ /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 } ...
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! Anschließend kann auch dieser Dienst gestartet werden:
$ 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.