Différences entre versions de « Ucarp »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
 
(13 versions intermédiaires par le même utilisateur non affichées)
Ligne 38 : Ligne 38 :
 
* [[resolv.conf|Configuration du client DNS]]
 
* [[resolv.conf|Configuration du client DNS]]
 
* [[ifcfg-ethX|Paramétrer sa carte réseau]]
 
* [[ifcfg-ethX|Paramétrer sa carte réseau]]
 +
*[[SELinux#Changement_d.27.C3.A9tat|Désactiver SELinux]]
  
 
Une fois ces étapes effectuées, entrons dans le vif du sujet !
 
Une fois ces étapes effectuées, entrons dans le vif du sujet !
Ligne 98 : Ligne 99 :
  
 
= Configuration =
 
= Configuration =
 +
== eth0==
 
On va maintenant éditer le fichier ''/etc/ucarp/vip-001.conf'' pour y mettre les lignes suivantes :
 
On va maintenant éditer le fichier ''/etc/ucarp/vip-001.conf'' pour y mettre les lignes suivantes :
 
{|align="center" border="1"
 
{|align="center" border="1"
Ligne 108 : Ligne 110 :
 
ID=001
 
ID=001
 
# Network Interface
 
# Network Interface
BIND_INTERFACE= "eth0"
+
BIND_INTERFACE="eth0"
 
# IP de fw1
 
# IP de fw1
SOURCE_ADDRESS= "192.168.1.200"
+
SOURCE_ADDRESS="192.168.1.200"
 
# IP Virtuel
 
# IP Virtuel
VIP_ADDRESS= "192.168.1.202"
+
VIP_ADDRESS="192.168.1.202"
 
# Mot de passe
 
# Mot de passe
PASSWORD= "password"
+
PASSWORD="password"
 
# Fréquence des paquets de synchro
 
# Fréquence des paquets de synchro
 
ADVBASE=1
 
ADVBASE=1
 
# Pour voir toutes les options: ucarp --help
 
# Pour voir toutes les options: ucarp --help
OPTIONS= "-k 1 --shutdown"
+
OPTIONS="--shutdown --preempt"
 
</pre>
 
</pre>
 
||  
 
||  
Ligne 125 : Ligne 127 :
 
ID=001
 
ID=001
 
# Network Interface
 
# Network Interface
BIND_INTERFACE= "eth0"
+
BIND_INTERFACE="eth0"
 
# IP de fw1
 
# IP de fw1
SOURCE_ADDRESS= "192.168.1.201"
+
SOURCE_ADDRESS="192.168.1.201"
 
# IP Virtuel
 
# IP Virtuel
VIP_ADDRESS= "192.168.1.202"
+
VIP_ADDRESS="192.168.1.202"
 
# Mot de passe
 
# Mot de passe
PASSWORD= "password"
+
PASSWORD="password"
 
# Fréquence des paquets de synchro
 
# Fréquence des paquets de synchro
 
ADVBASE=1
 
ADVBASE=1
 
# Pour voir toutes les options: ucarp --help
 
# Pour voir toutes les options: ucarp --help
OPTIONS= "-k 10 --shutdown"
+
OPTIONS="--shutdown --preempt"
 
</pre>
 
</pre>
 
|}
 
|}
 +
 +
==Les options==
 
La partie ''OPTIONS'' permet de définir plus finement le comportement du groupe :
 
La partie ''OPTIONS'' permet de définir plus finement le comportement du groupe :
* -k : permet de définir une priorité. Celui avec la plus base est ''master''
+
* -k : permet de définir une priorité. Celui avec la plus base est ''master'', cette option rend ''--preempt'' caduque.
 
* --shutdown : déclenche l'exécution du script de fermeture à l'extinction de la machine
 
* --shutdown : déclenche l'exécution du script de fermeture à l'extinction de la machine
 
* --preempt : si le ''master'' revient, le ''slave'' toujours debout garde la main (évite de faire tomber les tunnels SSL, VPN, etc...)
 
* --preempt : si le ''master'' revient, le ''slave'' toujours debout garde la main (évite de faire tomber les tunnels SSL, VPN, etc...)
 +
==eth1==
 +
On va éditer le fichier ''/etc/ucarp/vip-002.conf'' pour y mettre les lignes suivantes :
 +
{|align="center" border="1"
 +
|-align="center"
 +
|| FW1 || FW2
 +
|-
 +
||
 +
<pre>
 +
# ID du cluster
 +
ID=001
 +
# Network Interface
 +
BIND_INTERFACE="eth1"
 +
# IP de fw1
 +
SOURCE_ADDRESS="192.168.2.200"
 +
# IP Virtuel
 +
VIP_ADDRESS="192.168.2.202"
 +
# Mot de passe
 +
PASSWORD="password"
 +
# Fréquence des paquets de synchro
 +
ADVBASE=1
 +
# Pour voir toutes les options: ucarp --help
 +
OPTIONS="--shutdown --preempt"
 +
</pre>
 +
||
 +
<pre>
 +
# ID du cluster
 +
ID=001
 +
# Network Interface
 +
BIND_INTERFACE="eth1"
 +
# IP de fw1
 +
SOURCE_ADDRESS="192.168.2.201"
 +
# IP Virtuel
 +
VIP_ADDRESS="192.168.2.202"
 +
# Mot de passe
 +
PASSWORD="password"
 +
# Fréquence des paquets de synchro
 +
ADVBASE=1
 +
# Pour voir toutes les options: ucarp --help
 +
OPTIONS="--shutdown --preempt"
 +
</pre>
 +
|}
 +
 +
== Démarrage du service ==
 +
On peut maintenant démarrer le service sur les deux machines et l'enregistrer dans le chargeur de démarrage :
 +
* Pour SystemVInit:
 +
<pre>
 +
service ucarp start
 +
chkconfig ucarp on
 +
</pre>
 +
* Pour SystemD:
 +
<pre>
 +
systemctl start ucarp.service@001
 +
systemctl enable ucarp.service@001
 +
systemctl start ucarp.service@002
 +
systemctl enable ucarp.service@002
 +
...
 +
</pre>
 +
 +
= Test =
 +
== Obtention de la VIP ==
 +
Sur la machine ''master'' on voit bien l'alias :
 +
<pre>
 +
[root@fw1 ~]# ip a
 +
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
 +
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 +
    inet 127.0.0.1/8 scope host lo
 +
    inet6 ::1/128 scope host
 +
      valid_lft forever preferred_lft forever
 +
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 +
    link/ether 00:0c:29:26:70:80 brd ff:ff:ff:ff:ff:ff
 +
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
 +
    inet 192.168.1.202/32 scope global eth0
 +
    inet6 fe80::20c:29ff:fe26:7080/64 scope link
 +
      valid_lft forever preferred_lft forever
 +
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
 +
    link/ether 00:0c:29:26:70:8a brd ff:ff:ff:ff:ff:ff
 +
    inet 192.168.2.200/24 brd 192.168.2.255 scope global eth1
 +
    inet 192.168.2.202/32 scope global eth1
 +
    inet6 fe80::20c:29ff:fe26:708a/64 scope link
 +
      valid_lft forever preferred_lft forever
 +
</pre>
 +
 +
== Temps de basculement ==
 +
Si on se place sur une autre machine sur le LAN et que l'on ping l'adresse VIP (192.168.2.202) :
 +
<div align="center">
 +
[[Fichier:ucarp_test_ping.png]]
 +
</div>
 +
On voit bien que l'on perd 1 paquet soit environ 2 secondes.
 +
 +
== Réduire le temps de basculement ==
 +
Ce temps de basculement provient du faite que l'adresse MAC du nouveau ''master'' doit être propagée grâce au protocole ARP.
 +
Pour éviter cela, nous allons utiliser une adresse MAC par VIP.
 +
Pour info, les adresses MAC se change avec la commande IP :
 +
<pre>
 +
# ip link set eth0 addr 00:00:00:00:00:05
 +
</pre>
 +
Il ne nous reste plus qu'à créer le script de démarrage, ''/etc/ucarp/vip-up-eth0.sh'', pour modifier la MAC :
 +
<pre>
 +
#!/bin/bash
 +
ip link set eth0 addr 00:00:00:00:00:05
 +
</pre>
 +
On ajoute également le contenu du fichier ''/usr/libexec/ucarp/vip-up'' (script Ucarp de base) :
 +
<pre>
 +
exec 2>/dev/null
 +
/sbin/ip address add "$2"/32 dev "$1"
 +
</pre>
 +
Ainsi qu'un script d'arrêt, ''/etc/ucarp/vip-down-eth0.sh'', pour remettre la MAC d'origine:
 +
{|align="center" border="1"
 +
|-align="center"
 +
|| FW1 || FW2
 +
|-
 +
||
 +
<pre>
 +
#!/bin/bash
 +
ip link set eth0 addr 00:0c:29:26:70:80
 +
</pre>
 +
||
 +
<pre>
 +
#!/bin/bash
 +
ip link set eth0 addr 00:0c:29:4e:50:32
 +
</pre>
 +
|}
 +
On ajoute également le contenu du fichier ''/usr/libexec/ucarp/vip-down'' (script Ucarp de base) :
 +
<pre>
 +
exec 2>/dev/null
 +
/sbin/ip address del "$2"/32 dev "$1"
 +
</pre>
 +
On n'oublie pas de rendre les scripts exécutables:
 +
<pre>
 +
# chmod +x /etc/ucarp/vip-up-eth0.sh
 +
# chmod +x /etc/ucarp/vip-down-eth0.sh
 +
</pre>
 +
Modifions le fichier ''/etc/ucarp/vip-001.conf'' pour ajouter :
 +
<pre>
 +
UPSCRIPT="/etc/vip-up-eth0.sh"
 +
DOWNSCRIPT="/etc/vip-down-eth0.sh"
 +
</pre>
 +
 +
Lors de la bascule on voit bien l'adresse MAC changer:
 +
<pre>
 +
[root@fw1 ucarp]# ip a sh dev eth0
 +
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 +
    link/ether 00:00:00:00:00:05 brd ff:ff:ff:ff:ff:ff
 +
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
 +
    inet 192.168.1.202/32 scope global eth0
 +
    inet6 fe80::20c:29ff:fe26:7080/64 scope link
 +
      valid_lft forever preferred_lft forever
 +
</pre>

Version actuelle datée du 25 novembre 2019 à 17:21

Introduction

"UCARP est un programme de haute-disponibilité pour système d'exploitation Unix et dérivés qui permet le partage par plusieurs hôtes d'une même adresse IP afin d'assurer la continuité du service en cas de défaillance d'un hôte. Ce programme implémente en espace utilisateur le protocole Common Address Redundancy Protocol (CARP) disponible sous OpenBSD et s'oppose au protocole propriétaire Virtual Router Redundancy Protocol (VRRP)." wikipedia

Fonctionnement

Le principe est simple, on va utiliser une adresse IP virtuelle entre plusieurs machines qui délivrent le même service. De la sorte, peut importe la machine physique qui a l'adresse IP virtuelle, le service est délivré aux utilisateur sans discontinuité.

Prenons le cas de deux machines avec deux cartes réseaux :

Ucarp example.png

Voici le plan d'adressage qui sera utilisé :

Machine Réseau 1 (eth0) Réseau 2 (eth1)
FW1 192.168.1.200/24 192.168.2.200/24
FW2 192.168.1.201/24 192.168.2.201/24
VIP 192.168.1.202/24 192.168.2.202/24

On a bien une adresse IP par machine sur chaque réseau et, en plus, une adresse IP virtuelle qui sera utilisée par le master.

Préparation

Dans un premier temps, il faudra avoir une connexion à Internet, utiliser un serveur DNS et désactiver SELinux.

Pour ceux qui auraient manqué des étapes, les voici:

Une fois ces étapes effectuées, entrons dans le vif du sujet !


Assurez-vous d'avoir installé le dépôt EPEL car UCARP vient de cette source !


On se retrouve avec la configuration réseau suivante:

FW1 FW2
[root@fw1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:26:70:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fe26:7080/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:26:70:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.200/24 brd 192.168.2.255 scope global eth1
    inet6 fe80::20c:29ff:fe26:708a/64 scope link
       valid_lft forever preferred_lft forever

[root@fw2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4e:50:32 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.201/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::20c:29ff:fe4e:5032/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:4e:50:3c brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.201/24 brd 192.168.2.255 scope global eth1
    inet6 fe80::20c:29ff:fe4e:503c/64 scope link
       valid_lft forever preferred_lft forever

Installation

Installons UCARP depuis le dépôt EPEL :

# yum -y install ucarp

Configuration

eth0

On va maintenant éditer le fichier /etc/ucarp/vip-001.conf pour y mettre les lignes suivantes :

FW1 FW2
# ID du cluster
ID=001
# Network Interface
BIND_INTERFACE="eth0"
# IP de fw1
SOURCE_ADDRESS="192.168.1.200"
# IP Virtuel
VIP_ADDRESS="192.168.1.202"
# Mot de passe
PASSWORD="password"
# Fréquence des paquets de synchro
ADVBASE=1
# Pour voir toutes les options: ucarp --help
OPTIONS="--shutdown --preempt"
# ID du cluster
ID=001
# Network Interface
BIND_INTERFACE="eth0"
# IP de fw1
SOURCE_ADDRESS="192.168.1.201"
# IP Virtuel
VIP_ADDRESS="192.168.1.202"
# Mot de passe
PASSWORD="password"
# Fréquence des paquets de synchro
ADVBASE=1
# Pour voir toutes les options: ucarp --help
OPTIONS="--shutdown --preempt"

Les options

La partie OPTIONS permet de définir plus finement le comportement du groupe :

  • -k : permet de définir une priorité. Celui avec la plus base est master, cette option rend --preempt caduque.
  • --shutdown : déclenche l'exécution du script de fermeture à l'extinction de la machine
  • --preempt : si le master revient, le slave toujours debout garde la main (évite de faire tomber les tunnels SSL, VPN, etc...)

eth1

On va éditer le fichier /etc/ucarp/vip-002.conf pour y mettre les lignes suivantes :

FW1 FW2
# ID du cluster
ID=001
# Network Interface
BIND_INTERFACE="eth1"
# IP de fw1
SOURCE_ADDRESS="192.168.2.200"
# IP Virtuel
VIP_ADDRESS="192.168.2.202"
# Mot de passe
PASSWORD="password"
# Fréquence des paquets de synchro
ADVBASE=1
# Pour voir toutes les options: ucarp --help
OPTIONS="--shutdown --preempt"
# ID du cluster
ID=001
# Network Interface
BIND_INTERFACE="eth1"
# IP de fw1
SOURCE_ADDRESS="192.168.2.201"
# IP Virtuel
VIP_ADDRESS="192.168.2.202"
# Mot de passe
PASSWORD="password"
# Fréquence des paquets de synchro
ADVBASE=1
# Pour voir toutes les options: ucarp --help
OPTIONS="--shutdown --preempt"

Démarrage du service

On peut maintenant démarrer le service sur les deux machines et l'enregistrer dans le chargeur de démarrage :

  • Pour SystemVInit:
service ucarp start
chkconfig ucarp on
  • Pour SystemD:
systemctl start ucarp.service@001
systemctl enable ucarp.service@001
systemctl start ucarp.service@002
systemctl enable ucarp.service@002
...

Test

Obtention de la VIP

Sur la machine master on voit bien l'alias :

[root@fw1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:26:70:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.202/32 scope global eth0
    inet6 fe80::20c:29ff:fe26:7080/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:26:70:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.200/24 brd 192.168.2.255 scope global eth1
    inet 192.168.2.202/32 scope global eth1
    inet6 fe80::20c:29ff:fe26:708a/64 scope link
       valid_lft forever preferred_lft forever

Temps de basculement

Si on se place sur une autre machine sur le LAN et que l'on ping l'adresse VIP (192.168.2.202) :

Ucarp test ping.png

On voit bien que l'on perd 1 paquet soit environ 2 secondes.

Réduire le temps de basculement

Ce temps de basculement provient du faite que l'adresse MAC du nouveau master doit être propagée grâce au protocole ARP. Pour éviter cela, nous allons utiliser une adresse MAC par VIP. Pour info, les adresses MAC se change avec la commande IP :

# ip link set eth0 addr 00:00:00:00:00:05

Il ne nous reste plus qu'à créer le script de démarrage, /etc/ucarp/vip-up-eth0.sh, pour modifier la MAC :

#!/bin/bash
ip link set eth0 addr 00:00:00:00:00:05

On ajoute également le contenu du fichier /usr/libexec/ucarp/vip-up (script Ucarp de base) :

exec 2>/dev/null
/sbin/ip address add "$2"/32 dev "$1"

Ainsi qu'un script d'arrêt, /etc/ucarp/vip-down-eth0.sh, pour remettre la MAC d'origine:

FW1 FW2
#!/bin/bash
ip link set eth0 addr 00:0c:29:26:70:80
#!/bin/bash
ip link set eth0 addr 00:0c:29:4e:50:32

On ajoute également le contenu du fichier /usr/libexec/ucarp/vip-down (script Ucarp de base) :

exec 2>/dev/null
/sbin/ip address del "$2"/32 dev "$1"

On n'oublie pas de rendre les scripts exécutables:

# chmod +x /etc/ucarp/vip-up-eth0.sh
# chmod +x /etc/ucarp/vip-down-eth0.sh

Modifions le fichier /etc/ucarp/vip-001.conf pour ajouter :

UPSCRIPT="/etc/vip-up-eth0.sh"
DOWNSCRIPT="/etc/vip-down-eth0.sh"

Lors de la bascule on voit bien l'adresse MAC changer:

[root@fw1 ucarp]# ip a sh dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:00:00:00:00:05 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.202/32 scope global eth0
    inet6 fe80::20c:29ff:fe26:7080/64 scope link
       valid_lft forever preferred_lft forever