Vrrp
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