Le Tango de la Haute Disponibilité : Pourquoi s'en Soucier ?

Imaginez ceci : il est 3 heures du matin, et votre serveur principal décide qu'il en a assez et tombe plus vite qu'un ballon de plomb. Sans une configuration HA appropriée, vous allez avoir des ennuis. C'est là que notre duo dynamique entre en jeu :

  • Keepalived : Le gardien vigilant qui gère notre IP virtuelle.
  • Nginx : Notre fidèle répartiteur de charge et proxy inverse.

Ensemble, ils garantissent que même si un serveur fait des siennes, un autre prend le relais sans problème. C'est comme avoir une doublure pour votre serveur - le spectacle doit continuer !

Préparation : Ce Dont Vous Aurez Besoin

Avant de plonger dans les détails, assurons-nous d'avoir tout ce qu'il nous faut :

  • Deux serveurs ou plus (appelons-les nœud1 et nœud2)
  • Une adresse IP virtuelle (VIP) qui flottera entre nos serveurs
  • Accès root (car nous avons du sérieux à faire ici)
  • Une compréhension de base de Linux et des réseaux (si vous savez épeler IP, vous êtes à mi-chemin)

Étape 1 : Installation de Nos Stars

Tout d'abord, installons Nginx et Keepalived sur nos deux nœuds. Nous supposerons que vous utilisez un système basé sur Debian, car il faut bien commencer quelque part.


sudo apt update
sudo apt install nginx keepalived

Facile comme bonjour. Maintenant que nous avons les outils, mettons-les au travail !

Étape 2 : Configuration de Nginx - Le Maître de la Répartition de Charge

Nginx sera notre guerrier de première ligne, distribuant les requêtes entrantes et assurant une navigation fluide. Configurons-le comme répartiteur de charge :


http {
    upstream backend {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

Cette configuration indique à Nginx de distribuer le trafic entre nos deux serveurs backend. N'oubliez pas de remplacer les adresses IP par celles de vos serveurs réels !

Étape 3 : Configuration de Keepalived - Le Maître de la Haute Disponibilité

Maintenant pour la vraie magie - Keepalived. Ce petit génie gérera notre IP virtuelle et s'assurera qu'elle pointe toujours vers un serveur en bonne santé. Configurons-le sur les deux nœuds :

Sur le nœud1 (le maître) :


vrrp_script chk_nginx {
    script "pidof nginx"
    interval 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass supersecretpassword
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

Sur le nœud2 (la sauvegarde) :


vrrp_script chk_nginx {
    script "pidof nginx"
    interval 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass supersecretpassword
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

Les principales différences ici sont les paramètres state et priority. Le nœud1 est défini comme MASTER avec une priorité plus élevée, tandis que le nœud2 est la sauvegarde avec une priorité inférieure.

Étape 4 : Démarrage du Spectacle

Il est temps de donner vie à notre création ! Sur les deux nœuds, exécutez :


sudo systemctl start nginx
sudo systemctl start keepalived

Si tout se passe bien, vous devriez maintenant avoir une configuration de haute disponibilité fonctionnelle. L'IP virtuelle (192.168.1.100 dans notre exemple) sera attribuée au nœud maître.

Étape 5 : Test - Parce que Confiance, mais Vérification

Maintenant pour le moment de vérité. Assurons-nous que notre configuration peut gérer la panne d'un serveur :

  1. Vérifiez à nouveau l'attribution de l'IP - elle devrait avoir été déplacée vers l'autre nœud !

Sur le nœud actif, arrêtez Nginx :

sudo systemctl stop nginx

Vérifiez quel nœud détient actuellement l'IP virtuelle :

ip addr show eth0

Si tout a fonctionné comme prévu, félicitations ! Vous venez de configurer un cluster de haute disponibilité basique mais efficace.

Approfondissement : Ajustements et Concepts Avancés

Maintenant que nous avons une configuration fonctionnelle, explorons quelques moyens de l'améliorer encore :

1. Personnalisation des Vérifications de Santé

Au lieu de simplement vérifier si Nginx fonctionne, nous pouvons créer des vérifications de santé plus sophistiquées :


#!/bin/bash
# /etc/keepalived/check_nginx.sh

if [ $(ps -ef | grep -v grep | grep nginx | wc -l) -eq 0 ]; then
    exit 1
else
    curl -s -o /dev/null http://localhost
    if [ $? -eq 0 ]; then
        exit 0
    else
        exit 1
    fi
fi

Mettez à jour votre configuration Keepalived pour utiliser ce script :


vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight 2
}

2. Mise en Œuvre de Scripts de Notification

Vous voulez savoir quand un basculement se produit ? Ajoutons un script de notification :


#!/bin/bash
# /etc/keepalived/notify.sh

case $1 in
    "MASTER")
        echo "$(date) - Devenu MASTER" >> /var/log/keepalived.log
        # Ajoutez votre logique de notification ici (par exemple, envoyer un e-mail ou un message Slack)
        ;;
    "BACKUP")
        echo "$(date) - Devenu BACKUP" >> /var/log/keepalived.log
        ;;
    "FAULT")
        echo "$(date) - Entré en état de FAULT" >> /var/log/keepalived.log
        ;;
esac

Ajoutez ceci à votre configuration Keepalived :


vrrp_instance VI_1 {
    ...
    notify /etc/keepalived/notify.sh
    ...
}

3. Multiples IPs Virtuelles

Besoin de gérer plusieurs services ? Vous pouvez configurer plusieurs IPs virtuelles :


vrrp_instance VI_1 {
    ...
    virtual_ipaddress {
        192.168.1.100
        192.168.1.101
        192.168.1.102
    }
    ...
}

Pièges Courants et Comment les Éviter

Même les meilleurs plans peuvent échouer. Voici quelques problèmes courants et comment les résoudre :

1. Le Syndrome du Split-Brain

Si vos nœuds ne peuvent pas communiquer, ils pourraient tous deux penser qu'ils sont le maître. Pour éviter cela :

  • Utilisez un réseau dédié pour la communication Keepalived
  • Mettez en œuvre des mécanismes de clôture (comme STONITH - Shoot The Other Node In The Head)

2. Configurations Incohérentes

Assurez-vous que vos configurations Keepalived et Nginx sont identiques sur tous les nœuds. Envisagez d'utiliser des outils de gestion de configuration comme Ansible pour maintenir la cohérence.

3. Problèmes de Pare-feu

Assurez-vous que votre pare-feu autorise le trafic VRRP (protocole 112) entre vos nœuds :


sudo iptables -A INPUT -p vrrp -j ACCEPT

Passer au Niveau Supérieur : Orchestration de Conteneurs

Prêt pour les grandes ligues ? Envisagez d'intégrer votre configuration HA avec des systèmes d'orchestration de conteneurs comme Kubernetes. Bien que Kubernetes ait ses propres mécanismes HA, Keepalived peut encore jouer un rôle dans la gestion de l'accès externe à votre cluster.

Conclusion : Le Chemin vers les Cinq Neuf

Félicitations ! Vous avez fait un pas important vers l'atteinte des "cinq neuf" de disponibilité. Rappelez-vous, la haute disponibilité n'est pas une solution à installer et oublier. Des tests réguliers, une surveillance et une maintenance sont essentiels pour garantir que votre configuration reste robuste.

Quelques points clés à retenir :

  • Testez toujours vos mécanismes de basculement régulièrement
  • Surveillez vos journaux Keepalived et Nginx pour toute anomalie
  • Gardez vos configurations sous contrôle de version
  • Documentez votre configuration et vos procédures de basculement pour votre équipe

Avec Keepalived et Nginx dans votre arsenal, vous êtes bien équipé pour relever les défis de la haute disponibilité. Doux rêves, et que vos serveurs ne dorment jamais !

"La meilleure façon d'éviter l'échec est d'échouer constamment." - Netflix

Maintenant, allez de l'avant et conquérez ces métriques de disponibilité ! Et rappelez-vous, dans le monde de la haute disponibilité, la paranoïa est juste une bonne planification.