HAProxy · 5 min read · Nov 12, 2025
Balanceo de Carga del Servidor Web con HAProxy en Ubuntu 14.04
¿Qué es HAProxy?
HAProxy (High Availability Proxy) es un balanceador de carga de código abierto que puede balancear cualquier servicio TCP. HAProxy es una solución gratuita, muy rápida y confiable que ofrece balanceo de carga, alta disponibilidad y proxy para aplicaciones basadas en TCP y HTTP. Es particularmente adecuado para sitios web con tráfico muy alto y alimenta muchos de los más visitados del mundo.
Desde su existencia, se ha convertido en el estándar de facto de balanceadores de carga de código abierto. Aunque no se publicita, se utiliza ampliamente. A continuación se muestra un diagrama básico de cómo se ve la configuración: 
Instalando HAProxy
Estoy usando Ubuntu 14.04 y lo instalo con:
apt-get install haproxyPuedes verificar la versión con:
haproxy -vNecesitamos habilitar HAProxy para que se inicie con el script de inicio /etc/default/haproxy. Establece la opción ENABLED en 1 de la siguiente manera:
ENABLED=1Para verificar si este cambio se realizó correctamente, ejecuta el script de inicio de HAProxy sin ningún parámetro. Deberías ver lo siguiente:
$ service haproxy
reload restart start status stop HAProxy está ahora instalado. Ahora vamos a crear una configuración en la que tengamos 2 (dos) instancias de Apache Web Server y 1 (una) instancia de HAProxy. A continuación se muestra la información de la configuración:
Usaremos tres sistemas, creados virtualmente a través de VirtualBox:
Instancia 1 - Balanceador de Carga
Nombre de host: haproxy
SO: Ubuntu
IP Privada: 192.168.205.15
Instancia 2 - Servidor Web 1
Nombre de host: webser01
SO: Ubuntu con LAMP
IP Privada: 192.168.205.16
Instancia 2 - Servidor Web 2
Nombre de host: webserver02
SO: Ubuntu con LAMP
IP Privada: 192.168.205.17
Aquí está el diagrama de cómo se ve la configuración: 
Ahora configuremos HAProxy.
Configurando HAProxy
Haz una copia de seguridad del archivo original renombrándolo:
mv /etc/haproxy/haproxy.cfg{,.original}Crearemos nuestro propio archivo haproxy.cfg. Usando tu editor de texto favorito, crea el archivo /etc/haproxy/haproxy.cfg como:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 checkExplicación:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemonLa directiva de log menciona un servidor syslog al que se enviarán los mensajes de registro.
La directiva maxconn especifica el número de conexiones concurrentes en el front-end. El valor predeterminado es 2000 y debe ajustarse según la configuración de tu sistema.
Las directivas de usuario y grupo cambian el proceso de HAProxy al usuario/grupo especificado. Estos no deben ser cambiados.
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000La sección anterior tiene los valores predeterminados. La opción redispatch habilita la redistribución de sesiones en caso de fallos de conexión. Así que la persistencia de sesión se anula si una instancia del servidor web se cae.
La directiva retries establece el número de reintentos a realizar en una instancia del servidor web después de un fallo de conexión.
Los valores a modificar son las diversas directivas de tiempo de espera. La opción contimeout especifica el tiempo máximo para esperar a que un intento de conexión a una instancia del servidor web tenga éxito.
Las opciones clitimeout y srvtimeout se aplican cuando se espera que el cliente o el servidor reconozcan o envíen datos durante el proceso TCP. HAProxy recomienda establecer los tiempos de espera del cliente y del servidor al mismo valor.
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 checkEl bloque anterior contiene la configuración tanto para el frontend como para el backend. Estamos configurando HAProxy para escuchar en el puerto 80 para webfarm, que es solo un nombre para identificar una aplicación.
Las directivas de stats habilitan la página de estadísticas de conexión. Esta página se puede ver con la URL mencionada en stats uri, así que en este caso, es http://192.168.205.15/haproxy?stats, una demostración de esta página se puede ver aquí.
La directiva balance especifica el algoritmo de balanceo de carga a utilizar. Las opciones de algoritmo disponibles son:
- Round Robin (roundrobin),
- Round Robin Estático (static-rr),
- Menos Conexiones (leastconn),
- Fuente (source),
- URI (uri) y
- Parámetro de URL (url_param).
La información sobre cada algoritmo se puede obtener de la documentación oficial.
La directiva server declara un servidor backend, la sintaxis es:
server [:puerto] [param*] El nombre que mencionamos aquí aparecerá en los registros y alertas. Hay algunos parámetros más soportados por esta directiva y usaremos el parámetro check en este artículo. La opción check habilita las verificaciones de salud en la instancia del servidor web, de lo contrario, la instancia del servidor web se considera siempre disponible.
Una vez que hayas terminado de configurar, inicia el servicio HAProxy:
sudo service haproxy startProbando el Balanceo de Carga y la Conmutación por Error
Vamos a agregar el nombre del servidor en ambos archivos index.html predeterminados ubicados por defecto en /var/www/index.html.
En la Instancia 2 - Servidor Web 1 (webserver01 con IP- 192.168.205.16), agrega la siguiente línea:
sudo sh -c "echo Nombre de host: webserver01 (192.168.205.16)
>> /var/www/index.html"En la Instancia 3 - Servidor Web 2 (webserver02 con IP- 192.168.205.17), agrega la siguiente línea:
sudo sh -c "echo Nombre de host: webserver02 (192.168.205.17)
>> /var/www/index.html"Ahora abre el navegador web en la máquina local y navega a través de la IP de haproxy, es decir, http://192.168.205.15.
Cada vez que actualices la pestaña, verás que la carga se distribuye a cada servidor web. A continuación se muestra una captura de pantalla de mi navegador:
La primera vez que visito http://192.168.205.15, obtengo: 
Y la segunda vez, es decir, cuando actualizo la página, obtengo: 
También puedes verificar las estadísticas de haproxy visitando http://192.168.205.15/haproxy?stats.
Hay más cosas que puedes hacer con esta configuración. Algunas ideas incluyen:
- llevar uno o ambos servidores web fuera de línea para probar qué sucede cuando accedes a HAProxy
- configurar HAProxy para servir una página de mantenimiento personalizada
- configurar la interfaz web para que puedas monitorear visualmente las estadísticas de HAProxy
- cambiar el programador a algo diferente de round-robin
- configurar priorización/pesos para servidores particulares
¡Eso es todo!
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.