Balanceo de Carga con HAProxy en Amazon EC2

Elegimos este balancer por experiencias anteriores positivas y por que el EBL de Amazon apesta, ya que hay un monton de informacion que perdes desde las ips donde te consultan.

primero empezemos por lo basico, obtener la ultima version estable de HAProxy desde Aca y instalar los paquetes necesarios para poder compilarlo

aptitude install build-essential

Lo estamos compilando de fuentes ya que la version(1.3.15 del 2009/12/30) que se encuentra en el repo oficial de debian es demaciado vieja y no podriamos aprobechar algunas funciones interesante que estan en la ultima version

Descomprimimos:
tar -zxvf haproxy-1.4.15.tar.gz

Entramos al dir:
cd haproxy-1.4.15

Compilamos:
make TARGET=linux26 ARCH=native
El TARGET lo podemos cambiar acorde al SO que estemos usando dentro del README tenes la lista soportada.
Tambien podes especificar la arquitectura para la cual lo vas a compilar, pero poniendo navite se hace para el kernel con que estas corriendo.

Ahora instalamos:
make install
Con este comando ya tenemos el ejecutable en /usr/local/sbin/haproxy

Lo siguiente es configurar y hacer los scripts de inicio
El archivo de configuracion lo pueden poner en /etc/haproxy/haproxy.cfg

global
log 127.0.0.1 local0 info
maxconn 8192
#debug
#quiet
ulimit-n 65536
user haproxy
group haproxy
#Opciones por default para todos los balancers
defaults
# Forma de logueo
log global
# modo de balanceo
mode http
option dontlognull
# Reintentos en caso de caida antes de cosiderar el nodo caido
retries 3
option redispatch
# Numero maximo de conexiones
maxconn 8192
# Tiempo maximo para estableser la conexion al backend
contimeout 5000
# Tiempo maximo para enviar la pagina al cliente
clitimeout 50000
# Tiempo maximo que tiene el servidor en resolver el pedido antes de enviarlo a otro nodo
srvtimeout 50000

listen webfarm 10.98.243.100:80
# Tipo de balancer
mode http
# Se activan las estadistivas
stats enable
# Datos de login para verlas
stats auth usuario:claverecontrasupersecreta
# Algoritmo de balanceo
balance roundrobin
# prefix de la cookie
cookie PHPSESSID prefix
option httpclose
# Tipo de log
option httplog
option redispatch
# Habilita el X-forwarder-for para el apache
option forwardfor
# Archivo para ver el keepalive de los nodos
option httpchk HEAD /check.txt HTTP/1.0

server sabato 127.0.0.1:80 cookie A check maxconn 4096 rise 2 fall 5 weight 1 inter 5000
server casares 10.84.125.234:80 cookie B check maxconn 4096 rise 2 fall 5 weight 1 inter 5000

listen webfarmSSL 0.0.0.0:443
mode tcp
option ssl-hello-chk
option tcplog
balance source
server sabato 10.98.243.100:444 check inter 2000 fall 3
server casares 10.84.125.234:444 check inter 2000 fall 3


Script de init para el haproxy (/etc/init.d/haproxy)
HAProxy default options (/etc/default/haproxy)

Una vez armados los files de configuracion, y puesto los scripts en el lugar donde tienen que ir ya podemos iniciar el haproxy

/etc/init.d/haproxy start

luego si queres que inicie automaticamente hacemos:

update-rc.d haproxy defaults

y ya podemos estar seguros que en el proximo inicio del equipo se levantara automaticamente el haproxy

Para ver como esta funcionando el haproxy y que esta atendiendo ingresamos desde el browser a la ip del balancer asi: http://ip-balancer/haproxy?stats, poniendo como login los datos que estan en la conf.

Como punto aparte, agrego lo que mas me costo hacer andar que es la configuracion del log para el haproxy, si tomaste como ejemplo para tu configuracion lo que puse en este post lo que tenes que hacer es editar estos files:
diff de como tiene que quedar el file: /etc/default/rsyslog

7c7
< RSYSLOGD_OPTIONS="-c3"
---
> RSYSLOGD_OPTIONS="-r"

diff de como tiene que quedar el file: /etc/rsyslog.conf

116a117,121
> #HAPROXY
> $ModLoad imudp
> $UDPServerRun 514
> $UDPServerAddress 127.0.0.1
> local0.* /var/log/haproxy_0.log

Logrotate
/etc/logrotate.d/haproxy

/var/log/haproxy*.log
{
rotate 4
daily
missingok
notifempty
create 644 root adm
compress
delaycompress
sharedscripts
postrotate
/etc/init.d/rsyslog restart>/dev/null 2>&1 || true
endscript
}

Espero que esto le sira a alguien y saludos a todos

Leave a Reply

*