LINUX

Cómo configurar HAProxy en Ubuntu 16.04

HAProxy es una herramienta de servicios proxy y de 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 arquitecturas existentes. Ofrece conexiones transparentes, descarga de servidores, aplicación de políticas y conexiones limitadas, además de su función principal de servicio proxy. En este artículo explicamos cómo configurar haproxy en Ubuntu 16.04.

1. Configurar la red

Agregaremos tres servidores web que se ejecutan con Apache2 y un servidor HAPROXY que transmitirá 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 poder acceder a ella desde el dominio público (opcional). Si no desea acceder a él desde el dominio público, puede omitir adjuntar la IP pública asumiendo que accederá al servidor proxy dentro de su red.

2. Configurar el nombre de host

Dado que vamos a acceder al balanceador 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 la red

root@site1:~#  service networking restart

Instale apache y habilítelo.

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 compruebe si puede acceder a site1

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 site2 (10.0.1.117) y site3 (10.0.1.119).

En el servidor proxy, agregue la entrada de los tres servidores web (IPADDRESS HOSTNAME) además 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. Instale HAProxy

Antes de instalarlo, actualice 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"

Poner en marcha el servicio

root@load-balancer:~# service haproxy start

4. Configurar HAProxy

El archivo de configuración ubicado 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 proxy consta de las secciones por defecto, escucha, front-end y 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

Añadiendo oyente:

Una sección de «interfaz» describe un conjunto de sockets de escucha que aceptan conexiones de cliente. El front-end define cómo deben manejarse y enviarse 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 «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 equilibrador 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 utilizar otro algoritmo de equilibrio según sus necesidades.

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

Fuente
Esto selecciona qué servidor usar basándose en 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. Reinicie HAProxy

Como 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ó un resultado como «el archivo de configuración es válido», reinicie el servicio HAProxy

root@load-balancer:~# service haproxy restart

Ahora verifique el estado del servidor HAProxy.

root@load-balancer:~#  service haproxy status

6. Prueba 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 la ejecución del siguiente script desde la terminal, encontrará que el equilibrador de carga está enviando una solicitud a tres servidores web en un método de operación por turnos.

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 el navegador:

Apunte su navegador a http: //load-balancer.local o http: // Server-Public-IP. Obtendrá una respuesta de tres servidores web de forma circular confirmando que está funcionando con nuestras expectativas. Con cada actualización, el servidor proxy envía una solicitud 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 al 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

Estado de HAPROXY

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 utilizar 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 en él.

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

Reinicie 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 «debug» 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 proteger contra fallas en un solo balanceador de carga.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar