Vrrp

De BlaxWiki
Aller à la navigationAller à la recherche

L'utilisation de Vrrp est utile lorsque nous voulons avoir du failover / redondance entre 2 serveurs. L'interet de vrrp par rapport à hsrp ou autres, c'est que la mac reste la même quelque soit le serveur, ce qui permet une bascule rapide sans problème de cache arp. Comme dans tous les systèmes de failover, une vip est utilisée, et est présente sur le serveur qui est en master.

Le service vrrpd tourne sur 2 serveurs, un doit être en état master et l'autre en backup. Par défaut c'est le serveur A qui est master avec une priorité de 100, et le serveur B en slave avec une priorite de 10. Le serveur A a pour ip 10.253.6.2, le serveur B 10.253.6.3 et la vip est 10.253.6.1.

Pour savoir quel serveur est "master" et possède l'ip 10.253.6.1 (ifconfig ne permet pas de voir cette ip) :

 - faire un ifconfig sur les 2 serveur , le serveur master aura l'adresse MAC suivante : 00:00:5e:00:01:01.
 - faire un atropos --state sur les 2 serveur qui renverra suivant l'état du serveur :
             VRRPD RUN: 1
             VRRPD STATE: STATE MASTER
             UID        PID  PPID  C STIME TTY          TIME CMD
             root      2307     1  0 Jan24 ?        00:00:34 vrrpd -i eth0 -v 1 -p100 10.253.6.1 -M 1 -U /etc/scripts-vrrp/Master.sh -D /etc/scripts-vrrp/Backup.sh

             ou
             VRRPD RUN: 1
             VRRPD STATE: STATE BACKUP

Cette version de vrrp permet de lancer des scripts lorsque le serveur est / passe en master ou en slave. Cela se fait via les arguments -U et -D qui sont dans le script d'init. Cela peut par exemple permettre d'arreter un service dhcpd lorsque le master tombe, et de démarrer dhcpd sur le slave lorsqu il passe master....


Script d'init du serveur A. Le script d'init du serveur B sera le même sauf pour la priorité qui sera inférieur à 100

#! /bin/sh
# Exemple de script de lancement
# set -vx
PATH=/bin:/usr/bin:/sbin:/usr/sbin
pidvrrpd=`pidof -x vrrpd`
horodate=$(date +%d/%m/%Y_%r)
RepStatus=/var/log/
Status=/var/log/vrrp_status.log


case "$1" in
  start)
        echo "."
        mkdir -p $RepStatus
        echo "----------------------------- ">>$Status
        echo "$horodate --> Cde Start VRRP sur $HOSTNAME ">>$Status
        pidof -x vrrpd > /dev/null
        if [ $?  = 1 ]; then
        echo "Process vrrpd inexistant...demarrage en cours "
        vrrpd -i eth0 -v 1 -p100 10.253.6.1 -M 1 -U /etc/scripts-vrrp/Master.sh -D /etc/scripts-vrrp/Backup.sh
        else
        echo "vrrpd existant...arret en cours"
        killall vrrpd
        echo "demarrage vrrp"
        #/etc/scripts/vrrp_on.sh > /dev/null
        echo "Nouveaux pid vrrp : $pidvrrpd "
        fi
        ;;

 stop)
        echo "."
        echo "----------------------------- ">>$Status
        echo "$horodate --> Cde Stop VRRP sur $HOSTNAME ">>$Status
        pidof -x vrrpd > /dev/null
        if [ $? = 0 ]; then
        echo "Arret de vrrpd"
        #/etc/scripts/VRRP/Backup.sh &
        killall vrrpd
        echo -n "Process vrrpd arrete(s)."
        else
        echo "pas de process vrrpd "
        fi
        ;;

  *)
        echo "Usage: /etc/init.d/vrrp {start|stop|}" >&2
        exit 1
        ;;
esac
exit 0