Ich benutze seit einer ganzen Weile den Loadbalancer
pound, da dieser sehr wenige Ressourcen benötigt, selbst wenn die Seite stark frequentiert ist. Außerdem ist es sehr bequem, da dieser auch als SSL-Proxy arbeitet, d.h. man muss die Keys nur auf dem Loadbalancer einspielen und die Backends arbeiten normal mit HTTP auf Port 80 weiter. Alles in Allem eine sehr runde Sache, die ich ruhigen Gewissens weiterempfehlen kann.
Natürlich will ein Statistik-Freak wie ich dann auch wissen, wieviele Requests pro Sekunde der LB abarbeiten muss. Pound bietet zwar mit dem Tool
poundctl seit einigen Versionen ein Kommandozeilentool, mit dem man die Vitalität der Backende sowie die Anzahl der aktiven Sessions monitoren kann, die Requests pro Sekunde lassen sich aber nicht ohne Weiteres herausfinden. Also musste eine kleine Scriptlösung her, um die Werte für das Monitoring-Tool
cacti aufzubereiten. Wenn man Logging aktiviert hat (pound unterstützt verschiedene Loglevel, u.a. auch Apache-Style), ist das kein Problem. Allerdings wird das Logfile sehr groß, wenn man viele Requests hat. Im Apache-Format schnell mal 10 GByte/Tag - und i.d.R. hat man in einem LB nicht gerade 500er Platten verbaut
Also das Logging ein wenig reduziert (Loglevel 3 in der Config), so dass nur IP und Aufruf in je einer Zeile geloggt werden. Damit halbiert man die Größe des Logfiles ca. um die Hälfte. Mit einem kleinen PHP-Script kann man dann einfach aus der
/var/log/daemon.log die Anzahl der Zeilen je Sekunde bzw. Minute herausfinden. Und so sieht das Ganze dann aus:
$tstamp = date("H:i", strtotime("-1 minute"));
$call = "tail -n 200000 /var/log/daemon.log|grep $tstamp|wc -l";
$num = `$call`;
$num = $num / 60;
echo round($num);
Damit werden die Requests pro Minute ermittelt und dann durch 60 geteilt, um den Wert je Sekunde zu bekommen. Wie man das Script dann ganz einfach in cacti einbindet, wird
hier beschrieben.
Nach meiner Veröffentlichung dieses kleinen Codefetzens in der pound-Mailingliste hat Bob Apthorpe sich gleich noch hingesetzt und das Ganze in Perl gebaut, so dass man es einfach als Daemon laufen kann. Sein Script samt Doku ist
hier zu finden. Beide Lösung geben die gleichen Werte zurück, so dass es eigentlich keine Rolle spielt, welches man verwendet. Ich nutze die PHP-Lösung und frage einfach von meinem Cacti-Server mit einem weiteren Miniscript via
ssh loadbalancer php script.php aller 5 Minuten den Wert ab.
Und so sieht das Ganze dann als Graph im Cacti aus: