Localwürstchens Tagebuch

Ich muß nicht über meine Gefühle sprechen — ich blogge.

Ganglia: Installation, Konfiguration, Inbetriebnahme

| 0 comments

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, muß 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

Als root:

# 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"

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

Danach ausführen (als root):

# ldconfig -v

Konfiguration der Dienste

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:

Webinterface

Als erstes müssen wir herausfinden, wo unser apache 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:

# cat /etc/apache2/sites-enabled/000-default | grep -i documentroot
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 ausschließlich auf unserem master01, die 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, daß 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 angepaßt. Doch wichtig: ändert man diese Variable, muß man auch die conf.php des Webinterfaces 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-Dienste 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 angepaßt werden muß.

## 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, daß 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üßt Ihr das Netzwerk-Interface nehmen, das das für Euch richtige ist ;)

Anschließend kann auch dieser Dienst gestartet werden:

gmond starten

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

Daß 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 apache.

Author: localwurst

Ich bin… weiblich. Baujahr 1980. Systemadministrator. Hobby-Photograph. Handarbeits-Freak. Mama. »Die wallende Mähne[tm]«. Nachteule. Urban explorer.

Leave a Reply

Required fields are marked *.