
Balanceo de carga en Proxmox
Si alguna vez has montado un clúster de Proxmox y has querido que los usuarios o servicios accedieran a las VMs o LXC sin preocuparse de en qué nodo están corriendo, seguramente te has preguntado si había una forma cómoda y eficaz de balancear el tráfico. Pues bien, ProxLB es una solución ligera que hace justo eso, balanceo de carga y alta disponibilidad para VMs/LXCs corriendo sobre varios hosts Proxmox VE.
No estamos hablando de una solución pesada tipo HAProxy con mil líneas de configuración. ProxLB es más bien un conjunto bien pensado de scripts Bash, NGINX, Keepalived y monitoreo basado en QEMU Guest Agent para saber qué VM está encendida, en qué nodo, y hacia dónde redirigir el tráfico. ¿Lo mejor? Funciona con solo 3 nodos y sin inventar la rueda.
¿Qué tecnologías utiliza ProxLB?
ProxLB se apoya en un conjunto de tecnologías:
- NGINX: como proxy inverso para redirigir tráfico HTTP, HTTPS o TCP hacia la IP del nodo Proxmox que ejecuta la VM.
- Keepalived: proporciona una IP virtual flotante (VIP) para que haya alta disponibilidad entre los nodos del clúster.
- QEMU Guest Agent: permite consultar el estado de la VM (encendida, IP, etc.) y usar esa info para decidir a dónde enrutar.
- Bash + Crontabs: automatiza el descubrimiento de las IPs y actualiza las reglas del NGINX dinámicamente.
Casos de uso para ProxLB
ProxLB está pensado tanto para laboratorios como para entornos semi-productivos o productivos donde necesitas balanceo sencillo sin depender de soluciones externas más complejas.
A continuación, os detallamos algunos casos de uso:
Balanceo de servicios distribuidos entre hosts
Supón que tienes servicios desplegados en distintas VMs en cada nodo (por ejemplo, instancias web, bases de datos en réplica, servicios de backup).
ProxLB se puede instalar en uno o más de esos hosts y configurar para balancear el tráfico hacia las IPs internas de cada nodo del clúster, según reglas L4 (TCP/UDP) o L7 (HTTP/SNI).
Ejemplo:
- Host 1: VM con web01
- Host 2: VM con web02
- Host 3: VM con web03
ProxLB redirige el tráfico a cualquiera de esas IPs, sin que el usuario note dónde se encuentra la VM.
ProxLB como punto de entrada común del clúster
Puedes desplegar ProxLB en uno o varios hosts (para HA con keepalived, por ejemplo) y que funcione como gateway de entrada al clúster, apuntando a las IPs internas de los otros hosts o VMs.
Esto centraliza el tráfico y simplifica la gestión de accesos, certificados SSL y reglas.
Algunos servicios (como GitLab, diferentes paneles de administración, Zabbix o Nextcloud) usan varios puertos (80, 443, 22...). Puedes configurar reglas específicas en ProxLB para balancear cada puerto a distintas VMs si fuera necesario.
Alta disponibilidad entre hosts físicos
ProxLB puede funcionar junto con VRRP (a través de Keepalived) para tener una IP virtual flotante entre varios hosts. Así, aunque un nodo caiga, otro puede seguir sirviendo el tráfico automáticamente.
Multi-nodo: ProxLB no solo en un nodo
Puedes instalar ProxLB en varios hosts del clúster, ya sea en contenedores LXC, VMs o incluso directamente sobre Debian/Ubuntu en bare-metal (ProxLB es un stack Nginx + HAProxy con interfaz web).
Con esto ganas:
- Tolerancia a fallos.
- Mayor capacidad de procesamiento de tráfico.
- Redundancia y balanceo interno de balanceadores (sí, balancear balanceadores).
Reducción de exposición directa
Ocultas las IPs de las VMs reales tras una IP flotante, dificultando ataques directos. Útil en entornos donde la seguridad por ocultación suma un extra.
¿Dónde NO interviene ProxLB?
- No balancea directamente las cargas de CPU, RAM ni el almacenamiento entre los hosts (eso lo gestiona Proxmox con su HA y migración en caliente).
- No reemplaza a Ceph, ni ZFS, ni funciones de almacenamiento distribuido.
Pasos para instalar e implementar ProxLB
Implementar ProxLB en un entorno con Proxmox VE y mínimo 3 nodos es relativamente sencillo, siempre que cumplas unos pocos requisitos. Te explico paso a paso cómo hacerlo de forma práctica y comprensible.
Requisitos previos
- Mínimo 3 nodos Proxmox VE con red compartida.
- Al menos una interfaz de red (vmbr0) con capacidad para IPs flotantes (VIPs).
- QEMU Guest Agent instalado y habilitado en las VMs a balancear.
- Acceso root (o sudo) en cada nodo.
- Dominio local o IPs internas accesibles entre nodos.
- Resolución DNS
Pasos para implementación ProxLB
- Clona el repositorio de ProxLB
Puedes hacerlo en una VM o LXC en cada nodo, o centralizarlo en un contenedor exclusivo. Por ejemplo, crea un contenedor Ubuntu 22.04 ligero en cada nodo Proxmox y dentro ejecutas:
apt -y install gitgit clone https://github.com/gyptazy/ProxLB.gitcd ProxLB chmod +x *.sh
- Configura el archivo .conf
Dentro del proyecto verás un archivo "proxlb.conf", donde defines qué máquinas vas a balancear.
Ejemplo de configuración:
# proxlb.confVIP="192.168.100.250"INTERFACE="vmbr0"SERVICES=( "web01:80" "api01:8080" "vpn01:1194")
Esto le dice a ProxLB:
- Qué IP flotante usar como entrada
- Qué interfaz se usará para esa IP
- Qué servicios quieres balancear (por nombre VM y puerto)
- Configuración Keepalived
Keepalived se usa para que la VIP solo esté activa en un nodo a la vez.
Ejemplo básico de "/etc/keepalived/keepalived.conf" (en los otros dos nodos, cambia "state" a BACKUP y reduce la prioridad a 90, 80...):
vrrp_instance VI_1 { state MASTER interface vmbr0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.100.250 }}
- Instalación NGINX y Keepalived
En cada contenedor donde vayas a ejecutar ProxLB:
apt updateapt install -y nginx keepalived jq curl
- Lanzar script de descubrimiento
Puedes ejecutar manualmente o mediante cron el script que genera la configuración de NGINX:
./update-proxylb.shsystemctl reload nginx"O mediante CRON" * * * * * /ruta/a/ProxLB/update-proxylb.sh && systemctl reload nginx
- Verificar que la IP VIP responde
Desde cualquier máquina con acceso a la red, hacemos un PING o CURL a la IP VIP para verificar el acceso (dando por hecho que el servidor está dando el servicio que hemos configurado, como una URL):
curl http://192.168.100.250
- Prueba de Failover
Para verificar que disponemos de balanceo podéis ejecutar estas pruebas adicionales:
- Apagar el contenedor o máquina virtual que tiene la IP VIP
- Keepalived, si funciona correctamente, moverá la IP VIP a otro nodo
- Si volvemos a hacer la petición nos debería funcionar
ProxLB es una herramienta que encaja a la perfección cuando no quieres complicarte la vida con soluciones de HA complejas, pero necesitas disponibilidad real para tus servicios en entornos virtualizados. La simplicidad de su diseño, la facilidad para integrarse en entornos existentes y la compatibilidad con entornos mixtos (HTTP/TCP) lo hacen una opción ideal para laboratorios, entornos de desarrollo o incluso producciones medianas que corren sobre Proxmox.
Si quieres llevar ProxLB a algo más, puedes ampliarlo usando herramientas de monitorización como Nagios, Grafana o Prometheus que te permitan:
- Revisar latencias entre nodos
- Logs de Keepalived y NGINX
- Estado de máquinas virtuales o contenedores
Fin del Artículo. ¡Cuéntanos algo en los Comentarios!