miércoles, 23 de julio de 2014

Balanceo de Carga y Alta Disponibilidad en un Webserver con Apache y Perl

Tenemos 2 servidores webs cada uno escuchando en el mismo puerto la misma aplicacion.

El script irá distribuyendo aleatoriamente entre ambos servidores, en caso que alguno tenga el puerto bajo, es decir que la aplicación esté baja reenviará las peticiones al webserver que esté arriba.

En el index por default del apache configuramos lo siguiente (quitar los espacios después del signo <)

ServerBalance# vi /var/www/index.html
< html>
< FORM ACTION="/cgi-bin/index.cgi">
< /html>

Verificamos que en el VirtualHost de apache tengamos habilitada la ejecución de scripts cgi:

ServerBalance# vi /etc/apache2/sites-available/default
....
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
....

Reiniciamos el apache:

ServerBalance# /etc/init.d/apache2 reload


Creamos un script en perl en la ruta donde tenemos el cgi-bin y ponemos lo siguiente:

ServerBalance# vi /usr/lib/cgi-bin/redirect.pl
#!/usr/bin/perl
$lower_limit = 1;
$upper_limit = 3;
my $random_number = int(rand($upper_limit-$lower_limit)) + $lower_limit;
if ($random_number == 1)
{
  $result = `nmap -sT -P0 server01 -p 80|grep open`;
  if ($? == 0)
  {
   print "Location: http://server01:80/app\n\n";
  }
   else
   {
    print "Location: http://server02:80/app\n\n";
   }
}
else
{
  $result = `nmap -sT -P0 server02 -p 80|grep open`;
  if ($? == 0)
  {
   print "Location: http://server02:80/app\n\n";
  }
   else
  {
   print "Location: http://server01:80/app\n\n";
  }
}


No hay comentarios: