Balanceador de carga con Nginx
Algunas veces nos encontramos en situaciones donde tenemos un servidor saturado debido a la cantidad de usuarios y peticiones que recibe.
¡¡Solución
- Aumentar los recursos (Ram y Cpu) de nuestro servidor.
- Emplear un balanceador y repartir la carga entre varios servidores.
- Ventajas:
- Optimizar los recursos.
- Aumentar el rendimiento.
- Reducir la latencia.
- Tolerancia a fallos.
- Ventajas:
LABORATORIO
Preparación del escenario
Vamos a crear varios servidores clonicos con el mismo sitio web realizado en WordPress, para ello utilizaremos contenedores LXC
- Servidor principal
- Hostname: load-balancer
- Ip (dos interface de red):
- eth0: 192.168.1.20
- eth1: 10.21.21.1
- Os: Debian 11
- Contenedor 01
- Hostname nodo01
- Ip:
- lxcbr0: 10.21.21.11
- Os: Debian 11
- LEMP + WordPress
- Contenedor 02 - Hostname nodo01 - Ip: - lxcbr0: 10.21.21.12 - Os: Debian 11 - LEMP + WordPress
- Contenedor 03 - Hostname nodo01 - Ip: - lxcbr0: 10.21.21.13 - Os: Debian 11 - LEMP + WordPress
Instalación y configuración del balanceador
Partimos de la base de que todos los equipos ya están configurados con sus paquetes correspondientes
En el servidor principal
Instalamos nginx
apt install nginx -yAbrimos el archivo de configuración de Nginx
nano /etc/nginx/nginx.confCreamos un upstream con todos los servidores (contenedores LXC)
- upstream
- server <ip privada del contenedor 01>
- server <ip privada del contenedor 02>
- server <ip privada del contenedor 03>
## Load Balancer
upstream mibalanceador {
server 10.21.21.11;
server 10.21.21.12;
server 10.21.21.13;
}
Pesos del servidor weight
Si tenemos servidores con diferentes prestaciones, puede ser conveniente favorecer la carga de algunos sobre otros. La definición de los pesos permite ajustar aún más el balanceador de carga haciendo que el servidor con mayor peso se selecciona con mayor frecuencia frente al resto.
## Load Balancer
upstream mibalanceador {
server 10.21.21.11 weight=1;
server 10.21.21.12 weight=3;
server 10.21.21.13 weight=2;
}
Métodos de balanceo
- round-robin Todos los servidores reciben la misma carga en el orden que esten configurados dentro del archivo /etc/nginx/nginx.conf
- least_conn Dirige las solicitudes al servidor con menos conexiones activas en ese momento.
- ip-hash Los dos métodos anteriores no pueden proporcionar persistencia de sesión, usaremos este sistema si necesitamos que los usuarios sean dirigidos al mismo servidor
## Load Balancer
upstream mibalanceador {
least_conn;
server 10.21.21.11 weight=1;
server 10.21.21.12 weight=3;
server 10.21.21.13 weight=2;
}
## Load Balancer
upstream mibalanceador {
ip_hash;
server 10.21.21.11 weight=1;
server 10.21.21.12 weight=3;
server 10.21.21.13 weight=2;
}