Balanceo de carga con Haproxy

De Manuais Informática - IES San Clemente.
Revisión del 20:44 23 nov 2014 de Veiga (discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Con HAPROXY podemos montar un servidor frontal que proporcione balanceo de carga en el acceso a nuestros servidores web.

Si queremos redimensionar nuestra web, podríamos tener instalados varios servidores web encargados de gestionar nuestro dominio y como frontend de los mismos un equipo con haproxy instalado encargado de repartir las peticiones entre los distintos servidores web.

Para instalar haproxy en Debian:

# Instalación de haproxy en Debian
apt-get update
apt-get upgrade
apt-get install haproxy

# Una vez instalado, configuramos haproxy:
nano /etc/haproxy/haproxy.cfg

# Ejemplo de contenido de un fichero haproxy:
# Los servidores locales tienen las IP's 192.168.220.10 y 192.168.220.20 respectivamente.
# Esta configuración estaría en el servidor frontal encargado de gestionar todas las peticiones externas a la web.

global
        log     /dev/log local0
        chroot  /var/lib/haproxy
        user    haproxy
        group   haproxy
        daemon

defaults
        log     global
        timeout client 100s
        timeout server 100s
        timeout queue  60s
        timeout connect 5s
        timeout http-keep-alive 1s
        timeout http-request 4s  # slowloris protection

        option  tcp-smart-accept
        option  tcp-smart-connect
        option  abortonclose
        option  redispatch
        option  contstats

        maxconn 6000
        retries 3

frontend Accesos_HTTP
        bind    *:80
        mode    http
        option  httpclose
        option  http-server-close
        option  forwardfor

        # Protección DDOS
        stick-table type ip size 100k expire 30s store conn_rate(3s)

        # Cortar la conexión si el cliente hace más de 10 peticiones
        tcp-request connection reject if { src_conn_rate ge 10 }
        tcp-request connection track-sc1 src

        http-request set-header X-Forwarded-Port %[dst_port]
        http-request add-header X-Forwarded-Proto https if { ssl_fc }
        option httplog

        # Reparto de tráfico estático directamente hacia los servidores web.
        use_backend Granja_puerto_80 { path_end .jpg .png .gif .css .js }

        default_backend Granja_puerto_80

frontend Accesos_HTTPS
        bind    *:443
        mode    tcp
        default_backend Granja_puerto_443

backend Granja_puerto_80
        mode    http
        balance roundrobin
        server mestre1 192.168.220.10:80 maxconn 400 check
        server mestre2 192.168.220.20:80 maxconn 400 check

backend Granja_puerto_443
        mode    tcp
        balance roundrobin
        stick-table type ip size 200k expire 30m
        stick on src
        server servidor1 192.168.220.10:443 maxconn 400 check
        server servidor2 192.168.220.20:443 maxconn 400 check

# Acceso a estadisticas de haproxy
listen stats :4443
        mode    http
	stats   enable
        stats   hide-version
        stats   realm Balanceador Haproxy\ Estadisticas
        stats   uri /
        stats   refresh 5s
        stats   auth admin:xxxxxxxxxxx

Más información sobre parámetros y configuraciones en: http://www.haproxy.org/

--Veiga (discusión) 20:40 23 nov 2014 (CET)