GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Equilibrio de carga del servidor web con HAProxy en Ubuntu 14.04

¿Qué es HAProxy?

HAProxy (proxy de alta disponibilidad) es un equilibrador de carga de código abierto que puede equilibrar la carga de cualquier servicio TCP. HAProxy es una solución gratuita, muy rápida y fiable que ofrece equilibrio de carga, alta disponibilidad y proxy para aplicaciones basadas en TCP y HTTP. Es especialmente adecuado para sitios web de muy alto tráfico y potencia muchos de los más visitados del mundo.

Desde su existencia, se ha convertido en el equilibrador de carga de código abierto estándar de facto. Aunque no se anuncia a sí mismo, pero se usa 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 por:

apt-get install haproxy

Puede comprobar la versión por:

haproxy -v


Necesitamos habilitar HAProxy para que se inicie mediante el script de inicio /etc/default/haproxy. Establezca la opción HABILITADO en 1 como:

ENABLED=1

Para verificar si este cambio se realiza correctamente, ejecute el script de inicio de HAProxy sin ningún parámetro. Debería ver lo siguiente:

$ service haproxy <press_tab_key>
reload   restart  start    status   stop

HAProxy ya está instalado. Ahora creemos una configuración en la que tenemos 2 (dos) instancias de servidor web Apache y 1 (una) instancia de HAProxy. A continuación se muestra la información de configuración:

Usaremos tres sistemas, generados virtualmente a través de VirtualBox:

Instancia 1:Equilibrador 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

Este es el diagrama de cómo se ve la configuración:

Ahora configuremos HAProxy.

Configuración de HAProxy

Haga una copia de seguridad del archivo original cambiándole el nombre:

mv /etc/haproxy/haproxy.cfg{,.original}

Crearemos nuestro propio archivo haproxy.cfg. Con su editor de texto favorito, cree 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 registro menciona un servidor syslog al que se enviarán los mensajes de registro.
La directiva maxconn especifica el número de conexiones simultáneas en el front-end. El valor predeterminado es 2000 y debe ajustarse de acuerdo con la configuración de su sistema.
Las directivas de usuario y grupo cambian el proceso HAProxy al usuario/grupo especificado. Estos no deben cambiarse.

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 de reenvío permite la redistribución de la sesión en caso de fallas en la conexión. Por lo tanto, la permanencia de la sesión se anula si una instancia del servidor web deja de funcionar.
La directiva de reintentos establece el número de reintentos a realizar en una instancia de servidor web después de una falla de conexión.
Los valores a modificar son las distintas directivas de tiempo de espera. La opción contimeout especifica el tiempo máximo de espera para que un intento de conexión a una instancia de servidor web tenga éxito.
clitimeout y srvtimeout se aplican cuando se espera que el cliente o servidor reconozca o envíe datos durante el proceso TCP. HAProxy recomienda establecer los tiempos de espera del cliente y del servidor en el 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 stats habilitan la página de estadísticas de conexión. Esta página se puede ver con la URL mencionada en stats uri, por lo que en este caso, es http://192.168.205.15/haproxy?stats se puede ver una demostración de esta página aquí.
La directiva de equilibrio especifica el equilibrio de carga algoritmo a utilizar. Las opciones de algoritmo disponibles son:

  • Round Robin (todo contra todos),
  • Round Robin estático (static-rr),
  • Conexiones mínimas (leastconn),
  • Fuente (fuente),
  • 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 del servidor declara un servidor backend, la sintaxis es:

server <server_name> <server_address>[:port] [param*]
    

El nombre que mencionamos aquí aparecerá en registros y alertas. Hay algunos parámetros más admitidos por esta directiva y usaremos el parámetro de verificación en este artículo. La opción de verificación habilita las comprobaciones de estado en la instancia del servidor web; de lo contrario, la instancia del servidor web "siempre se considera disponible".

Una vez que haya terminado de configurar, inicie el servicio HAProxy:

sudo service haproxy start

Prueba de equilibrio de carga y conmutación por error

Agregaremos el nombre del servidor en el archivo index.html predeterminado ubicado de manera predeterminada en /var/www/index.html

En la Instancia 2 - Servidor web 1 (webserver01 con IP- 192.168.205.16), agregue la siguiente línea como:

sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"

En la Instancia 3 - Web Server 2 (webserver02 con IP- 192.168.205.17), agregue la siguiente línea como:

sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"

Ahora abra el navegador web en la máquina local y navegue a través de la IP haproxy, es decir, http://192.168.205.15

Cada vez que actualice la pestaña, verá que la carga se distribuye a cada servidor web. A continuación se muestra una captura de pantalla de mi navegador:

Por primera vez, cuando visito http://192.168.205.15, obtengo:

Y por segunda vez, es decir, cuando actualizo la página, obtengo:

También puede consultar las estadísticas de haproxy visitando http://192.168.205.15/haproxy?stats

Hay más que puede hacer con esta configuración. Algunas ideas incluyen:

  • desconecta uno o ambos servidores web para probar qué sucede cuando accedes a HAProxy
  • configurar HAProxy para servir una página de mantenimiento personalizada
  • configure la interfaz web para que pueda monitorear visualmente las estadísticas de HAProxy
  • cambiar el programador a algo que no sea turno rotatorio
  • configurar priorización/pesos para servidores particulares

¡Eso es todo!


Ubuntu
  1. Configuración inicial del servidor con Ubuntu 14.04

  2. Cómo configurar HAProxy en el servidor Debian 9 / Ubuntu 16.04

  3. Cómo instalar el servidor web Cherokee con PHP5 y MySQL en Ubuntu 11.04

  4. Instale el servidor web Apache en Ubuntu 12.10

  5. ¿Configurando el servidor web de Ubuntu?

Cómo instalar el servidor web Apache en Ubuntu 18.04

Cómo instalar el servidor web Jetty en Ubuntu 14.04

Cómo instalar el servidor web Cherokee en Ubuntu 14.04

Cómo instalar el servidor web Hiawatha en Ubuntu 14.04

Cómo instalar el servidor web Hiawatha en Ubuntu 16.04

¿Servidor web en Ubuntu 16.04?