Ucarp

From AleikoumWiki

(Difference between revisions)
Jump to: navigation, search
m
Current revision (16:28, 2 February 2010) (edit) (undo)
m (configuration)
 
Line 144: Line 144:
<br/>
<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/>
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/network/interface ====
 +
Ajouter l'interface eth0:1 dans le fichier de configuration des interfaces réseaux.<br/>
 +
<pre>
 +
$ cat /etc/network/interface
 +
# The loopback network interface
 +
auto lo
 +
iface lo inet loopback
 +
 +
# The primary network interface
 +
auto eth0
 +
iface eth0 inet static
 +
address 10.75.0.50
 +
gateway 10.75.0.254
 +
netmask 255.255.192.0
 +
broadcast 10.75.63.255
 +
 +
# post-up ethtool -K eth0 tx off
 +
 +
#
 +
# The commented out line above will disable TCP checksumming which
 +
# might resolve problems for some users. It is disabled by default
 +
#
 +
 +
 +
#auto eth0:1
 +
iface eth0:1 inet static
 +
address 10.75.0.55
 +
netmask 255.255.192.0
 +
</pre>
<br/>
<br/>
<br/>
<br/>
Line 208: Line 239:
<br/>
<br/>
<br/>
<br/>
 +
=== exploitation ===
=== exploitation ===

Current revision

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/network/interface

Ajouter l'interface eth0:1 dans le fichier de configuration des interfaces réseaux.

$ cat /etc/network/interface
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
 address 10.75.0.50
 gateway 10.75.0.254
 netmask 255.255.192.0
  broadcast 10.75.63.255
 
 # post-up  ethtool -K eth0 tx off

#
# The commented out line above will disable TCP checksumming which
# might resolve problems for some users.  It is disabled by default
#


#auto eth0:1
iface eth0:1 inet static
 address 10.75.0.55
 netmask 255.255.192.0



/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