Load Balancing con HAProxy y keepalived

Este tema lo había preparado a las apuradas para la Fliso2010, en este ocasión y con mayor tiempo lo hice un poco más "explicativo".

lLoad Balancing con HAProxy y keepalived

En este caso voy a mostrar un mini-tutorial sobre load balancing (balanceo de cargas) en servidores Apache con las herramientas, HAProxy y keepalived.

La idea del balanceo de cargas es justamente, valga la redundancia, balancear para uno u otro servidor dependiendo de la carga que tenga cada uno.

Por ejemplo, suponiendo que tengamos dos servidores y uno de ellos está siendo atacado, la idea del load balancing es justamente que ante una petición, balancee hacia el servidor con menos carga.

Los "materiales" que voy a utilizar son:

Dos servidores Apache con la misma configuración
HAproxy instalado en otra pc
keepalived instalado en la misma pc que HAProxy

Para empezar; instalo debian en uno de los servidores, en este caso uso Virtualbox e instalo sólo la versión "consola", sin entorno gráfico porque no lo necesito.

Instalo Apache2:
apt-get install apache2

Edito el archivo apache2.conf:
nano /etc/apache2/apache2.conf

Busco esta línea:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

Y reemplazo el
%h

por:
%h{X-Forwarded-For}i

Nos quedaría entonces:
LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

Editamos el archivo default de sites-available
/etc/apache2/sites-available/default

Agregamos estas dos líneas para que luego cuando creemos el archivo check.txt no sea logueado por Apache:
SetEnvIf Request_URI "^/check.txt$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog

Reiniciamos Apache:
/etc/init.d/apache2 restart

y creamos el archivo check.txt
touch /var/www/check.txt

Listo, ya tenemos instalado y configurado nuestro primer Apache, ahora lo que vamos a hacer es clonar el disco así tenemos la misma configuración y no tenemos que instalar todo de cero..

Click acá para saber cómo clonar un disco de VirtualBox

Una vez que ya tenemos las dos máquinas con Apache configurado vamos a pasar a instalar haproxy:
apt-get install haproxy

Editamos nuestro haproxy.cfg
/etc/haproxy/haproxy.cfg

Esta es mi configuración, en este caso 192.168.1.4 y 192.168.1.5 son los dos servidores Apache.
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#debug
#quiet
user haproxy
group haproxy

defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

listen LoadBalancer 192.168.1.2:80
mode http
stats enable
stats auth dysloke:111222
balance roundrobin
cookie JSESSIONID prefix
option httpclose
option forwardfor
option httpchk HEAD /check.txt HTTP/1.0
server Servidor1 192.168.1.4:80 cookie A check
server Servidor2 192.168.1.5:80 cookie B check

Nótese que en la línea "listen LoadBalancer 192.168.1.2" ponemos nuestra ip donde está instalado haproxy.
Y en la línea "stats auth dysloke:111222" ponemos un usuario y contraseña para entrar al gestor de haproxy:

Ahora editamos el archivo haproxy y ponemos el valor ENABLED en 1 :
/etc/default/haproxy

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
# Add extra flags here.
#EXTRAOPTS=-de -m 16"

Listo, ya configuramos HAProxy ahora pasamos a instalar y configurar keepalived

Lo instalamos:
apt-get install keepalived

Editamos el archivo sysctl.conf
nano /etc/sysctl.conf

Agregamos esta línea al final:
net.ipv4.ip_nonlocal_bind=1

Corremos el comando:
sysctl -p

Ahora añadimos la configuración del keepalived:
nano /etc/keepalived/keepalived.conf

Agregamos esta configuración:
vrrp_script chk_haproxy { # Requires keepalived-1.1.13
script "killall -0 haproxy" # cheaper than pidof
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}

vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 101 # 101 on master, 100 on backup
virtual_ipaddress {
192.168.1.2
}
track_script {
chk_haproxy
}
}

Listo, ya tenemos todo configurado, hora de iniciar los servicios y verificar si funciona o no:
/etc/init.d/keepalived start

/etc/init.d/haproxy start

Ahora entramos a http://NUESTAIP/haproxy?stats
En mi caso: http://192.168.1.2/haproxy?stats

Nos va a pedir usuario y contraseña, ponemos los que configuramos en el haproxy.cfg

Dejo un par de imágenes para que vean más o menos cómo se ve el entorno gráfico del HAProxy (hacer click para verlas más grandes)


apache




Se ven los dos servidores funcionando bien, para probar si realmente hace el balanceo tendríamos que atacar alguno de los servidores, en este caso yo no voy a mostrar esa parte, a cada servidor apache le puse un html distinto, en uno dice "Servidor 1" y en el otro "Servidor 2" para diferenciar si realmente balancea.


Ahora entro a http://192.168.1.2 y noten que me va a enviar a cualquiera de los dos servidores.


Para ver cómo va enviandonos a uno u otro servidor, voy a ir haciendo refresh dentro del sitio 192.168.1.2




carga


debian




Ahora si hacemos muchas veces refresh "simulando visitas" van a ver cómo varían los números en nuestro haproxy:




Linux




Listo, espero que a alguien le sirva .. saludos !!

Fuentes de Información - Load Balancing con HAProxy y keepalived

Dar puntos
86 Puntos
Votos: 9 - T!score: 10/10
  • 4 Seguidores
  • 5.937 Visitas
  • 20 Favoritos

20 comentarios - Load Balancing con HAProxy y keepalived

@eltiolukee Hace más de 4 años
GENIAL este post. hace un par de años trate de hacer algo parecido en casa. En ese entonces recien salia la banda ancha de 3 megas, tenia speedy y por alguna razon a mi viejo se le ocurrio contratar los 6 meses gratis de arnet. Encontre un tutorial para hacer load balancing en BrazilFW, pero jamas funciono, y un tiempito despues sacamos arnet a la mierda...

Ah, si, vuelvo al punto Te copas haciendo un tuto para dejar una compu viejita con alguna distro liviana de linux (o lo qe te parezca mejor) para hacer load balancing?

Gracias por estos posts que tanto aportan
@profedemate2001 Hace más de 4 años
dejo 10+ gracias amigo
@cuervo2784 Hace más de 4 años
no manches aki en mexico segun estos tranzas banda ancha son 1mg
@eltiolukee Hace más de 4 años
dysloke dijo:Pero no te equivoques eltiolukee esto es balanceo de cargas en servidores, vos me parece que te estás refiriendo al load balancing de conexiones, que es juntar 2 conexiones y utilizarlas con distintos protocolos o acumular velocidades.
Si es eso, te prometo en unos días armar un post

si si, ya se, pero te decia porque me hiciste acordar xD

buenisimo, apenas lo publiques espero enterarme (a menos qe no funcione asi esto de ser seguidor, no la caze muy bien todavia, je)
@MukenioArg Hace más de 4 años
muy bueno viejo, mis 10 para vos
@blanconegro Hace más de 4 años
Alto post!
@UnthoughtKnown Hace más de 4 años
Te dejo mis 10, por tu gran aporte y la enorme cantidad de conocimiento que desplegaste en tu post.

@Bruno Hace más de 4 años
@meegrov Hace más de 4 años
muy buen post +10......
@fullvice Hace más de 4 años
muy buen post
@Geert Hace más de 4 años
Excelente

A favoritos
@raregazz2009 Hace más de 4 años
Muy buena info amigo.
+10 y mis felicitaciones.
@esegreto Hace más de 4 años
che esta buenisimo!!
gracias por compartir
@locomotor Hace más de 4 años
Muy bueno! Una pregunta, se podrá instalar el HAproxy y el keepalive en una de las pc's con server apache? Saludos!
@locomotor Hace más de 4 años
Ah perfecto, muchas gracias por la explicacion con graficos incluidos, queda clarísimo. Creo que hasta esta implementado en Openwrt, o sea que se podria probar en un router.
Saludos capo!