Implementación de un clúster web mediante HAProxy

Dispositivos habituales para programación en clústers web

Los programadores de clústers web se dividen en solucioens de software y hardware. Entre las opciones de software, se destacan LVS, HAProxy y Nginx. LVS ofrece un alto rendimiento en entornos empresariales, pero su configuración puede ser compleja. HAProxy y Nginx, aunque con diferentes características, proporcionan alternativas flexibles para la distribución de carga.

Análisis de la aplicación de HAProxy

LVS muestra una gran capacidad para manejar cargas elevadas, pero presenta limitaciones como la falta de soporte para expresiones regulares, lo que impide separar contenido dinámico y estático. Por otro lado, HAProxy es un software proxy que garantiza alta disponibilidad y balanceo de carga, especialmente adecuado para sitios web con tráfico intensivo y capaz de gestionar miles de conexiones concurrentes en hardware estándar.

Principios de los algoritmos de programación en HAProxy

HAProxy emplea diversos algoritmos para distribuir solicitudes. Los más comunes incluyen:

  • RR (Round Robin): Distribuye las solicitudes de forma cíclica entre los nodos, como en un sistema de turnos.
  • LC (Least Connections): Dirige las solicitudes al nodo con menos conexiones activas, optimizando el uso de recursos.
  • SH (Source Hashing): Asigna solicitudes basadas en la dirección IP o cookies del cliente, manteniendo la continuidad de las sesiones, aunque puede generar desequilibrios en algunos casos.

Descripción general de HAProxy

HAProxy es una herramienta de código abierto escrita en C que actúa como proxy para aplicaciones TCP y HTTP. Su diseño basado en eventos permite manejar altas tasas de concurrencia con eficiencia, reduciendo la sobrecarga de memoria y bloqueos. Características notables incluyen soporte para múltiples algoritmos de balanceo, detección de salud avanzada, y capacidades de proxy transparente. Se diferencia de LVS y Nginx en su enfoque en capas 4 y 7, ofreciendo soluciones integrales para entornos complejos.

Pasos para configurar un clúster con HAProxy

Preparación del entorno

Supongamos un escenario con un servidor HAProxy en 10.0.0.10, dos servidroes Nginx en 10.0.0.20 y 10.0.0.30, y un cliente de pruebas. Desactiva el firewall y SELinux en todos los nodos.

systemctl stop firewalld
setenforce 0

Coloca el paquete de instalación de HAProxy, como haproxy-2.6.15.tar.gz, en el directorio /opt.

Compilación e instalación de HAProxy

Instala las dependencias necesarais y compila HAProxy desde el código fuente.

yum install -y pcre-devel zlib-devel gcc make
tar xzf /opt/haproxy-2.6.15.tar.gz -C /tmp/
cd /tmp/haproxy-2.6.15
make TARGET=linux-glibc ARCH=x86_64
make install PREFIX=/usr/local/haproxy

Ajusta el parámetro TARGET según la versión del kernel. Para kernels superiores a 2.6.28, utiliza linux-glibc o linux2628.

Configuración del servidor HAProxy

Crea y edita el archivo de configuración en /etc/haproxy/haproxy.cfg.

mkdir -p /etc/haproxy
cat > /etc/haproxy/haproxy.cfg << 'EOF'
global
    log /dev/log local0 info
    log /dev/log local0 notice
    maxconn 4000
    uid 1000
    gid 1000
    daemon

defaults
    log global
    mode http
    option httplog
    option dontlognull
    retries 3
    timeout connect 5s
    timeout client 30s
    timeout server 30s
    timeout http-keep-alive 10s
    timeout check 5s

listen web_app 0.0.0.0:8080
    option httpchk GET /health.html
    balance leastconn
    server backend1 10.0.0.20:80 check inter 1000 fall 2
    server backend2 10.0.0.30:80 check inter 1000 fall 2
EOF

Este ejemplo cambia el puerto de escucha a 8080, utiliza el algoritmo leastconn y ajusta los parámetros de verificación de salud. Los servidores backend están configurados para responder en el puerto 80.

Configuración del servicio HAProxy

Establece HAProxy como un servicio del sistema y habilítalo para el inicio automático.

cp /tmp/haproxy-2.6.15/examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
systemctl daemon-reload
service haproxy start

Despliegue de nodos del servidor

En los servidores Nginx, instala y configura Nginx para servir contenido de prueba. Para el servidor en 10.0.0.20:

yum install -y nginx
echo "Servidor Nodo A" > /usr/share/nginx/html/index.html
systemctl start nginx

Para el servidor en 10.0.0.30, sigue un procedimiento similar con un mensaje de página diferente.

Pruebas del clúster web

Accede a http://10.0.0.10:8080 desde un navegador y actualiza repetidamente para verificar la distribución de carga entre los nodos.

Redirección de registros en clústers de HAProxy

Para gestionar los registros de HAProxy de manera eficiente, redirígelos a archivos separados. Modifica el archivo de configuración de HAProxy y ajusta rsyslog.

vim /etc/haproxy/haproxy.cfg
global
    log /dev/log local0 info
    log /dev/log local0 notice

Crea un archivo de configuración para rsyslog en /etc/rsyslog.d/haproxy.conf.

cat > /etc/rsyslog.d/haproxy.conf << 'EOF'
if ($programname == 'haproxy' and $syslogseverity-text == 'info') then {
    action(type="omfile" file="/var/log/haproxy/info.log")
    stop
}
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then {
    action(type="omfile" file="/var/log/haproxy/notice.log")
    stop
}
EOF

Reinicia rsyslog y los servicios de HAProxy para aplicar los cambios. Los registros de información se almacenarán en /var/log/haproxy/info.log y los de aviso en /var/log/haproxy/notice.log.

Etiquetas: HAProxy Nginx LVS linux balanceo de carga

Publicado el 6-22 07:16