El haproxy es un proxy inverso que clusteriza o agrupa servicios en servidores diferentes mientras balancea la carga y se asegura de que los servicios están vivos de esta forma nunca le envía trabajo a servidores que han caído mientras reparte la carga de forma inteligente entre los servidores que están disponibles para despachar.
La siguiente configuración de ejemplo es un Squid Proxy Clusterizado.
El servidor 1 tiene salida por un enlace dedicado de Reduno/Uninet/Telmex
El servidor 2 por un enlace dedicado de CABLECOM
Este Haproxy agrupa a 2 proxy squid saliendo por diferentes enlaces cuando operan normalmente el tráfico es balaceado entre los 2 pero si alguno de los 2 cae el tráfico se redistribuye en el único proxy sobreviviente
La configuración de un HAproxy puede dividirse en bloques, el bloque generales y globales, el bloque de servicio de entrada y el bloque de salida para el bloque de entrada. Haproxy entiende del protocolo http pero como ahora casi todo es https es mejor usar usar TCP directamente.
Bloque de configuraciones globales.
global
log localhost local0
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
Bloque de servicio de entrada, se prepara al haproxy para escuchar por TCP el puerto 3128 ( simula ser el squid proxy original ) que es el puerto default de squid, se declara. La línea default_backend Cluster_Proxy nos dice cual es el grupo de servidores que dará salida al servicio de entrada
frontend Entrada_al_Proxy
bind 10.10.10.1:3128
mode tcp
default_backend Cluster_Proxy
El bloque de grupo de salida
backend Cluster_Proxy
mode tcp
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
server servidor1 10.10.20.1:3128 maxconn 3000 check
server servidor2 10.10.30.22:3128 maxconn 3000 check
El bloque de monitoreo, el haproxy entrega una consola web para ver el estado del los servicios de entrada y los grupos de salida, ver que servidores operan correctamente o cuales han caido
listen stats 10.10.10.1:8081
mode http
stats enable
stats hide-version
stats realm Balanceador Haproxy Estadisticas
stats uri /
stats refresh 5s
stats auth admin:clave
Archivo completo
global
log localhost local0
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 Entrada_al_Proxy
bind 10.10.10.1:3128
mode tcp
default_backend Cluster_Proxy
backend Cluster_Proxy
mode tcp
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
server servidor1 10.10.20.1:3128 maxconn 3000 check
server servidor2 10.10.30.22:3128 maxconn 3000 check
listen stats 10.10.10.1:8081
mode http
stats enable
stats hide-version
stats realm Balanceador Haproxy Estadisticas
stats uri /
stats refresh 5s
stats auth admin:clave
Imagen de la consola
Vídeo del tema
El log del squid es del balanceador o llega la IP del cliente?
Llega la del haproxy
Se puede enviar la ip del cliente al proxy, o hay alguna forma de manejar las acl desde el haproxy, gracias de antemano.
Que diferencia hay entre haproxy y varnish. Haz usado varnish? Crees que varnish sea mejor a haproxy. Saludos y Gracias