OVH Community, votre nouvel espace communautaire.

[How-To] Mesurer le temps de bascule d'une IP-Failover


guiguiabloc
19/07/2009, 20h43
Merci SAP Team - Loup

guiguiabloc
17/07/2009, 07h35
Bonsoir à tous.

Je ne sais pas si cela va servir à beaucoup mais le partage est essentiel.

En cas d'utilisation d'une ip-failover, il peut être interessant de connaître et de mesurer les temps de bascule d'un serveur à un autre.

Un petit script donc pour vous faciliter la tâche (a vous bien entendu de remonter les données dans une bdd ou autre et de grapher tout cela )

La mesure commence a la perte du ping (comprendre dès la bascule)

Code:
#!/bin/bash
#
# Fichier       : time_ipfo
# Description   : Mesure le temps de bascule d'une IP fail over
#

# Definition des variables
TIME=1
T_OUT=3600
CHK=OK
VERB="#"

# Definition des fonctions

   # Fonction usage en cas d'erreur de syntaxe
usage () {
cat << EOF
Usage: time_ipfo [-t time] [-T Timeout][-v] -i 
       time_ipfo -h (help)

EOF
}

   # Fonction help en cas d option -h
help () {
usage

cat << EOF
Mesure le temps de bascule d'une adresse IP FailOver

Options :
  -i : IP Addrs   Adresse de bascule a mesurer
  -t : time       Nombre de secondes entre 2 mesures (defaut 1 s)
  -T : timeout    Temps au dela du quel on arrête la mesure (defaut 1 heure)
  -v : verbose    Affichage des messages
  -h : help       Cette page

EOF
exit 1
}

   # Fonction usage en cas d'erreur de syntaxe
mesure () {
if `ping -c 1 -w $TIME $IPFO > /dev/null 2>&1`
then let CNT=CNT-1
     sleep $TIME
     CHK=OK
else let CNT=CNT-1
     CHK=KO
fi
}

   # Fonction d affichage en mode verbose
printv () {
if (( v_opt == 1 ))
then printf "$1"
fi

}

# Debut du programmme

   # Usage si pas d'option
if [[ $# == 0 ]]
then usage
     exit 255
fi

   # Gestion des options
while getopts i:t:T:vh OPT
do
     case $OPT in
         i) i_opt=1
            IPFO=$OPTARG ;;
         t) t_opt=1
            TIME=$OPTARG ;;
         T) T_opt=1
            T_OUT=$OPTARG ;;
         v) v_opt=1 ;;
         h) help
               exit 255 ;;
         ?) usage
               exit 255 ;;
     esac
done
   # Boucle de mesure si adresse IPFO renseignée
if (( i_opt == 1 ))
then let CNT=T_OUT/TIME
     printv "time_ipfo : Mesure du temps de bascule de l adresse IP $IPFO \n"
     printv "            time=$TIME, timeout=$T_OUT, soit count=$CNT \n"
     printv " \n"
     printv "Vous pouvez lancer la procedure de bascule ...\n"
     while [[ $CNT -gt 1 ]]
     do mesure
        if [[ $CHK == KO  ]]
        then printv " \n"
             printv "L adresse IP $IPFO n est plus joignable, debut mesure\n"
             DEB=$SECONDS
             while [[ $CHK == KO ]] && [[ $CNT -gt 1 ]]
             do mesure
                printv "."
             done
             if [[ $CHK == OK ]]
             then printv " \n\n"
                  printv "L adresse IP $IPFO est joignable, fin mesure \n"
                  FIN=$SECONDS
                  let NB_S=FIN-DEB
                  printv " \n"
                  printf "L adresse IP $IPFO a mis $NB_S secondes pour basculer \n"
                  exit 0
             fi
        fi
     done
     printv " \n"
     printv "Fin de la mesure la duree de $T_OUT secondes du timeout a ete atteinte\n"
else usage
     exit 255
fi