Cluster Web Apache en Alta Disponibilidad con HAProxy + Keepalived (IP Flotante)
🌐 Topología
- Cliente: Usuario que accede al sitio web.
- IP Virtual (VIP):
172.22.0.100(gestionada por Keepalived). - Nodos HAProxy:
haproxy1(MASTER):172.22.0.5haproxy2(BACKUP):172.22.0.4
- Servidores Apache:
apache1:172.22.0.10apache2:172.22.0.11

🛠️ Configuración Paso a Paso
1. Creación del Escenario en VirtualBox
- SO: Debian en 4 máquinas virtuales.
- Red: NAT Network en VirtualBox (Tools > Network > NAT Network > Create).

2. Configuración de IPs Estáticas
Editar /etc/network/interfaces en cada VM:
auto enp0s3
iface enp0s3 inet static
address 172.22.0.5
netmask 255.255.255.0
gateway 172.22.0.1
3. Instalacion de los servivios
- En nodos apache
sudo apt update && sudo apt install apache2 -y
- En nodos HAProxy (Master Y backup)
sudo apt install haproxy keepalived -y
4. Configuracion de HAProxy
- Editar /etc/haproxy/haproxy.cfg (en ambos HAProxy):
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
option httpchk
server apache1 172.22.0.10:80 check
server apache2 172.22.0.11:80 check
- Editar el archivo /etc/default/haproxy
#Agregamos
ENBALED=1
- Reiniciamos con
systemctl restart haproxy
Realizamos exactamente lo mismo en el backup.
5. Configuración de keepalived
- En la maquina master editamos el archivo /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.22.0.100
}
}
- En maquina backup
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.22.0.100
}
}
6 🧾 Configuración de Apache
- En cada servidor Apache
(
apache1yapache2), realizamos los siguientes pasos:
📁 1. Subir Archivos del Proyecto
Copia tus archivos del sitio web (HTML, CSS, JS, etc.) al directorio raíz de Apache:
En mi caso un proyecto de react, por lo tanto pegue el proyecto. En tu caso, pones la ruta del proyecto.
sudo rm -rf /var/www/html/*
sudo cp -r /ruta/proyecto* /var/www/html/
- Asegúrate de que los archivos tengan los permisos correctos:
sudo chown -R www-data:www-data /var/www/html
- De ser necesario puedes crear .htaccess, en mi caso si lo es por usar react.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html [L]
</IfModule>
- Habilitamos la pagina y reinciamos el servicio
sudo a2enmod rewrite
sudo systemctl restart apache2
- Ejemplos de como se ve el server web.

Recursos adicionales
- Guía paso a paso completa: Descargar instrucciones detalladas