GNU/Linux >> Tutoriales Linux >  >> Cent OS

Instalar y configurar HAProxy en RHEL 8 / CentOS 8 Linux

HAProxy o High Availability Proxy es un software de servidor proxy y equilibrador de carga TCP y HTTP de código abierto. HAProxy ha sido escrito por Willy Tarreau en C, es compatible con SSL, compresiones, keep-alive, formatos de registro personalizados y reescritura de encabezados. HAProxy es un servidor proxy y un equilibrador de carga rápidos y livianos con una pequeña huella de memoria y bajo uso de CPU. Es utilizado por sitios grandes como Github, StackOverflow, Reddit, Tumblr, Twitter y otros. Se ha convertido en el equilibrador de carga de software y servidor proxy más popular en los últimos años.

En este tutorial, obtendrá la instalación y configuración de HAProxy en RHEL 8 / CentOS 8. Instalaremos HAProxy en un solo servidor y luego instalaremos el servidor web Nginx en los otros servidores. HAProxy actuará como un equilibrador de carga para los servidores web Nginx.

En este tutorial aprenderás:

  • Arquitectura y conceptos de HAProxy
  • Configurar el archivo de hosts para la resolución de nombres
  • Instalar y configurar HAProxy
  • Instalar y configurar Nginx
  • Prueba de la función Equilibrio de carga
  • Acceda a la URL de estadísticas de HAProxy

Arquitectura HAProxy.

Requisitos de software y convenciones utilizadas

Arquitectura y conceptos HAProxy

HAProxy puede ejecutarse en dos modos:modo TCP de capa 4 y modo HTTP de capa 7. En el modo TCP de capa 4, HAProxy reenvía los paquetes RAW TCP del cliente a los servidores de aplicaciones. En el modo HTTP de capa 7, HAProxy analiza el encabezado HTTP antes de reenviarlo a los servidores de aplicaciones. En este tutorial, usaremos Nginx como el servidor web que admite el modo HTTP de capa 7.

Equilibrio de carga de capa 4.

Equilibrio de carga de capa 7.

Balance Algorithm es el algoritmo que utiliza HAProxy para seleccionar el servidor al realizar el equilibrio de carga. Están disponibles los siguientes modos:

Roundrobin

Este es el algoritmo de equilibrio más simple. Para cada nueva conexión, será manejada por el siguiente servidor backend. Si se llega al último servidor backend de la lista, comenzará de nuevo desde la parte superior de la lista backend.

Leastconn

La nueva conexión será manejada por el servidor backend con la menor cantidad de conexiones. Esto es útil cuando el tiempo y la carga de las solicitudes varían mucho.

Fuente

Esto es para sesiones pegajosas, la IP del cliente será codificada para determinar el servidor back-end que recibió la última solicitud de esta IP. Entonces, una IP A siempre será manejada por backend1, y la IP B siempre será manejada por banckend2 para no interrumpir las sesiones.

Configurar archivo de hosts para resolución de nombres

Inicie sesión en el servidor del equilibrador de carga y edite el /etc/hosts archivo y balanceador de carga HAProxy, nginx1, nginx2 nombres de host. Copie el mismo archivo en otros dos nodos nginx y verifique la conectividad de la red mediante el comando ping.

# vim /etc/hosts

192.168.1.108 loadbalancer.example.com
192.168.1.104 nginx1.example.com
192.168.1.105 nginx2.example.com

Instalar y configurar HAProxy

HAProxy está disponible en el repositorio RHEL 8/CentOS 8, por lo tanto, inicie sesión en el servidor del equilibrador de carga e instale el paquete HAProxy con este comando yum.

# yum install haproxy

Una vez instalado correctamente, puede usar el siguiente comando para verificar la instalación.

# yum info haproxy
# yum info haproxy
Updating Subscription Management repositories.
Updating Subscription Management repositories.
Last metadata expiration check: 0:06:03 ago on Sat 16 Mar 2019 11:40:24 PM +04.
Installed Packages
Name         : haproxy
Version      : 1.8.14
Release      : 1.el8
Arch         : x86_64
Size         : 4.1 M
Source       : haproxy-1.8.14-1.el8.src.rpm
Repo         : @System
From repo    : rhel-8-for-x86_64-appstream-beta-rpms
Summary      : HAProxy reverse proxy for high availability environments
URL          : http://www.haproxy.org/
License      : GPLv2+
Description  : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
             : availability environments. Indeed, it can:
             :  - route HTTP requests depending on statically assigned cookies
             :  - spread load among several servers while assuring server persistence
             :    through the use of HTTP cookies
             :  - switch to backup servers in the event a main one fails
             :  - accept connections to special ports dedicated to service monitoring
             :  - stop accepting connections without breaking existing ones
             :  - add, modify, and delete HTTP headers in both directions
             :  - block requests matching particular patterns
             :  - report detailed status to authenticated users from a URI
             :    intercepted from the application

Cuando finalice la instalación, vaya a /etc/haproxy/ directorio y haga una copia de seguridad del archivo de configuración original.

# cd /etc/haproxy/
# cp haproxy.cfg haproxy.cfg.orig

A continuación, realice los siguientes cambios en el archivo de configuración de HAProxy haproxy.cfg con cualquiera de los editores.

#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   https://www.haproxy.org/download/1.8/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

    # utilize system-wide crypto-policies
    ssl-default-bind-ciphers PROFILE=SYSTEM
    ssl-default-server-ciphers PROFILE=SYSTEM

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
#---------------------------------------------------------------------
# HAProxy Monitoring Config
#---------------------------------------------------------------------
listen stats 
    bind loadbalancer.example.com:8080            # HAProxy Monitoring run on port 8080
    mode http
    option forwardfor
    option httpclose
    stats enable
    stats show-legends
    stats refresh 5s
    stats uri /stats                         # URL for HAProxy monitoring
    stats realm Haproxy\ Statistics
    stats auth admin:admin                   # User and Password for login to the monitoring dashboard
    #stats admin if TRUE
    default_backend loadbalancer                 # This is optionally for monitoring backend
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend loadbalancer
    bind loadbalancer.example.com:80
    #acl url_static       path_beg       -i /static /images /javascript /stylesheets
    #acl url_static       path_end       -i .jpg .gif .png .css .js

    #use_backend static          if url_static
    option http-server-close
    option forwardfor
    default_backend       loadbalancer

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
#    balance     roundrobin
#    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend loadbalancer
    balance     roundrobin                                    # Balance algorithm
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost        # Check the server application is up and healty - 200 status code
    server  nginx1.example.com 192.168.1.104:80 check         # NGINX Server1
    server  nginx2.example.com 192.168.1.105:80 check         # NGNIX Server2

Guarde este archivo de configuración y salga.

Ahora, configuraremos el demonio rsyslog para registrar las estadísticas de HAProxy. Edite el rsyslog.conf para permitir que rsyslog utilice el puerto UDP 514. Abra el archivo de configuración rsyslog y descomente las líneas para habilitar la conexión UDP.

# vim /etc/rsyslog.conf
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

Guarde el archivo con los cambios anteriores y salga. Luego cree un nuevo archivo de configuración HAProxy para rsyslog y agregue las siguientes entradas en ese archivo.

# cd /etc/rsyslog.d/
# vi haproxy.conf
local2.=info     /var/log/haproxy-access.log    # For Access Log
local2.notice    /var/log/haproxy-info.log      # For Service Info - Backend, loadbalancer

Ahora reinicie rsyslog y luego inicie el servicio HAProxy y agregue HAProxy para comenzar en el momento del arranque.

# systemctl restart rsyslog
# systemctl start haproxy
# systemctl enable haproxy

Instalar y configurar Nginx

Nginx ya es parte del repositorio RHEL 8/CentOS 8 existente y se puede instalar con el siguiente comando.

# yum install nginx

Una vez instalado, puede verificar la instalación con la ayuda de este comando.

# yum info nginx
# yum info nginx
Updating Subscription Management repositories.
Updating Subscription Management repositories.
Last metadata expiration check: 0:06:14 ago on Sat 16 Mar 2019 11:40:24 PM +04.
Installed Packages
Name         : nginx
Epoch        : 1
Version      : 1.14.0
Release      : 3.el8+1631+ba902cf0
Arch         : x86_64
Size         : 568 k
Source       : nginx-1.14.0-3.el8+1631+ba902cf0.src.rpm
Repo         : rhel-8-for-x86_64-appstream-beta-rpms
Summary      : A high performance web server and reverse proxy server
URL          : http://nginx.org/
License      : BSD
Description  : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
             : IMAP protocols, with a strong focus on high concurrency, performance and low
             : memory usage.

Una vez que Nginx esté instalado, vaya al directorio web y cambie el index.html archivo en consecuencia. Asegúrese de seguir los pasos a continuación en el servidor nginx1 y nginx2.

# cd /usr/share/nginx/html
# ls -lrth
total 20K
-rw-r--r--. 1 root root 2.8K Oct 31  2016 poweredby.png
-rw-r--r--. 1 root root  368 Oct 31  2016 nginx-logo.png
-rw-r--r--. 1 root root 3.7K Mar 16 20:39 50x.html
-rw-r--r--. 1 root root 3.6K Mar 16 20:39 404.html
-rw-r--r--. 1 root root 3.7K Mar 16 20:42 index.html

A continuación, agregue Nginx para iniciar en el momento del arranque y luego inicie el demonio con los siguientes comandos.

# systemctl enable nginx
# systemctl start nginx

Prueba de la función Equilibrio de carga

Las pruebas se pueden realizar navegando y accediendo a la IP del balanceador de carga 192.168.1.108 (en mi caso) y verá que una vez va al Nginx Node1 y la segunda vez va al Nginx Node2 de forma rotativa.

Página web sobre NGINX Node1.

Página web sobre NGINX Node2.

También puede consultar el /var/log/haproxy-access.log para obtener información detallada sobre el equilibrio de carga.

Acceda a la URL de estadísticas de HAProxy

Acceda al panel del Informe estadístico de HAProxy que se ejecuta en el puerto 8080 con el nombre de usuario y la contraseña definidos en haproxy.cfg archivo.

http://192.168.1.108:8080/stats

Acceda a la URL de estadísticas de HAProxy.

Tablero de estadísticas de HAProxy.

HAProxy funciona correctamente y actúa como equilibrador de carga para los dos servidores web Nginx.

Conclusión

HAProxy o proxy de alta disponibilidad es un software de código abierto que proporciona alta disponibilidad para servicios basados ​​en TCP, funciona como equilibrador de carga HTTP y servidor proxy. El software está escrito en C y soporta SSL, keep-alive y compresión. HAProxy es la opción correcta para todos los que necesitan un balanceador de carga y un servidor proxy que sea rápido y liviano con una pequeña huella de memoria y bajo uso de CPU. Haproxy puede ejecutarse en modo TCP de capa 4 y en modo HTTP de capa 7. Nginx solo admite el modo HTTP de capa 7 con HAProxy. Si desea utilizar el modo TCP de capa 4, puede utilizar otros servidores web como Apache. En RHEL 8/CentOS 8 Linux, HAProxy está disponible en el repositorio predeterminado. Es fácil de instalar y configurar.


Cent OS
  1. Cómo instalar y configurar R en el sistema RHEL 8/CentOS 8 Linux

  2. Cómo instalar un servidor DNS en RHEL 8 / CentOS 8 Linux

  3. Instalar y configurar el servidor FTP en CentOS 7 / RHEL 7 – (vsftpfd)

  4. Cómo instalar y configurar HAProxy en CentOS/RHEL 7/6

  5. CentOS / RHEL 5:Cómo instalar y configurar el servidor vsftpd

Instalar y configurar el servidor FreeIPA en CentOS 8

Cómo instalar y configurar el servidor VNC en CentOS 7

Cómo instalar y configurar el servidor VNC en CentOS 7 / RHEL 7

Instalar y configurar Check_MK Server en CentOS 7

Cómo instalar y configurar HAproxy en CentOS 6

Cómo instalar y configurar el servidor VNC en CentOS/RHEL 8

    Requisitos de software y convenciones de la línea de comandos de Linux
    Categoría Requisitos, convenciones o versión de software utilizada
    Sistema RHEL 8 / CentOS 8
    Software HAProxy, Nginx
    Otro Acceso privilegiado a su sistema Linux como root o a través de sudo comando.
    Convenciones # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando
    $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios