Zenload stabilisce se un server presente in una sua farm è attivo verificando se risponde sulla porta configurata al momento della creazione della farm.
Se però tra webserver e Zenload è presente un ulteriore server che funge da proxy (ad esempio per url rewriting o caching), Zenload deve essere configurato per bilanciare le chiamate sulla porta su cui è in ascolto il proxy, e non più su quella del web server: in caso il web server andasse in crash, Zenload non se ne accorgerebbe perchè il proxy continuerebbe a funzionare.
Per risolvere questo problema è stato creato uno script da inserire in cron, che ogni 5 minuti controlla se il web server è attivo: in caso risulti non attivo, ferma il servizio del proxy, facendo in modo che anche Zenload si accorga del blocco.
Script di esempio
Questo script è stato utilizzato in un setup così composto:
- 4 server Tomcat in ascolto sulla porta 8080
- 4 proxy server Varnish in ascolto sulla porta 6081 che effettuano url rewriting verso i 4 Tomcat
- Zenload configurato per bilanciare sulla porta 6081
Per controllare se Tomcat è attivo o meno viene utilizzato lo script di controllo check_tcp di Nagios
#!/usr/bin/perl
$now=`date +”%d-%m-%y alle %H:%M”`;
$to=’you@example.com’;
$H=`hostname -s`;
chomp ($H);
$from= ‘zenload@’ . $H . ‘.example.com’;
$subject=’Servizio Varnish Arrestato su host ‘ . $H . ‘ il ‘ . $now;
$fx=”/usr/lib64/nagios/plugins/check_tcp -H localhost -p 6081 -q q |grep Conne”;
$T=system “$fx”;
if ($T!=0) {
$ex=”/usr/lib64/nagios/plugins/check_tcp -H localhost -p 8080 -q q |grep Conne”;
$R=system “$ex”;
if ($R==0) {$D = `service varnish stop`;
open(MAIL, “|/usr/sbin/sendmail -t”);
## Mail Header
print MAIL “To: $to\n”;
print MAIL “From: $from\n”;
print MAIL “Subject: $subject\n\n”;
## Mail Body
print MAIL “Il servizio Varnish e\’ stato arrestato”;
close(MAIL);
}
}