GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo configurar HAProxy en Ubuntu 16.04

HAProxy es una herramienta de servicios proxy y equilibrio de carga de alta disponibilidad de código abierto para aplicaciones de red basadas en TCP y HTTP. Es fácil de usar, se adapta a sitios web de gran volumen y se integra perfectamente en las arquitecturas existentes. Ofrece conexiones transparentes, descarga de servidores, aplicación de políticas, conexiones limitadas además de su función principal de servicio de proxy. En este artículo explicamos cómo configurar haproxy en Ubuntu 16.04.

1. Configurar red

Agregaremos tres servidores web que se ejecutan con Apache2 y un servidor HAPROXY que representará todas las solicitudes/respuestas de los tres servicios web en nuestra red.

A continuación se enumeran los detalles del servidor web en nuestra red.

Server 1:    site1.local     10.0.1.116
Server 2:    site2.local     10.0.1.117
Server 3:    site3.local     10.0.1.119

Servidor HAProxy:

load-balancer.local      10.0.1.118

También adjuntaremos una IP pública a load-balancer.local para acceder desde el dominio público (opcional). Si no desea acceder desde el dominio público, puede omitir adjuntar la IP pública, suponiendo que accederá al servidor proxy dentro de su red.

2. Configurar nombre de host

Dado que vamos a acceder al equilibrador de carga y al servidor web por su nombre (no por IPADDRESS), configuraremos el nombre de host de tres servidores web y un servidor proxy. Configuraremos el nombre de host de tres servidores web y el servidor proxy como site1.local, site2.local, site3.local y load-balancer.local respectivamente.

Configuraremos el nombre de host de 10.0.1.116 como site1.local en /etc/hosts y /etc/hostname

root@site1:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.116 site1.local

root@site1:~# vi /etc/hostname
site1.local

Reiniciar red

root@site1:~#  service networking restart

Instale apache y actívelo.

root@site1:~# apt-get install apache2

root@site1:~# service apache2 enable

root@site1:~# service apache2 start

Cree un archivo de índice para site1.local

root@site1:~# vi /var/www/html/index.html

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Agregar regla de firewall para http

# ufw allow 80/tcp
# ufw reload

Ahora comprueba si puedes acceder al sitio 1

root@site1:~# curl -I site1.local
HTTP/1.1 200 OK
Date: Sun, 14 Aug 2016 14:30:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Sun, 14 Aug 2016 03:50:35 GMT
ETag: "ec-53a0004a26c6d"
Accept-Ranges: bytes
Content-Length: 236
Vary: Accept-Encoding
Content-Type: text/html

O

root@site1:~#  curl  site1.local
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Repita el paso 2 para el sitio 2 ( 10.0.1.117 ) y el sitio 3 ( 10.0.1.119 ).

En el servidor proxy, agregue la entrada de los tres servidores web ( IPADDRESS HOSTNAME ) aparte de su propio nombre de host como load-balancer.local

root@load-balancer:~# vi  /etc/hosts
127.0.0.1 localhost
10.0.1.118 load-balancer.local
10.0.1.116 site1.local
10.0.1.117 site2.local
10.0.1.119 site3.local

Configurar el nombre de host del servidor proxy

root@load-balancer:~# vi /etc/hostname
load-balancer.local

3. Instalar HAProxy

Antes de instalarlo actualiza Ubuntu. Ejecute el siguiente comando como root o use sudo para actualizar ubuntu.

root@load-balancer:~# apt-get update

Ahora actualice los paquetes en el sistema.

root@load-balancer:~# apt-get upgrade

Instálelo ejecutando el siguiente comando en la terminal.

root@load-balancer:~# apt-get install haproxy

Para habilitar el servicio como demonio, edite /etc/defaults/haproxy y agregue la siguiente línea.
HABILITADO=1

root@load-balancer:~# vi /etc/defaults/haproxy

ENABLED=1
# Add extra flags here
#EXTRAOPTS="-de -m 16"

Iniciar el servicio

root@load-balancer:~# service haproxy start

4. Configurar HAProxy

El archivo de configuración se encuentra en /etc/haproxy/haproxy.cfg y tiene dos partes, global y proxies, la sección global establece los parámetros de todo el proceso y la sección de proxy consta de las secciones predeterminadas, de escucha, de front-end y de back-end.

Edite el archivo de configuración con el editor de texto vi

root@load-balancer:~# vi /etc/haproxy/haproxy.cfg

El archivo de configuración predeterminado tendrá un aspecto similar al siguiente. Mantenga la sección global y predeterminada como está.

Sección global

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:!MD5:!DSS
ssl-default-bind-options no-sslv3

Sección predeterminada

defaults
log     global
mode    http
option  httplog
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

Agregar oyente:

Una sección de "front-end" describe un conjunto de conectores de escucha que aceptan conexiones de clientes. El front-end define cómo se deben manejar y enviar las solicitudes al servidor back-end:

frontend Local_Server
bind 10.0.1.118:80
mode http
default_backend My_Web_Servers

Adición de servidores web back-end:

Una sección de "back-end" describe un conjunto de servidores a los que se conectará el proxy para reenviar las conexiones entrantes. Según la configuración anterior, el balanceador de carga ahora está escuchando en el puerto 80. Ahora defina los servidores web back-end donde enviará la solicitud.

backend My_Web_Servers
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1rnHost:localhost
server site1.local  10.0.1.116:80
server site2.local  10.0.1.117:80
server site3.local  10.0.1.119:80

Puede agregar el parámetro "verificar" al final de las tres líneas anteriores para verificar el parámetro de salud de sus servidores web.

Puede usar otro algoritmo de equilibrio según sus requisitos.

Leastconn
Selecciona el servidor con la menor cantidad de conexiones; se recomienda para sesiones más largas. Los servidores en el mismo backend también se rotan de forma rotativa.

Fuente
Esto selecciona qué servidor usar en función de un hash de la IP de origen, es decir, la dirección IP de su usuario. Este es un método para garantizar que un usuario se conecte al mismo servidor.

Habilitar estadísticas (opcional)

Ahora, si lo desea, puede habilitar las estadísticas agregando lo siguiente en el archivo de configuración.

listen stats
bind :9000
stats enable
stats hide-version
stats refresh 20s
stats show-node
stats uri /stats

5. Reiniciar HAProxy

Ya que ha terminado con todas las configuraciones necesarias para el servidor proxy, verifique el archivo de configuración antes de reiniciar el servicio usando el siguiente comando.

root@load-balancer:~# haproxy -c -f /etc/haproxy/haproxy.cfg

Si el comando anterior devolvió el resultado como "el archivo de configuración es válido", reinicie el servicio HAProxy

root@load-balancer:~# service haproxy restart

Ahora comprueba el estado del servidor HAProxy.

root@load-balancer:~#  service haproxy status

6. Probar HAProxy

Antes de realizar la prueba, asegúrese de poder hacer ping al servidor web (site1.local, site2.local, site3.local) desde load-balancer.local

root@load-balancer:~# ping site1.local
PING site1.local (10.0.1.116) 56(84) bytes of data.
64 bytes from site1.local (10.0.1.116): icmp_seq=1 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=2 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=3 ttl=64 time=0.648 ms

root@load-balancer:~# ping site2.local
PING site2.local (10.0.1.117) 56(84) bytes of data.
64 bytes from site2.local (10.0.1.117): icmp_seq=1 ttl=64 time=3.02 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=2 ttl=64 time=0.687 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=3 ttl=64 time=0.778 ms

root@load-balancer:~# ping site3.local
PING site3.local (10.0.1.119) 56(84) bytes of data.
64 bytes from site3.local (10.0.1.119): icmp_seq=1 ttl=64 time=0.830 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=2 ttl=64 time=0.631 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=3 ttl=64 time=0.771 ms

Prueba HAPROXY usando CURL

Para probar, ejecute el siguiente script desde la terminal, encontrará que el balanceador de carga está enviando solicitudes a tres servidores web en un método de turno rotativo.

root@load-balancer:~# while true; do curl http://10.0.1.118; sleep 1; done
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

...............................

...............................

...............................

Prueba en navegador:

Dirija su navegador a http://load-balancer.local o http://Server-Public-IP y obtendrá una respuesta de tres servidores web de forma rotatoria para confirmar que funciona según nuestras expectativas. Con cada actualización, el servidor proxy envía solicitudes al servidor web back-end una por una.

También puede visitar la URL de estadísticas que está configurada en la última sección del archivo de configuración para confirmar que los puertos están abiertos para el tráfico. Simplemente navegue a IP pública o http://load-balancer.local en el puerto 9000.

Por ejemplo, vaya a http://load-balancer.local:9000/stats

También puede monitorear el estado del servidor desde la terminal usando HATOP. HATOP es una herramienta de terceros que extrae las estadísticas de un archivo de socket creado por el equilibrador de carga. Instale HATOP ejecutando el siguiente comando desde la terminal.

root@load-balancer:~# apt-get install hatop

Normalmente, al ejecutar HATOP, debe usar el parámetro -s con el comando sudo hatop -s /var/run/haproxy.sock. Para evitar tener que ingresar el parámetro -s al llamar a HATOP, puede insertar la siguiente línea en su archivo ~/.bashrc:

exportar unix-socket=/var/run/haproxy.sock

7. Registro de HAProxy

Edite /etc/rsyslog.d/haproxy.conf y agregue las siguientes líneas.

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

Reiniciar rsyslog

root@load-balancer:~# service rsyslog restart

Ahora verifique los registros usando el siguiente comando

root@load-balancer:~# tail -f /var/log/haproxy*.log

También agregue la línea "depuración" en la sección global del archivo de configuración para el registro detallado.

Conclusión

Con HAProxy, puede aumentar el rendimiento y la disponibilidad de su aplicación web. Este tutorial es solo una introducción al equilibrio de carga, aunque es capaz de hacer mucho más de lo que se describe en este tutorial. Puede mejorar la alta disponibilidad configurando una IP flotante entre varios balanceadores de carga para protegerse contra fallas en un solo balanceador de carga.


Ubuntu
  1. Cómo configurar el servidor Rsyslog en Ubuntu 18.04 LTS

  2. Cómo configurar MariaDB Galera Cluster en Ubuntu 20.04

  3. Cómo configurar el cortafuegos UFW en Ubuntu 18.04

  4. Cómo configurar Elasticsearch en Ubuntu 18.04 y 16.04 LTS

  5. Configurar el servidor Rsyslog en Ubuntu 20.04 - ¿Cómo hacerlo?

Cómo configurar el servidor Git en Ubuntu 20.04

Cómo configurar el servidor Rsyslog en Ubuntu

Cómo configurar el servidor DHCP en Ubuntu

Cómo configurar la vinculación de red en Ubuntu 20.04

Cómo configurar HAProxy en CentOS 8

Cómo configurar el cortafuegos UFW en Ubuntu 20.04