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 haproxy

Puedes verificar la versión con:

haproxy -v

Necesitamos 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=1

Para 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 check

Explicación:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

La 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     50000

La 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 check

El 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 start

Probando 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!

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.