Cuando a uno le piden que se instale un servidor LAMP para correr una aplicación, no hay problema y es también sencillo. El problema empezó a surgir cuando me pidieron un servidor por cada aplicación. Mi primer propuesta fue hacer un servidor único con mas recursos para que de servicio a todas las aplicaciones que teniamos corriendo (y las que vendrán) y la segunda propuesta fue hacer 2 servidores con apache instalado y un tercero que haga un balanceo de carga ante el fallo de alguno de ellos. Todo esto corriendo en la última versión de Debian Jessie (hasta ahora)

Primero una imagen de que queremos lograr para que se entienda.

BalanceoApache

De todos los tutoriales que leí son todos mas o menos parecidos, pero el gran problema es que Debian cambia ligeramente en la configuración respecto al resto de las distribuciones.

Necesitamos lo siguiente:

  1. 2 servidores con Apache instalado (configurados exactamente igual)
  2. 1 servidor también con apache que va a funcionar como balanceador.

Descuento que todos sabemos como instalar un equipo con Debian (siempre en su última versión). Cuando tenemos los tres servidores nos logueamos por SSH e instalamos el apache y el interprete de php con sudo apt-get install apache2 php5
Nos logueamos a cada miembro del que será nuestro cluster y modificamos la siguiente linea vi /var/www/html/index.html La idea es que agreguemos información para identificar cual es el servidor que atiende la petición del balanceador. Por ejemplo podemos agregar la linea <h2>Server 01</h2>
Teniendo esto nos logueamos al servidor que va a funcionar como balanceador y habilitamos los mod’s «proxy» «proxy_balancer» y «proxy_http» de la siguiente manera:

  • sudo a2enmod proxy
  • sudo a2enmod proxy_balancer
  • sudo a2enmod proxy_http
  • sudo a2enmod lbmethod_byrequests

Ahora reiniciamos el apache para que tome los cambios sudo /etc/init.d/apache2 restart

Luego editamos el archivo (siempre en el servidor que funciona como balanceador): vi /etc/apache2/sites-enabled/000-default.conf para que nos quede parecido a este ejemplo.

<VirtualHost *:82>

ServerAdmin mail administrador
  ServerName glpi
 # DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

<Proxy balancer://mycluster>
  #APP-APWS01
  BalancerMember http://miembro1:80
  #APP-APWS02
  BalancerMember http://miembro2:80
  ProxySet lbmethod=byrequests
  </Proxy>
  <Location /balancer-manager>
  SetHandler balancer-manager
  </Location>
  ProxyPass /balancer-manager !
  Proxypass / balancer://mycluster/

</VirtualHost>

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

Explico el significado de alguno de los items:

  • ServerAdmin: correo electrónico de o los administradores-
  • DocumentRoot: carpeta donde se almacena la web (yo lo tengo comentado por que esta configuración es solo para el apache que funciona como balanceador)
  • ErrorLog: directorio donde se registran los errores del servidor
  • BalancerMember: Pongan especial atención en este item. Esto tiene que contener el numero de IP (o el equibalente a la entrada en un DNS) de los otros servidores que van a recibir las consultas.

Si todo va bien tendríamos que abrir un browser y poner la IP del balanceador y tendríamos que ver que nos responde alguno de los dos miembros del del cluster. Y para la prueba de fuego, apagamos el servidor que nos esta respondiendo y damos F5 al navegador. Van a ver que demora un poco en dar la respuesta y se pasa al otro servidor.

Ahora queda pendiente hacer que los dos (o mas) miembros del cluster puedan escribir en algún lugar al mismo tiempo y que no se bloquee entre si. También hay opciones para configurar mejor el balanceador y realice el balanceo por request (es decir que un pedido lo atiende el servidor 1 y el otro lo atiende el servidor 2)
Vamos a trabajar para hacer un video para que sea mas sencillo.