Un Balanceador de carga fundamentalmente es un dispositivo de hardware o software que se pone al frente de un conjunto de servidores que atienden una aplicación y, tal como su nombre lo indica, asigna o balancea las solicitudes que llegan de los clientes a los servidores usando algún algoritmo (desde un simple round-robin hasta algoritmos más sofisticados).

 

Esquema en virtualbox o KVM

Es importante saber que la red externa (172.22.0.0/16) puede variar según nuestro direccionamiento.

Configuraciones previas en apache1 y apache2

Deshabilitar la opción KeepAlive en /etc/apache2/apache2.conf para realizar la evaluación del rendimiento sin la opción de reutilización de conexiones

Info! Este ajuste no es estrictamente necesario (y sería desaconsejable en un entorno de producción real), pero facilita las pruebas manuales dado que permite detectar inmediatamente el “cambio” de destino resultado del balanceo de carga manteniendo la opción por defecto, en las pruebas manuales desde el navegador sería necesario esperar 5 segundos (el time out de keep alive) antes de recargar la página y ver el efecto del reparto de carga.

Creamos los .html del sitio web

Debemos incluir una indicación del servidor real que está sirviendo una petición, de modo que sea posible “diferenciarlos” en las pruebas manuales con el navegador, por lo tanto seria asi:

Apache1

Apache2

Creamos sleep.php en ambas maquinas

Comprobación funcionamiento script

Evaluar rendimiento de Apache sin balanceo

Habilitar en balanceador la redirección de puertos para que sea accesible el servidor Apache de la máquina apache1 [10.10.10.11] empleando el siguiente comando iptables:

Info! La regla iptables establece una redirección del puerto 80 de la máquina balanceador al mismo puerto de la máquina apache1 para el tráfico procedente de la red externa (interfaz de entrada eth0).

Y reiniciamos el servicio en apache1 systemctl restart apache2

E intentamos acceder desde el cliente con la ip del balanceador

Prueba contenido estatico

Para ello vamos a utilizar la herramienta Apache Benchmark

Esto envía 2000 peticiones HTTP sobre la URI “estática”, manteniendo, respectivamente, 10 y 50 conexiones concurrentes.

Prueba Scripts PHP

Se usará un script PHP (sleep.php) que introduce un retardo mediante un bucle “activo” de 2000000 interaciones que busca forzar el uso de CPU con cálculos de hashes SHA1 y concatenaciones de cadenas:

Envía 250 peticiones HTTP sobre la URI “dinámica”, esto puede tardar aprox entre 5-7 minutos.

Configurar y evaluar balanceo de carga con dos servidores

Primero vemos las reglas iptables, es decir, la regla creada anteriormente iptables -L PREROUTING -t nat y eliminamos las reglas iptables -t nat -F

Instalamos haproxy en la maquina balanceador apt install haproxy

Configurar HAproxy en balanceador (Sin soporte de sesiones persistentes)

Y reiniciamos el servicio systemctl restart haproxy.service

Comprobacion funcionamiento balanceador

Una vez reiniciado, vamos a realizar las pruebas para ello vamos a utilizar apt install w3m desde el cliente y accedemos con la ip del balanceador w3m 192.168.1.41 podemos comprobar que si recargamos o accedemos, salimos y accedemos la pagina ha cambiado entre los dos servidores apache configurados.

Pruebas de balanceador de carga

Carga sin balanceador

Carga con el balanceador de carga iniciado

Podemos observar como al realizar la prueba con el balanceador de carga instalado como se reduce el tiempo de respuesta y como baja la media dado a que empieza a repartir las peticiones a uno y otro servidor.

Estadísticas haproxy

Podemos obtener una representación de las estadísticas del balanceador HAProxy (pedirá un usuario y un password, ambos cda)