Serveur de secours : mettre en place un failover automatique entre 2 VPS avec Keepalived et HAProxy


Dans un monde où la haute disponibilité est un prérequis pour tout service critique, la mise en place d’un système de bascule automatique entre deux serveurs (failover) est essentielle. Dans ce tutoriel, nous allons voir comment configurer un système de serveur de secours automatique en utilisant Keepalived et HAProxy sur deux VPS sous Linux (Debian 11 ou 12, Ubuntu, etc.).

🔍 Objectif

  • Disposer de deux serveurs (VPS A et VPS B).
  • Un seul point d’entrée avec une IP flottante (virtuelle) partagée entre les deux.
  • Lorsque le serveur principal tombe, le trafic bascule automatiquement sur le serveur de secours.
  • La répartition de charge ou le proxy HTTP(S) est géré via HAProxy.

🛠️ Prérequis

  • 2 VPS accessibles avec des IP publiques (par exemple : 192.0.2.10 et 192.0.2.11)
  • Un sous-réseau IP failover / IP flottante (par exemple : 192.0.2.100)
  • Un accès root ou sudo aux deux VPS
  • Les ports 80, 443 (et 22 pour SSH) ouverts dans les deux pare-feu

1. 📦 Installation de Keepalived et HAProxy

Sur les deux VPS, installez les paquets requis :

sudo apt update
sudo apt install keepalived haproxy -y

2. ⚙️ Configuration de HAProxy

Sur les deux VPS, éditez le fichier /etc/haproxy/haproxy.cfg.

Exemple simple de configuration (proxy HTTP vers un service local) :

global
    log /dev/log local0
    maxconn 2048
    daemon

defaults
    log     global
    mode    http
    option  httplog
    timeout connect 5s
    timeout client  30s
    timeout server  30s

frontend http_in
    bind *:80
    default_backend servers

backend servers
    server app1 127.0.0.1:8080 check

Remplacez 127.0.0.1:8080 par le port sur lequel tourne votre application.

🔁 Le même HAProxy est configuré sur les deux serveurs. Seul le serveur actif avec l’IP flottante recevra du trafic.


3. 🔁 Configuration de Keepalived

L’objectif ici est de faire basculer automatiquement l’IP flottante d’un serveur à l’autre.

Configuration sur le serveur principal (VPS A)

Fichier /etc/keepalived/keepalived.conf :

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass d4failover
    }
    virtual_ipaddress {
        192.0.2.100
    }
}

Configuration sur le serveur secondaire (VPS B)

Fichier /etc/keepalived/keepalived.conf :

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass d4failover
    }
    virtual_ipaddress {
        192.0.2.100
    }
}

💡 L’interface réseau eth0 doit être adaptée à votre configuration (ip a pour connaître l’interface active).


4. 🔄 Redémarrage et vérification

Sur les deux serveurs :

sudo systemctl restart haproxy
sudo systemctl enable keepalived
sudo systemctl start keepalived

Vérifiez que l’IP flottante est bien présente sur le VPS A (MASTER) :

ip a | grep 192.0.2.100

Arrêtez ensuite Keepalived sur le VPS A :

sudo systemctl stop keepalived

Et vérifiez qu’elle est bien transférée automatiquement sur le VPS B (BACKUP devenu MASTER).


5. 🔐 Configuration réseau de l’IP failover (exemple OVH)

Sur OVH, l’IP failover doit être ajoutée manuellement en tant qu’IP secondaire sur le serveur.

Ajoutez cette ligne dans /etc/network/interfaces.d/failover.cfg (Debian/Ubuntu) :

auto eth0:0
iface eth0:0 inet static
    address 192.0.2.100
    netmask 255.255.255.255
    broadcast 192.0.2.100
    post-up /sbin/ip route add 192.0.2.100 dev eth0

Mais Keepalived se charge généralement de cette tâche automatiquement, vous n’avez à configurer cela que si l’IP ne remonte pas.


6. 🧪 Test de failover

  1. Ouvrez un navigateur ou faites un curl http://192.0.2.100.
  2. Coupez le service HAProxy ou éteignez le VPS A.
  3. Observez la prise de relais par le VPS B (2 à 3 secondes de bascule).
  4. Rétablissez VPS A pour qu’il reprenne le rôle de MASTER.

7. 📈 Aller plus loin

  • Ajouter une surveillance avec keepalived_script pour ne prendre le rôle MASTER que si HAProxy fonctionne.
  • Ajouter un load balancing actif/actif avec HAProxy en mode double backend (plus complexe).
  • Superviser les états de Keepalived avec Netdata ou Prometheus.
  • Sécuriser la gestion avec des règles iptables (filtrage des IPs de gestion VRRP).

🎯 Conclusion

En combinant Keepalived pour la gestion d’IP flottante et HAProxy pour le proxy/load balancing, vous pouvez atteindre une haute disponibilité simple, robuste et efficace entre deux VPS. Cette configuration assure la continuité de service en cas de panne de l’un des serveurs, un atout indispensable pour toute infrastructure professionnelle.


📚 Ressources utiles