Balanceo de Carga con HAProxy (capa 4 – transporte)

HAProxy, trabaja principalmente con dos modos: “tcp”, también conocida como capa 4 (transporte), y “http”, también conocida como capa 7 (aplicación). En el modo de capa 4 (transporte), el tráfico HAProxy simplemente se direcciona entre dos lados. En el modo de capa 7, HAProxy analiza el protocolo, y puede interactuar con él, al permitir, bloquear, cambiar, añadir, modificar o eliminar cualesquiera contenidos en las solicitudes o respuestas, sobre la base de criterios arbitrarios.

En éste 1er instructivo se estará efectuando la configuración de un servicio de balanceo en modo capa 4 (transporte). El Balanceo de carga capa 4 (transporte), se basa en el reenvío del tráfico de los usuarios en función del rango de IP y el puerto (es decir, si llega una petición para http://yourdomain.com/, el tráfico será enviada al programa de fondo que maneja todas las solicitudes de yourdomain.com en el puerto 80). El balanceador de carga capa 4 es ideal para balancear el tráfico de forma sencilla.

Para la configuración de la solución se utilizarán los siguientes equipos:

– Un (01) servidor para la instalación y configuración HAProxy

  • Hostname: balanceo
  • IP salida: 200.44.32.12 (ficticia sólo ejemplo – IP de salida)
  • IP Interna: 192.168.57.2 (IP interna)

– Un (01) Equipo para servidor web A:

  • Hostname: Zabbix1
  • IP Interna: 192.168.57.3

– Un (01) Equipo para servidor web B:

  • Hostname: Zabbix2
  • IP Interna: 192.168.57.4


Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Los equipos servidor web A y servidor Web B deben tener instalado servidor web apache

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 8.0 (actualmente estable)

Aplicaciones:

  • rsyslogd versión 8.4.2
  • HA-Proxy version 1.6.9-2~bpo8+1

Nota: Los equipos servidor web A y servidor Web B deben tener instalado servidor web apache

Instalación:

1.- Editar el registro de repositorios:

root@balanceo:/# nano /etc/apt/sources.list

Nota: Se utiliza nano para editar el archivo, pero puede usar cualquier editor de textos

2.- Incluir la línea:

deb http://ftp.es.debian.org/debian jessie-backports main contrib non-free

3.- Instalar:

root@balanceo:/# aptitude update && aptitude -t jessie-backports install haproxy

4.- Verificar la instalación:

root@balanceo:/# haproxy -v
HA-Proxy version 1.6.9-2~bpo8+1 2016/10/06
Copyright 2000-2016 Willy Tarreau

Configuración

1.- Editar archivo de configuración:

root@balanceo:/# nano /etc/haproxy/haproxy.cfg

2.- Incorporar los siguientes cambios:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice

global

  • log 127.0.0.1 local0 -> log de las transacciones
  • log 127.0.0.1 local1 notice -> Envía eventos importantes

Nota: Los log será configurados en rsyslog

defaults
        mode    tcp
        option  tcplog
        maxconn 4096

defaults

  • mode tcp-> modo balanceo de carga capa 4 (transporte)
  • option tcplog-> formato del log para balanceo capa 4 (TCP)
  • maxconn 4096-> Fijar el número máximo de conexiones simultáneas en el frontend
frontend www
        bind 200.44.32.12:80
        default_backend zabbix-backend

frontend www : especifica una interfaz denominada “www”, la cual será utilizada para manejar el tráfico entrante. En esta sección se describen el conjunto de sockets de escucha que aceptan conexiones de cliente

  • bind 200.44.32.12:80-> Esto le dice a HAProxy que este frontend manejará el tráfico de red entrante en la dirección IP y puerto señalado
  • default_backend zabbix-backend-> Esto especifica que todo el tráfico de esta interfaz se remitirán a zabbix-backend, la cual se definirá en la próxima sección
backend zabbix-backend
        balance roundrobin
        mode tcp
        server zabbix1 192.168.57.3:80 check
        server zabbix2 192.168.57.4:80 check

backend zabbix-backend -> especifica un motor llamado “zabbix-backend”. En esta sección se describe un conjunto de servidores a los que el proxy se conectará para reenviar conexiones entrantes.

  • balance roundrobin-> Especifica el algoritmo de balanceo de carga, en éste caso “roundrobin”
  • modo TCP-> Especifica el modo de balanceo de carga, en éste caso capa 4 (transporte) o TCP
  • server zabbix1 192.168.57.3:80 check-> especifica un servidor back-end llamado “zabbix1”, la IP privada y el puerto que está escuchando. La opción “check” hace que el balanceador de carga realice periódicamente un chequeo de “salud” al servidor
  • server zabbix2 192.168.57.4:80 check-> especifica un servidor back-end llamado “zabbix2” …..
listen stats
        bind 200.44.32.12:8080
        mode http
        stats enable
        stats uri /
        stats realm Strictly\ Private
        stats auth admin:4dm1n123*

listen stats

  • bind 200.44.32.12:8080-> Define la dirección IP y puerto de escucha para frontend
  • mode http-> El servicio de estadistica de HAProxy “stats” sólo trabaja modo http
  • stats enable-> Habilitar la estadística de HAProxy
  • stats uri / -> Estable la ruta para el acceso
  • stats realm Strictly\ Private-> Habilitar las estadísticas y establecer dominio de autenticación, en éste caso el dominio se denomina Strictly Private
  • stats auth admin:4dm1n123*-> Habilitar las estadísticas con la autenticación y permitir el acceso a una cuenta, es éste caso usuario admin contraseña 4dm1n123*

3.- Verificar la construcción del archivo de configuración:

root@balanceo:/# haproxy -f /etc/haproxy/haproxy.cfg -c
configuration file is valid

4.- Iniciar el servicio:

root@balanceo:/# /etc/init.d/haproxy start
[ ok ] Starting haproxy (via systemctl): haproxy.service.

Configuración LOG

1.- Editar archivo configuración rsyslog para el servicio haproxy:

root@balanceo:/# nano /etc/rsyslog.d/49-haproxy.conf

2.- Incluir lo siguiente:

$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%n"
local0.=info -/var/log/haproxy.log;Haproxy
local0.notice -/var/log/haproxy-status.log;Haproxy
local0.* ~

3.- Editar archivo de configuración de rsyslog:

root@balanceo:/# nano /etc/rsyslog.conf

4.- Incluir lo siguiente:

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

5.- Reiniciar el servicio:

root@balanceo:/# /etc/init.d/rsyslog restart
[ ok ] Restarting rsyslog (via systemctl): rsyslog.service.

En éste punto desde el navegador web se puede accesar a la IP de servicio 200.44.32.12 y se podrá tener acceso a la página principal “balanceada” de los servidores web zabbix1 y zabbix2

URL: http://200.44.32.12

De igual forma se puede tener acceso a la estadística del servidor a través del navegador Web y la dirección http://200.44.32.12:8080

URL: http://200.44.32.12:8080

haproxy

Anexo

Archivo completo de configuración HAProxy:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin
        stats timeout 30s
        user haproxy
        group haproxy
        daemon
        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:$
        ssl-default-bind-options no-sslv3

defaults
        log     global
        mode    tcp
        maxconn 4096
        option  tcplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend www
        bind 200.44.32.12:80
        default_backend zabbix-backend

backend zabbix-backend
        balance roundrobin
        mode tcp
        server zabbix1 192.168.57.3:80 check maxconn 2048
        server zabbix2 192.168.57.4:80 check maxconn 2048

listen stats
        bind 200.44.32.12:8080
        mode http
        stats enable
        stats uri /
        stats realm Strictly\ Private
        stats auth admin:4dm1n123*

Enlaces:
an-introduction-to-haproxy-and-load-balancing-concepts
how-to-use-haproxy-as-a-layer-4-load-balancer-for-wordpress-application-servers-on-ubuntu-14-04
haproxy-dconv
how-to-enable-logging-of-haproxy-in-rsyslog
haproxy-configuration-errors
configuration.txt
balanceadores

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s