• Haute Disponibilité avec HAST et CARP et ZFS

    Soit 2 serveurs nX sous FreeBSD 14.0.
    On considère la configuration réseau effective sur les serveurs :
    10.10.10.10    n1
    10.10.10.20    n2

    Chaque serveur possède 2 supports de stockage.
     - Un support pour le système,
     - l'autre pour le stockage des données, qui sera dévolu à HAST (genre 16Go).
     Le second support fait la même taille sur les 2 serveurs.

    Nous aurons besoin d'une IP libre sur le réseau 10.10.10.0/24 pour notre VIP
    Décidons par exemple que la VIP aura pour IP : 10.10.10.50


    ### SUR n1
    - Vérifier le nom de la carte réseau connectée :

    ifconfig # prenons em0 pour exemple

    - Configurer le bon nom d'hôte, la bonne adresse IP et la route par défaut puis redémarrez

    sysrc hostname=n1
    sysrc ifconfig_em0="inet 10.10.10.10 netmask 255.255.255.0"
    sysrc defaultrouter="10.10.10.1"
    reboot


    ### SUR n2
    - Vérifier le nom de la carte réseau connectée :

    ifconfig # prenons em0 pour exemple

    - Configurer le bon nom d'hôte, la bonne adresse IP et la route par défaut puis redémarrez

    sysrc hostname=n2
    sysrc ifconfig_em0="inet 10.10.10.20 netmask 255.255.255.0"
    sysrc defaultrouter="10.10.10.1"
    eboot


    ### SUR n1 ET n2 :
    - Ajouter le service pour un lancement au démarrage des serveurs :

    sysrc hastd_enable="YES"

    - Renseigner le fichier /etc/hosts pour que chaque nX connaisse l'IP de l'autre :

    10.10.10.10    n1
    10.10.10.20    n2

    - Repérer les périphériques de stockage dévolus pour HAST :

    camcontrol devlist

    (on va dire que sur n1 j'ai ada1 et sur n2 ada1 aussi)

    - Créer le fichier de configuration /etc/hast.conf

    resource shared {

        on n1 {
            local /dev/ada1
            remote n2
        }

        on n2 {
            local /dev/ada1
            remote n1
        }

        replication memsync
    }


    # Démarrer le service HAST :

    service hastd start


    ### SUR n1
    # Définir n1 comme serveur primaire :

    hastctl role init shared
    hastctl create shared
    hastctl role primary shared



    ### SUR n2
    # Définir n2 comme serveur secondaire :

    hastctl role init shared
    hastctl create shared
    hastctl role secondary shared



    ### SUR n1 ET n2

    # Vérifier l'état de la configuration HAST :

    hastctl status shared # il doit être "completed" sur les n1 et n2


    # LA CONFIGURATION DE HAST EST TERMINEE.



    ##############################
    # CONFIGURATION DU POOL ZFS

    ### SUR n1

    - Créer le pool ZFS sur le périphérique HAST :

    zpool create hastpool /dev/hast/shared

    - Créer un système de fichiers ZFS

    zfs create hastpool/shared


    # LA CONFIGURATION ZFS EST TERMINEE.


    ##############################
    # TESTER HAST MANUELLEMENT (AVANT DE METTRE CARP EN PLACE)

    ### SUR n1

    # Créer un fichier de test :

    echo "Hello from n1" > /hastpool/shared/testfile.txt

    - Changer le rôle de n1 à secondaire :

    zpool export hastpool
    hastctl role secondary shared


    ### SUR n2
    # Changer le rôle de n2 à primaire :

    hastctl role primary shared
    zpool import hastpool

    - Regarder si le fichier y est :

    cat /hastpool/shared/testfile.txt


    # LE TEST EST CONCLUANT
    # REFAIRE LE CHEMIN INVERSE POUR REMETTRE n1 EN PRIMARY


    ##############################
    # QUE FAIRE EN CAS DE PLANTAGE ET DE REDEMARRAGE DES 2 SERVEURS  :

    ### SUR n1 ET n2 :

    # Démarrer le service HAST :

    service hastd start



    ### SUR n1
    # Définir n1 comme serveur primaire

    hastctl role init shared
    hastctl create shared
    hastctl role primary shared



    ### SUR n2
    # Définir n2 comme serveur secondaire :

    hastctl role init shared
    hastctl create shared
    hastctl role secondary shared


    ### SUR n1
    # Remonter le pool

    zpool import hastpool




    ##############################
    # CONFIGURATION DE UCARP POUR LA HAUTE DISPONIBILITE (ECHANGE DE VIP)

    ### SUR n1 ET n2

    - Installer ucarp

    pkg ins -y ucarp


    # Créer les scripts de montée et descente de la VIP :
    -
    /usr/local/etc/ucarp-up.sh :

    #!/bin/sh
    /sbin/ifconfig $1 alias $2 netmask 255.255.255.255

    - /usr/local/etc/ucarp-down.sh :

    #!/bin/sh
    /sbin/ifconfig $1 -alias $2 2>/dev/null

    - Ne pas oublier de les rendre exécutables :

    chmod +x /usr/local/etc/ucarp-up.sh
    chmod +x /usr/local/etc/ucarp-down.sh

    - Créer un script de démarrage personnalisé : /usr/local/etc/rc.d/ucarp_custom

    #!/bin/sh

    # PROVIDE: ucarp_custom
    # REQUIRE: NETWORKING
    # BEFORE:  DAEMON
    # KEYWORD: shutdown

    . /etc/rc.subr

    name="ucarp_custom"
    rcvar="ucarp_custom_enable"

    start_cmd="${name}_start"
    stop_cmd="${name}_stop"

    ucarp_custom_start() {
        /usr/local/sbin/ucarp -i ${ucarp_if} -s ${ucarp_src} -v ${ucarp_vhid} -p ${ucarp_pass} -a ${ucarp_addr} -b ${ucarp_advbase} -k ${ucarp_advskew} -P -u /usr/local/etc/ucarp-up.sh -d /usr/local/etc/ucarp-down.sh &
        echo $! > /var/run/ucarp_${ucarp_vhid}.pid
    }

    ucarp_custom_stop() {
        if [ -f /var/run/ucarp_${ucarp_vhid}.pid ]; then
            kill $(cat /var/run/ucarp_${ucarp_vhid}.pid)
            rm /var/run/ucarp_${ucarp_vhid}.pid
        fi
    }

    load_rc_config $name
    run_rc_command "$1"

    - Ne pas oublier de le rendre exécutable :

    chmod +x /usr/local/etc/rc.d/ucarp_custom



    ### SUR n1 uniquement :
    - Pour un lancement des options de ucarp au démarrage du service :

    sysrc ucarp_custom_enable="YES"
    sysrc ucarp_if="em0"
    sysrc ucarp_src="10.10.10.10"
    sysrc ucarp_pass="testpass"
    sysrc ucarp_vhid="1"
    sysrc ucarp_addr="10.10.10.50"
    sysrc ucarp_advbase="1"
    sysrc ucarp_advskew="1"




    ### SUR n2 uniquement :
    - Pour un lancement des options de ucarp au démarrage du service :

    sysrc ucarp_custom_enable="YES"
    sysrc ucarp_if="em0"
    sysrc ucarp_src="10.10.10.20"
    sysrc ucarp_pass="testpass"
    sysrc ucarp_vhid="1"
    sysrc ucarp_addr="10.10.10.50"
    sysrc ucarp_advbase="1"
    sysrc ucarp_advskew="100"




    ### SUR n1 PUIS n2 :
    # Démarrer le protocole CARP :

    service ucarp_custom start


    # LE SYSTEME DE HA EST EN PLACE



    ##############################
    # TEST FINAL DE LA HA :

    ### SUR n1

    service ucarp_custom start


    ### SUR n2

    service ucarp_custom start


    ### SUR n1

    ifconfig em0

    # (vous devez voir l'attribution de la VIP sur em0)


    ### SUR n1
    # A présent, c'est le grand test !
    # Eteignez n1 ! et regardez ce qui se passe sur le prompt de n2 :

    poweroff


    ### SUR n2
    # Regardez l'attribution de la VIP

    ifconfig em0


    # LE TEST EST CONCLUANT


    ### SUR n1
    # Rallumer n1 à présent et regarder si la VIP revient sur n1

    ifconfig em0

    # (oui, la VIP est revenue sur n1)


    ##############################
    # importation forcée du pool

    # Nous avons un problème.
    # Si n1 tombe, n2 prend le relais de la VIP. Cela fonctionne !
    # Mais, le pool hastpool ne se réimporte pas automatiquement... Il faut le remonter manuellement pour l'instant (je vous laisse scripter ça !)






    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 :