Implementación de Balanceo de Carga con HAProxy

Implementación de un Clúster de Balanceo de Carga con HAProxy

  1. Introducción a HAProxy

  • Soporte para balanceo de carga en capas 4 y 7
  • Funcionalidades de ACL para control de acceso
  • Interfaz de monitoreo gráfico
  • Múltiples algoritmos de programación
  1. Algoritmos de Balanceo

  1. Archivo de Configuración Principal

  1. Implementación Práctica de Balanceo de Carga

1. Preparación del Entorno

  • Cuatro servidores web y un servidor proxy
# Servidores 61 62 63 64

# Servidor proxy en puerto 80



  • Editar páginas web en cada uno de los cuatro servidores

2. Configuración del Sevridor Proxy

[root@proxy haproxy]# yum -y install haproxy.x86_64 


[root@proxy haproxy]# cat haproxy.cfg 
#---------------------------------------------------------------------
# Ejemplo de configuración para una aplicación web posible. Consulte
# las opciones de configuración completas en línea.
#
#   https://www.haproxy.org/download/1.8/doc/configuration.txt
#
#---------------------------------------------------------------------

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    user        haproxy
    group       haproxy
    daemon
    maxconn     4000

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    retries                 3
    timeout http-request    5s
    timeout queue           1m
    timeout connect         5s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 5s
    timeout check           5s
    maxconn                 3000

frontend principal
    bind *:80
    default_backend         backend_http

backend backend_http
    balance     roundrobin
    servidor  nodo1 127.0.0.1:5001 check
    servidor  nodo2 127.0.0.1:5002 check
    servidor  nodo3 127.0.0.1:5003 check
    servidor  nodo4 127.0.0.1:5004 check(Realiza verificación de salud, configurado en la sección default)
[root@proxy haproxy]# 




  • Descripción de parámetros específicos
frontend principal  # Nombre de la sección frontend, modificable
    bind *:80  # Puerto de escucha en el servidor proxy
    default_backend         backend_http # Enrutamiento de solicitudes al grupo backend


backend backend_http  # Grupo de servidores web
    balance     roundrobin  # Algoritmo de balanceo, round-robin
    servidor  nodo1(Nombre del servidor web) 127.0.0.1:5001 check
    servidor  nodo2 127.0.0.1:5002 check
    servidor  nodo3 127.0.0.1:5003 check
    servidor  nodo4 127.0.0.1:5004 check



  • Archivo de configuración modificado
frontend principal
    bind *:80
    default_backend         backend_http

backend backend_http
    balance     roundrobin
    servidor  nodo1 192.168.200.61:80 check
    servidor  nodo2 192.168.200.62:80 check
    servidor  nodo3 192.168.200.63:80 check
    servidor  nodo4 192.168.200.64:80 check



  • Iniciar el servicio
[root@proxy haproxy]# systemctl restart haproxy.service 

[root@proxy haproxy]# netstat -pant|grep haproxy
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2563/haproxy   




3. Pruebas desde el Cliente

  • Aceder al servidor proxy
  • El puerto 80 del servidor proxy lee su archivo de configuración y envía solicitudes al grupo back end
  • Distribuyendo entre los servidores backend
[root@proxy haproxy]# curl 192.168.200.80
63
[root@proxy haproxy]# curl 192.168.200.80
64
[root@proxy haproxy]# curl 192.168.200.80
61
[root@proxy haproxy]# curl 192.168.200.80
62




  1. Separación de Tráfico con ACL en HAProxy

  • Enviar solicitudes del cliente a diferentes grupos de servidores para balanceo de carga
  • Dividir los cuatro servidores en dos grupos de trabajo
  • Solicitudes HTML procesadas por servidores 61,62
  • Solicitudes PHP (dinámicas) manejadas por servidores 63,64
  • Configurar diferentes páginas según el tipo de solicitud
  • Controlar las solicitudes para dirigirlas a servidores específicos

1. Configurar nginx para procesar scripts PHP

# Detener servicios apache en servidores 63 y 64

# Configurar nginx en servidores 63,64

# Implementar procesamiento de scripts PHP

# Permitir acceso a index.php
        location / {
            root   html;
            index  index.php index.html index.htm;
        }

# Descomentar
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

# Configurar igual en servidor 64

# Instalar paquetes necesarios
[root@httpd-63 yum.repos.d]# yum -y install php php-devel php-fpm

# Modificar archivo para usar escucha en puerto 9000
[root@httpd-63 php-fpm.d]# pwd
/etc/php-fpm.d

 38 ;listen = /run/php-fpm/www.sock
 39 listen = 127.0.0.1:9000

# Iniciar servicio php-fpm

[root@httpd-63 php-fpm.d]# netstat -pant|grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      3748/php-fpm: maste 

# Crear página PHP

[root@httpd-63 html]# pwd
/usr/share/nginx/html
[root@httpd-63 html]# cat index.php 
<?php
echo "192.168.200.63\n";
?>

# Configurar igual en servidor 64




2. Crear Páginas Web

# Configurar en servidores 61,62 archivo a.html (además de página principal)

# Con contenido diferente
[root@httpd-62 html]# cat a.html 
62 a

# Configurar en servidores 63,64 páginas .php

[root@httpd-63 html]# cat a.php 
<?php
echo "63 a \n";

?>



3. Configurar ACL en HAProxy

  • Múltiples ACLs identificadas por nombres
frontend principal
    bind *:80
    default_backend         backend_http

    acl paginas_html(nombre) path_end(basado en extensión de archivo)  .html 
    acl paginas_php path_end .php

    use_backend grupo_html if paginas_html 
    use_backend grupo_php if paginas_php

# Solicitudes a localhost se envían a servidores 61 62
backend backend_http  
   balance     roundrobin
   servidor  nodo1 192.168.200.61:80 check
   servidor  nodo2 192.168.200.62:80 check

# Solicitudes a localhost/a.html se envían a servidores 61 62
backend grupo_html
    balance     roundrobin
    servidor  nodo1 192.168.200.61:80 check
    servidor  nodo2 192.168.200.62:80 check

# Solicitudes a localhost/a.php se envían a servidores 63 64
backend grupo_php
    balance     roundrobin
    servidor  nodo3 192.168.200.63:80 check
    servidor  nodo4 192.168.200.64:80 check




4. Pruebas desde el Cliente

[root@proxy haproxy]# curl localhost
61
[root@proxy haproxy]# curl localhost
62
[root@proxy haproxy]# curl localhost/a.html
61 a
[root@proxy haproxy]# curl localhost/a.html
62 a
[root@proxy haproxy]# curl localhost/a.php
64 a 
[root@proxy haproxy]# curl localhost/a.php
63 a 



5. Puntos Clave

  • Las ACLs tienen múltiples reglas de coincidencia, path_end coincide con extensiones de archivo
  • También existen otros tipos de ACL:
  • ACL basada en dirección IP
  • ACL basada en ruta URL
  • ACL basada en puerto
  • ACL basada en cabeceras de solicitud
  • Entre otros
  1. Activar la Interfaz Web de HAProxy ====================================
  • Modificar el archivo de configuración para habilitar la interfaz web
  • Proporciona una página de estado con estadísticas de acceso
  • Utiliza una sección listen para definir el puerto
# Agregar al final del archivo

listen pagina_monitor
        bind 0.0.0.0:8088  # Puerto de escucha
        mode http
        stats refresh 5s  # Intervalo de actualización
        stats uri /stats
        stats auth admin:123456

# Reiniciar servicio haproxy



  • Acceso desde navegador
192.168.200.80:8088/stats



  • Observar los colores diferentes que indican estados distintos
  • Detener servicio en servidor 61 para ver cambio a color rojo

Etiquetas: HAProxy balanceo de carga acl Nginx linux

Publicado el 7-26 12:37