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, lo guiaré a través de la instalación y configuración de HAProxy para 3 servidores, un balanceador de carga y dos servidores web Nginx. Instalaremos HAProxy en un solo servidor y luego instalaremos el servidor web Nginx en los otros servidores. HAProxy actúa como un equilibrador de carga para los servidores web Nginx.
Concepto básico con HAProxy
Capa 4 y Capa 7
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 solo admite el modo HTTP de capa 7.
Algoritmo de Equilibrio
Este es el algoritmo que utiliza HAProxy para seleccionar el servidor al realizar el equilibrio de carga. Están disponibles los siguientes modos:
Todos contra todos
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.
Última conexión
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 sesiones
Hay otro algoritmo:consulte el sitio oficial de HAProxy para obtener más información.
Requisitos
- 3 CentOS 7
equilibrador de carga
192.168.1.102
nginx1
192.168.1.104
nginx2
192.168.1.105
- Privilegios de raíz en los 3 servidores.
Paso 1:configure los archivos /etc/hosts
Inicie sesión en el servidor del equilibrador de carga y edite el archivo /etc/hosts.
ssh [email protected]
sudo su
vi /etc/hosts
Agregue los nombres de host nginx1 y nginx2:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
Guarde el archivo y salga del editor.
A continuación, edite el archivo de hosts en los servidores Nginx (nginx1 y nginx2):
ssh [email protected]
ssh [email protected]
Edite y agregue una nueva línea para el balanceador de carga en los archivos de hosts:
vi /etc/host
Agregue el nombre de host del equilibrador de carga en cada servidor nginx:
192.168.1.102 loadbalancer
haga esto en el servidor nginx1 y nginx2.
Paso 2:instalar y configurar HAProxy
HAProxy está disponible en el repositorio de CentOS 7, inicie sesión en el servidor del balanceador de carga y actualice las listas de paquetes:
ssh [email protected]
yum -y update
Ahora instale HAProxy con este comando yum:
yum -y install haproxy
Cuando finalice la instalación, vaya al directorio "/etc/haproxy/" y haga una copia de seguridad del archivo de configuración original:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
A continuación, agregue un nuevo archivo de configuración de HAProxy "haproxy.cfg" con el editor vi:
vi haproxy.cfg
Pegue la configuración a continuación:
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# 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 haproxy3-monitoring *: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 howtoforge:howtoforge #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
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 192.168.1.104:80 check #Nginx1
server nginx2 192.168.1.105:80 check #Nginx2
Guarde el archivo de configuración y salga.
A continuación, configure rsyslog para HAProxy.
Configuraremos el demonio rsyslog para registrar las estadísticas de HAProxy. Edite el archivo rsyslog.conf para permitir que rsyslog utilice el puerto UDP 514.
vi /etc/rsyslog.conf
Descomente esta línea para habilitar la conexión UDP:
$ModLoad imudp
$UDPServerRun 514
Si desea utilizar una IP específica, puede agregar una nueva línea como la siguiente:
$UDPServerAddress 127.0.0.1
Guarde el archivo y salga.
Luego cree un nuevo archivo de configuración haproxy para rsyslog:
cd /etc/rsyslog.d/
vi haproxy.conf
Pegue la configuración a continuación:
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancer
Guardar y salir.
Ahora reinicie rsyslog y luego inicie el haproxy:
systemctl restart rsyslog
systemctl start haproxy
Agregue haproxy para comenzar en el momento del arranque:
systemctl enable haproxy
Paso 3:instalar y configurar Nginx
En esta sección, instalaremos Nginx desde el repositorio de epel en el servidor nginx1 y nginx2.
Inicie sesión en los servidores:
ssh [email protected]
ssh [email protected]
Instale el repositorio de epel con el siguiente comando yum:
yum -y install epel-release
Ahora puedes instalar Nginx:
yum -y install nginx
Nginx está instalado. Vaya al directorio web y cambie el archivo de índice para que podamos ver cuál de los dos servidores entregó el archivo html:
cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html #For nginx2 server
Luego, agregue Nginx para comenzar en el momento del arranque y luego inícielo:
systemctl enable nginx
systemctl start nginx
Asegúrese de realizar este paso en el servidor nginx1 y nginx2.
Paso 4 - Prueba
Prueba desde el navegador accediendo a la IP del balanceador de carga:192.168.1.102
Probando con el comando curl:
curl 192.168.1.102
Prueba para iniciar sesión en el monitoreo web HAProxy que se ejecuta en el puerto 8080 con el nombre de usuario y la contraseña "howtoforge":
http://192.168.1.102:8080/estadísticas
HAProxy funciona correctamente y actúa como un equilibrador de carga para nuestros 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 CentOS 7, HAProxy está disponible en el repositorio predeterminado. Es fácil de instalar y configurar.