• Mise en place d'une Haute Disponibilité (VIP) de base

    Comment configurer une VIP pour permettre la mise en place d'une haute disponibilité entre 2 serveurs OmniOSce/OpenIndiana ?

    Sur OmniOSce/OpenIndiana, peu d'options (à ma connaissance) :
    - vrrp (je n'ai jamais réussi à le mettre en place.. et manifestement personne ne sait faire avec cette vieille version)
    - ucarp (via le dépôt pkgin... bon courage pour le configurer, mais je l'ai déjà fait, donc c'est faisable ;-)).
    - la bonne vieille méthode du ping avec un petit script ridicule qui tourne en tâche de fond !
    - RSF-1 ZFS (produit commercial permettant la réplication de pools ZFS avec HA par VIP).

    Ici nous allons choisir la méthode du ping et du script en tâche de fond.
    Disons-le tout de suite, il s'agît de la méthode la plus archaïque et qui ne peut être mise en place que dans un contexte très particulier : interfaces réseau physiques dédiées sur les serveurs, câble ethernet blindé, pas d'appareil intermédiaire et un pare-feu soignement configuré pour éviter toute manipulation du ping !


    Le but ici est uniquement d'expliciter le principe et de montrer que ce n'est pas difficile à faire !



    Voici un schéma :
     

    Mise en place d'une Haute Disponibilité de base

               
    L'objectif est simple : nous allons recréer le principe de la VIP, l'adresse IP virtuelle.
    L'un des 2 serveurs (n1) sera le serveur principal, il aura donc 2 IP : son IP normale (.1), ainsi que la VIP (.42).
    Il pourra donc être contacté sur les 2 IP.

    Le principe est qu'en cas de panne de n1, n2 s'attribue automatiquement et le plus vite possible la VIP.
    De cette manière, l'utilisateur sur son PC ne voit pas le changement de serveur (puisque lui, ne contacte que par la VIP).



    1) Installer 2 serveurs OmniOSce et les nommer n1 et n2
    -- Chaque serveur doit avoir 2 interfaces réseaux physiques.

    n1 : 10.10.10.1
    n2 : 10.10.10.2

    -- Mettre à jour l'image système
    (Mettez-vous en root tout le long de la procédure)

    pkg refresh --full ; pkg update

    -- Configurer ntp avec un serveur de temps Français.

    pkg install ntpsec && /usr/bin/ntpdate 0.fr.pool.ntp.org && date && svcadm enable svc:/network/ntp:default

     

    2) Créer les scripts d'attribution/suppression de la VIP :

    -- Créer un dossier pour les futurs scripts sur n1 et n2

    mkdir /HA

    -- Copier/Coller le bloc suivant sur n1 puis sur n2 pour créer les scripts d'ajout et de suppression de la VIP :

    cat <<'EOF' > /HA/vip-up.sh
    #! /bin/sh
    exec 2> /dev/null

    /sbin/ifconfig "$1" addif "$2" netmask 255.255.255.0 up
    EOF

    cat <<'EOF' > /HA/vip-down.sh
    #! /bin/sh
    exec 2> /dev/null

    /sbin/ifconfig "$1" removeif "$2"
    EOF

    -- ne pas oublier de rendre les scripts exécutables sur les 2 serveurs :

    chmod +x /HA/vip-up.sh
    chmod +x /HA/vip-down.sh


    3) Réaliser un test de fonctionnement des scripts sur n1 et sur n2 :
    #-- Attribuer la VIP :

    /HA/vip-up.sh e1000g0 10.10.10.42 ; ipadm

    #-- Supprimer la VIP :

    /HA/vip-down.sh e1000g0 10.10.10.42 ; ipadm


    4) Ecrire le script d'attribution automatique en cas de défaillance d'un serveur
    -- Nous décidons que n1 sera le serveur principal. La VIP lui sera donc attribué.

    /HA/vip-up.sh e1000g0 10.10.10.42 ; ipadm

    -- Sur n2, copier/coller le bloc suivant pour créer le script /HA/failover.sh :

    cat <<'EOF' > /HA/failover.sh
    #!/bin/bash

    # Vérifier si n1 est allumé
    check_server_n1() {
        ping -c 1 10.10.10.1 > /dev/null
        return $?
    }

    # Savoir si n2 est propriétaire de la VIP
    n2_has_vip=false

    # Boucle permettant de monitorer la connexion à n1
    while true; do
        if check_server_n1; then
            echo "n1 est allumé."
            if $n2_has_vip; then
                echo "VIP est sur n2. Suppression de la VIP de n2."
                /HA/vip-down.sh e1000g0 10.10.10.42
                n2_has_vip=false
            else
                echo "Rien à faire"
            fi
        else
            echo "n1 ne répond plus, passage de la VIP à n2."
            if ! $n2_has_vip; then
                /HA/vip-down.sh e1000g0 10.10.10.42
                /HA/vip-up.sh e1000g0 10.10.10.42
                n2_has_vip=true
            fi
        fi
        sleep 0.5  # Ajustez l'intervalle de vérification
    done
    EOF

    -- ne pas oublier d'autoriser l'exécution :

    chmod 740 /HA/failover.sh

     

    4) Réalier le test de failover.

    -- Démarrer le script /HA/failover.sh en tâche de fond sur n2 :

    nohup /HA/failover.sh & # Penser à noter le PID affiché pour pouvoir le virer au cas où


    Faire le test de failover : éteindre n1 et vérifier si n2 s'attribue la VIP automatiquement.
    Puis rallumer n1 et attendre de voir si n2 supprimer la VIP automatiquement.

    Vous pouvez lancer un ping sur la VIP depuis le PC-Client et voir s'il est interrompu durant la passation de la VIP.

    Afin que n1 récupère automatiquement la VIP, il vous faudra écrire un petit script supplémentaire et le déclencher au redémarrage du serveur (par exemple).


    Tags Tags : , , , ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :