Ucarp

From AleikoumWiki

(Difference between revisions)
Jump to: navigation, search
m (Liens)
m
Line 1: Line 1:
-
Voila ce que j'ai retenu de la mise en place d'Ucarp... bon je risque de corriger plus d'une fois cette page mais apres tout c'est un wiki et c'est fait pour ca !
+
== Objectif ==
-
A VENIR !!!!
+
L'objectif de cette page est de présenter l'outil UCARP et une façon de le déployer sur une Debian Lenny.
 +
== UCARP en théorie ==
-
== Objectif ==
+
Ucarp est un outil de « haute disponibilité » permettant l'usage d'adresses IP virtuelles communes à plusieurs ordinateurs offrant un même service redondant sur un réseau.<br/>
 +
Chaque élément du « cluster » (à partir de 2 serveurs) émet ainsi sur le réseau des signes de vie de façon à ce que les autres éléments ayant la même adresse IP virtuelle, prennent le relais lorsque l'élément défaillant (ou en maintenance) ne donne plus ces signes de vie. Ucarp est en système de « failover » automatique sécurisé, simple et efficace.<br/>
 +
<br/>
 +
<br/>
 +
== UCARP en pratique ==
-
Imaginons la situation suivante : <br />
+
UCARP peut être utilisé comme un process classique ou bien comme un daemon. C'est le deuxième cas qui nous intéresse et qui sera mis en avant dans cette page.<br/>
-
On a une machine tres critique (base de donnees, web ou autre...) que l'on souhaite pouvoir remonter, rapidement et a distance, en cas de probleme.<br />
+
Dans cette page on va supposer que l'interface virtuelle sera eth0:1 et sera bindée sur eth0. L'IP virtuelle partagée sera 10.75.0.55. 10.75.0.50 sera le master et 10.75.0.51 le backup... allez c'est parti !<br/>
-
...<br />
+
<br/>
-
C'est une problematique standard pour un admin reseau et on va voir comment avec Ucarp, on va pouvoir resoudre ce soucis.<br />
+
<br/>
-
<br />
+
=== installation ===
-
'''/!\ Attention :''' cette procedure explique comment mettre en place Ucarp et comment l'exploiter ! Je n'aborderai jamais la problematique de synchronisation entre les deux machines. Je pars du principe que ces machines sont synchros !<br />
+
<br/>
-
<br />
+
L'installation d'UCARP se fait de façon classique :
 +
<pre>
 +
$ sudo apt-get install ucarp
 +
</pre>
-
== La Mise en Place ==
+
Si vous faites un ''dpkg -L ucarp'', vous risquez d'être déçu... en effet à part le binaire et les pages de man qui vont bien le contenu est assez pauvre : rien pour le faire fonctionner en mode daemon dès le début. Je suis mauvaise langue UCARP vient aussi avec les scripts pour faire le up et le down d'une interface réseau donnée... bref c'est très léger et dans la suite nous allons présenter une idée de déploiement qui rendra plus simple l'exploitation de cet outil<br/>
 +
<br/>
 +
<br/>
 +
=== pour quelques scripts en plus... ===
 +
<br/>
 +
==== /usr/share/ucarp/vip-up_eth0:1 ====
 +
c'est le script qui sera appelé pour monter l'interface virtuelle partagée
 +
<pre>
 +
$ cat /usr/share/ucarp/vip-up_eth0:1
 +
#!/bin/sh
 +
/sbin/ifup eth0:1
 +
</pre>
 +
<br/>
 +
<br/>
 +
==== /usr/share/ucarp/vip-down_eth0:1 ====
 +
c'est le script qui sera appelé pour éteindre l'interface virtuelle partagée
 +
<pre>
 +
$ cat /usr/share/ucarp/vip-down_eth0:1
 +
#!/bin/sh
-
=== Environnement ===
+
/sbin/ifdown eth0:1
 +
</pre>
 +
<br/>
 +
<br/>
 +
==== /etc/init.d/ucarp-init.sh ====
 +
Voici un script d'init assez simple et succinct pour utiliser UCARP.<br/>
 +
'''Attention :''' ce script n'a un intêret que si vous utilisez la configuration proposée plus bas dans la page.
 +
<pre>
 +
$ cat /etc/init.d/ucarp-init.sh
 +
#!/bin/sh
-
J'ai pu tester Ucarp via mon travail, ou les linux sont des CentOS (RedHat like).<br />
+
### BEGIN INIT INFO
-
Dans notre cas, on souhaite mettre un failover sur un serveur de base de donnees.<br />
+
# Provides: ucarp
-
Pour cela on va considerer 2 machines ''identiques'', l'une jouera le role de Master (qui a pour adresse 10.10.10.110) et l'autre donc de Slave (qui a pour adresse 10.10.10.107).<br />
+
# Required-Start: $syslog
-
La base de donnees doit etre accessible sur l'adresse 10.10.10.100 !<br />
+
# Required-Stop: $syslog
-
<br />
+
# Default-Start: 2 3 4 5
-
Bon maintenant on sait ce qu'on va mettre en place il ne reste plus qu'a le faire !!
+
# Default-Stop: 0 1 6
 +
# Short-Description: UCARP - failover IP
 +
### END INIT INFO
 +
# v 0.1 - 20100202
 +
# by Erwan 'Labynocle' Ben Souiden
 +
# erwan@aleikoum.net
-
=== Installation et Scripts indispensables ===
+
UCARP_BIN='/usr/sbin/ucarp'
 +
UCARP_PID_FILE='/var/run/ucarp.pid'
 +
UCARP_CONF_FILE="/etc/ucarp/ucarp.conf"
 +
# some basic checks
 +
[ ! -x $UCARP_BIN ] && echo "ERROR - $UCARP_BIN doesn't exist or not executable !" && exit 1
 +
[ ! -x "$UCARP_CONF_FILE" ] && echo "ERROR - $UCARP_CONF_FILE doesn't exist or not executable !" && exit 1
 +
. $UCARP_CONF_FILE
-
/etc/sysconfig/carp/vip-down
 
-
<pre>
 
-
#!/bin/sh
 
-
exec /sbin/ifconfig $1 down
 
-
</pre>
 
 +
case "$1" in
 +
start)
 +
echo "Starting UCARP as a daemon with $UCARP_CONF_FILE as configuration file..."
-
/etc/sysconfig/carp/vip-up
+
[ -f $UCARP_PID_FILE ] && echo "ERROR - $UCARP_PID_FILE exists, maybe ucarp is still running" && exit 1
-
<pre>
+
-
#!/bin/sh
+
-
# We could use ifup directly, but it complains if the address is already used
+
-
. /etc/sysconfig/network-scripts/ifcfg-$1
+
-
exec /sbin/ifconfig $1 ${IPADDR} netmask ${NETMASK} up
+
-
</pre>
+
-
=== Sur le Master ===
+
if [ "$UCARP_MASTER" = 'yes' ]
 +
then
 +
[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P -B"
 +
$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P -B
 +
else
 +
[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -B -k $UCARP_ADVSKEW"
 +
$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -B -k $UCARP_ADVSKEW
 +
fi
-
/etc/sysconfig/carp/vip-100.conf
+
[ $? -ne 0 ] && echo "Starting UCARP as a daemon...FAILED" && exit 1
-
<pre>
+
pidof "$UCARP_BIN" > $UCARP_PID_FILE
-
# Virtual IP configuration file for UCARP
+
chmod 700 $UCARP_PID_FILE
-
# The number (from 001 to 255) in the name of the file is the identifier
+
echo "Starting UCARP as a daemon (pid : `cat $UCARP_PID_FILE`)...OK"
-
PASSWORD="plop"
+
;;
-
BIND_INTERFACE="eth0"
+
start-nodaemon)
-
VIP_INTERFACE="eth0:0"
+
echo "Starting UCARP with $UCARP_CONF_FILE as configuration file..."
-
OPTIONS="-k 1 -P"
+
if [ "$UCARP_MASTER" = 'yes' ]
 +
then
 +
[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P"
 +
$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P
 +
else
 +
[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -k $UCARP_ADVSKEW"
 +
$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -k $UCARP_ADVSKEW
 +
fi
 +
;;
 +
stop)
 +
echo "Stopping UCARP daemon (pid : `cat $UCARP_PID_FILE`)...OK"
 +
DAEMON_PID=`cat $UCARP_PID_FILE`
 +
kill -15 $DAEMON_PID
 +
sleep 2
 +
rm -f $UCARP_PID_FILE
 +
;;
 +
status)
 +
if [ -f "$UCARP_PID_FILE" ]
 +
then
 +
echo "UCARP is running (pid : `cat $UCARP_PID_FILE`)"
 +
else
 +
echo "UCARP is not running"
 +
fi
 +
;;
 +
restart|force-reload)
 +
$0 stop
 +
sleep 5
 +
$0 start
 +
;;
 +
*)
 +
echo "Usage: $0 {start|start-nodaemon|stop|status|restart|force-reload}"
 +
exit 1
 +
;;
 +
esac
 +
exit 0
</pre>
</pre>
-
/etc/sysconfig/network-scripts/ifcfg-eth0
+
nota : on peut remarquer 2 type de start :
 +
* start : qui va démarrer UCARP en tant que daemon avec la configuration que vous allez définir suivant le modèle décrit dans le prochain paragraphe. Le log d'UCARP sera automatiquement dirigé dans votre syslog
 +
* start-nodaemon : UCARP sera lancé comme un process qqconque (donc vous ne rendra pas la main) et vous aurez le log directement sur vos sorties standards<br/>
 +
<br/>
 +
<br/>
 +
=== configuration ===
 +
<br/>
 +
Pour la configuration j'ai créé /etc/ucarp qui contient le fichier de configuration ucarp.conf et le fichier contenant le password (plus sécure d'utiliser un fichier comme celui ci car sinon le password apparaît quand on fait un ps).<br/>
 +
<br/>
 +
<br/>
 +
==== /etc/ucarp/ucarp.conf ====
 +
C'est en fait un script shell dans lequel je définis tout un tas de paramètres
<pre>
<pre>
-
DEVICE=eth0
+
$ cat /etc/ucarp/ucarp.conf
-
ONBOOT=yes
+
#!/bin/sh
-
BOOTPROTO=static
+
-
IPADDR=10.10.10.110
+
-
NETMASK=255.255.255.0
+
-
</pre>
+
 +
# v 0.1 - 20100202
 +
# by Erwan 'Labynocle' Ben Souiden
 +
# erwan@aleikoum.net
-
/etc/sysconfig/network-scripts/ifcfg-eth0:0
+
# activation du Debug
-
<pre>
+
DEBUG_VALUE=1
-
DEVICE=eth0:0
+
-
BOOTPROTO=static
+
-
IPADDR=10.10.10.100
+
-
NETMASK=255.255.255.0
+
-
ONBOOT=no
+
-
ONPARENT=no
+
-
</pre>
+
-
=== Sur le Backup ===
+
# ce serveur est il le master
 +
UCARP_MASTER='yes'
 +
# interface bindee par UCARP
 +
UCARP_INTERFACE='eth0'
-
/etc/sysconfig/carp/vip-100.conf
+
# frequence des alertes
-
<pre>
+
UCARP_ADV='1'
-
# Virtual IP configuration file for UCARP
+
-
# The number (from 001 to 255) in the name of the file is the identifier
+
-
PASSWORD="plop"
+
-
BIND_INTERFACE="eth0"
+
-
VIP_INTERFACE="eth0:1"
+
-
OPTIONS="-k 10 -P"
+
-
</pre>
+
 +
# adresse IP physique associee a $UCARP_INTERFACE
 +
UCARP_ADDR_PHY='10.75.0.50'
-
/etc/sysconfig/network-scripts/ifcfg-eth0
+
# ID du serveur Virtuel
-
<pre>
+
UCARP_VID='55'
-
DEVICE=eth0
+
 
-
BOOTPROTO=static
+
# priorite [0-255], plus c'est bas plus il a des chances d etre le master
-
IPADDR=10.10.10.107
+
UCARP_ADVSKEW='100'
-
NETMASK=255.255.255.0
+
 
-
ONBOOT=yes
+
# chemin vers le fichier ucarp.passwd
-
TYPE=Ethernet
+
UCARP_PASSWD_FILE='/etc/ucarp/ucarp.passwd'
 +
 
 +
# adresse IP virtuelle geree par UCARP
 +
UCARP_ADDR_VIR='10.75.0.55'
 +
 
 +
# chemin vers le script pour monter l'interface virtuelle
 +
UCARP_UP_INT_SCRIPT='/usr/share/ucarp/vip-up_eth0:1'
 +
 
 +
# chemin vers le script pour supprimer l'interface virtuelle
 +
UCARP_DOWN_INT_SCRIPT='/usr/share/ucarp/vip-down_eth0:1'
</pre>
</pre>
 +
nota :
 +
* UCARP_VID : doit avoir la même valeur pour tous les serveurs qui participent au partage de la même IP virtuelle
 +
* UCARP_ADVSKEW : il faut avoir une valeur différente pour chaque serveurs afin de mieux maîtriser les priorités<br/>
 +
<br/>
 +
<br/>
 +
==== /etc/ucarp/ucarp.passwd ====
 +
Ce fichier contient le password qu'utilisent tous les les serveurs qui participent au partage de la même IP virtuelle.<br/>
 +
Le password doit être en clair et être sur la première ligne du fichier.
-
/etc/sysconfig/network-scripts/ifcfg-eth0:1
 
<pre>
<pre>
-
DEVICE=eth0:1
+
$ cat /etc/ucarp/ucarp.passwd
-
BOOTPROTO=static
+
lepassword
-
IPADDR=10.10.10.100
+
-
NETMASK=255.255.255.0
+
-
ONBOOT=no
+
-
ONPARENT=no
+
</pre>
</pre>
-
== Liens ==
+
nota :
 +
* afin d'être cohérent il faut faire un "chmod 700 /etc/ucarp/ucarp.passwd && chown root:root /etc/ucarp/ucarp.passwd"
 +
<br/>
 +
<br/>
 +
=== exploitation ===
-
http://gentoo-wiki.com/HOWTO_Setup_IP_failover_with_UCARP <br />
+
l'exploitation devient du coup très simple.
-
http://linuxtips.castres-wireless.org/IMG/_article_PDF/article_20.pdf
+
Pour démarrer UCARP :
 +
<pre>
 +
$ sudo /etc/init.d/ucarp-init.sh start
 +
</pre>
 +
Pour stopper UCARP :
 +
<pre>
 +
$ sudo /etc/init.d/ucarp-init.sh stop
 +
</pre>
 +
Pour connaître le status d'UCARP :
 +
<pre>
 +
$ sudo /etc/init.d/ucarp-init.sh status
 +
</pre>
 +
== Liens / Références ==
 +
http://www.ucarp.org/ : site officiel

Revision as of 14:17, 2 February 2010

Contents

Objectif

L'objectif de cette page est de présenter l'outil UCARP et une façon de le déployer sur une Debian Lenny.

UCARP en théorie

Ucarp est un outil de « haute disponibilité » permettant l'usage d'adresses IP virtuelles communes à plusieurs ordinateurs offrant un même service redondant sur un réseau.
Chaque élément du « cluster » (à partir de 2 serveurs) émet ainsi sur le réseau des signes de vie de façon à ce que les autres éléments ayant la même adresse IP virtuelle, prennent le relais lorsque l'élément défaillant (ou en maintenance) ne donne plus ces signes de vie. Ucarp est en système de « failover » automatique sécurisé, simple et efficace.


UCARP en pratique

UCARP peut être utilisé comme un process classique ou bien comme un daemon. C'est le deuxième cas qui nous intéresse et qui sera mis en avant dans cette page.
Dans cette page on va supposer que l'interface virtuelle sera eth0:1 et sera bindée sur eth0. L'IP virtuelle partagée sera 10.75.0.55. 10.75.0.50 sera le master et 10.75.0.51 le backup... allez c'est parti !


installation


L'installation d'UCARP se fait de façon classique :

$ sudo apt-get install ucarp

Si vous faites un dpkg -L ucarp, vous risquez d'être déçu... en effet à part le binaire et les pages de man qui vont bien le contenu est assez pauvre : rien pour le faire fonctionner en mode daemon dès le début. Je suis mauvaise langue UCARP vient aussi avec les scripts pour faire le up et le down d'une interface réseau donnée... bref c'est très léger et dans la suite nous allons présenter une idée de déploiement qui rendra plus simple l'exploitation de cet outil


pour quelques scripts en plus...


/usr/share/ucarp/vip-up_eth0:1

c'est le script qui sera appelé pour monter l'interface virtuelle partagée

$ cat /usr/share/ucarp/vip-up_eth0:1
#!/bin/sh

/sbin/ifup eth0:1



/usr/share/ucarp/vip-down_eth0:1

c'est le script qui sera appelé pour éteindre l'interface virtuelle partagée

$ cat /usr/share/ucarp/vip-down_eth0:1
#!/bin/sh

/sbin/ifdown eth0:1



/etc/init.d/ucarp-init.sh

Voici un script d'init assez simple et succinct pour utiliser UCARP.
Attention : ce script n'a un intêret que si vous utilisez la configuration proposée plus bas dans la page.

$ cat /etc/init.d/ucarp-init.sh 
#!/bin/sh

### BEGIN INIT INFO
# Provides:             ucarp
# Required-Start:       $syslog
# Required-Stop:        $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    UCARP - failover IP
### END INIT INFO

# v 0.1 - 20100202
# by Erwan 'Labynocle' Ben Souiden
# erwan@aleikoum.net

UCARP_BIN='/usr/sbin/ucarp'
UCARP_PID_FILE='/var/run/ucarp.pid'
UCARP_CONF_FILE="/etc/ucarp/ucarp.conf"

# some basic checks 
[ ! -x $UCARP_BIN ] && echo "ERROR - $UCARP_BIN doesn't exist or not executable !" && exit 1
[ ! -x "$UCARP_CONF_FILE" ] && echo "ERROR - $UCARP_CONF_FILE doesn't exist or not executable !" && exit 1

. $UCARP_CONF_FILE


case "$1" in
	start)
		echo "Starting UCARP as a daemon with $UCARP_CONF_FILE as configuration file..."

		[ -f $UCARP_PID_FILE ] && echo "ERROR - $UCARP_PID_FILE exists, maybe ucarp is still running" && exit 1

		if [ "$UCARP_MASTER" = 'yes' ]
		then
			[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P -B"
			$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P -B
		else
			[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -B -k $UCARP_ADVSKEW"
			$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -B -k $UCARP_ADVSKEW
		fi

		[ $? -ne 0 ] && echo "Starting UCARP as a daemon...FAILED" && exit 1
		pidof "$UCARP_BIN" > $UCARP_PID_FILE
		chmod 700 $UCARP_PID_FILE
		echo "Starting UCARP as a daemon (pid : `cat $UCARP_PID_FILE`)...OK"
	;;
	start-nodaemon)
		echo "Starting UCARP with $UCARP_CONF_FILE as configuration file..."
		if [ "$UCARP_MASTER" = 'yes' ]
		then
			[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P"
			$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -P
		else
			[ $DEBUG_VALUE -ge 1 ] && echo "DEBUG - $UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -k $UCARP_ADVSKEW"
			$UCARP_BIN -i $UCARP_INTERFACE -b $UCARP_ADV -s $UCARP_ADDR_PHY -v $UCARP_VID -o $UCARP_PASSWD_FILE -a $UCARP_ADDR_VIR -u $UCARP_UP_INT_SCRIPT -d $UCARP_DOWN_INT_SCRIPT -z -k $UCARP_ADVSKEW
		fi
	;;
	stop)
		echo "Stopping UCARP daemon (pid : `cat $UCARP_PID_FILE`)...OK"
		DAEMON_PID=`cat $UCARP_PID_FILE`
		kill -15 $DAEMON_PID
		sleep 2
		rm -f $UCARP_PID_FILE
	;;
	status)
		if [ -f "$UCARP_PID_FILE" ]
		then
			echo "UCARP is running (pid : `cat $UCARP_PID_FILE`)"
		else
			echo "UCARP is not running"
		fi
	;;
	restart|force-reload)
		$0 stop
		sleep 5
		$0 start
	;;
	*)
		echo "Usage: $0 {start|start-nodaemon|stop|status|restart|force-reload}"
		exit 1
	;;
	esac
exit 0

nota : on peut remarquer 2 type de start :

  • start : qui va démarrer UCARP en tant que daemon avec la configuration que vous allez définir suivant le modèle décrit dans le prochain paragraphe. Le log d'UCARP sera automatiquement dirigé dans votre syslog
  • start-nodaemon : UCARP sera lancé comme un process qqconque (donc vous ne rendra pas la main) et vous aurez le log directement sur vos sorties standards



configuration


Pour la configuration j'ai créé /etc/ucarp qui contient le fichier de configuration ucarp.conf et le fichier contenant le password (plus sécure d'utiliser un fichier comme celui ci car sinon le password apparaît quand on fait un ps).


/etc/ucarp/ucarp.conf

C'est en fait un script shell dans lequel je définis tout un tas de paramètres

$ cat /etc/ucarp/ucarp.conf 
#!/bin/sh

# v 0.1 - 20100202
# by Erwan 'Labynocle' Ben Souiden
# erwan@aleikoum.net

# activation du Debug
DEBUG_VALUE=1

# ce serveur est il le master
UCARP_MASTER='yes'

# interface bindee par UCARP
UCARP_INTERFACE='eth0'

# frequence des alertes
UCARP_ADV='1'

# adresse IP physique associee a $UCARP_INTERFACE
UCARP_ADDR_PHY='10.75.0.50'

# ID du serveur Virtuel
UCARP_VID='55'

# priorite [0-255], plus c'est bas plus il a des chances d etre le master
UCARP_ADVSKEW='100'

# chemin vers le fichier ucarp.passwd
UCARP_PASSWD_FILE='/etc/ucarp/ucarp.passwd'

# adresse IP virtuelle geree par UCARP
UCARP_ADDR_VIR='10.75.0.55'

# chemin vers le script pour monter l'interface virtuelle
UCARP_UP_INT_SCRIPT='/usr/share/ucarp/vip-up_eth0:1'

# chemin vers le script pour supprimer l'interface virtuelle
UCARP_DOWN_INT_SCRIPT='/usr/share/ucarp/vip-down_eth0:1'

nota :

  • UCARP_VID : doit avoir la même valeur pour tous les serveurs qui participent au partage de la même IP virtuelle
  • UCARP_ADVSKEW : il faut avoir une valeur différente pour chaque serveurs afin de mieux maîtriser les priorités



/etc/ucarp/ucarp.passwd

Ce fichier contient le password qu'utilisent tous les les serveurs qui participent au partage de la même IP virtuelle.
Le password doit être en clair et être sur la première ligne du fichier.

$ cat /etc/ucarp/ucarp.passwd 
lepassword

nota :

  • afin d'être cohérent il faut faire un "chmod 700 /etc/ucarp/ucarp.passwd && chown root:root /etc/ucarp/ucarp.passwd"



exploitation

l'exploitation devient du coup très simple. Pour démarrer UCARP :

$ sudo /etc/init.d/ucarp-init.sh start

Pour stopper UCARP :

$ sudo /etc/init.d/ucarp-init.sh stop

Pour connaître le status d'UCARP :

$ sudo /etc/init.d/ucarp-init.sh status

Liens / Références

http://www.ucarp.org/ : site officiel

Personal tools