:::: MENU ::::

Apache HTTP Server: Load Balancer

Apache HTTP Server tiene un módulo que nos permite el balanceo de carga. Vamos a ver de qué manera se usa.

Introducción

Apache HTTP Server tiene varios módulos con los cuales se pueden hacer muchas cosas como, por ejemplo, sobreescribir la dirección URL, usar seguridad mediante SSL o balancear la carga entre varias máquinas. El balanceo de carga consiste en que nosotros usamos una única dirección URL e internamente se redirige el tráfico a diferentes máquinas que contienen, cada una, la misma página Web.

Nota: En este ejemplo usaremos dos páginas Web diferentes únicamente a modo de demostración del balanceo.

Requisitos previos

Es necesario:

  • Tener instalado y funcionando un Apache HTTP Server.
  • Disponer de varias localizaciones con dos páginas Web.

Sobre las localizaciones: Podrían ser máquinas independientes, cada una con su dirección URL. En nuestro caso, tendremos dos páginas Web, casi idénticas, situadas, respectivamente, en:

/var/www/html/webpage-1/index.html

y en:

/var/www/html/webpage-2/index.html


Es importante que en esos ficheros el contenido sea diferente, porque de otra manera no podremos apreciar el balanceo.

Ejemplo de ficheros:

webpage-1/index.html

<html>
  <head>
    <title>First Web page</title>
  </head>

  <body>
    <h1>This is the first Web page.</h2>
  </body>
</html>

webpage-2/index.html

<html>
  <head>
     <title>Second Web page</title>
  </head>
  <body>
    <h1>This is the second Web page.</h2>
  </body>
</html>

Instalación

El módulo de balanceo se llama “proxy_balancer” y para instalarlo hay que introducir estos comandos:

a2enmod proxy
a2enmod proxy_http
a2enmod lbmethod_bytraffic
a2enmod proxy_balancer

Como podemos ver, es necesario instalar otros módulos previamente.

Configuración

Por regla general, casi todo el mundo configura Apache en el siguiente fichero:

/etc/apache2/apache2.conf

Personalmente yo prefiero configurar las cosas por separado porque así hay menos distracciones. Para configurar los módulos se usan los ficheros específicos, que están situados en la carpeta:

/etc/apache2/mods-enabled

Editamos el fichero

/etc/apache2/mods-enabled/proxy_balancer.conf

y lo dejamos así:

<IfModule mod_proxy_balancer.c>

    <Proxy "balancer://myset">
            BalancerMember "http://localhost/webpage-1/index.html"
            BalancerMember "http://localhost/webpage-2/index.html"
            Order deny,allow
            Allow from all
            ProxySet lbmethod=byrequests
    </Proxy>

    ProxyPreserveHost On

    <Location "/">
            ProxyPass "balancer://myset/"
            ProxyPassReverse "balancer://myset/"
    </Location>

</IfModule>

vim: syntax=apache ts=4 sw=4 sts=4 sr noet

De esta manera:

  1. BalanceMember indica las localizaciones sobre las que balancear.
  2. ProxySet lbmethod indica, en este caso, que cada petición tiene que hacerla a una localización diferente.
  3. Location “/” indica que, cuando carguemos la página http://localhost/ se ejecutará el balanceo.

Prueba

Reiniciamos el servidor para que lea la nueva configuración con:

service apache2 restart

Cargamos la página inicial de nuestro Apache HTTP Server:

http://localhost/

Y veremos que cada vez que recarguemos la página el contenido de la página cambia.


So, what do you think ?