Après la réplication des bases de données et la réplication des fichiers, passons maintenant à la mise en place d’un load balancer avec keepalived et une IP flottante.

Voici le principe général de ce que nous cherchons à accomplir, avec une petite animation:

Serveur High Availability : créer un load balancer avec une IP flottante photo 1

Voici ce dont vous avez besoin pour ce tutoriel:

Installation et paramétrage de keepalived

Keepalived est une application de routage qui permet de fournir un moyen simple et robuste de mettre en place des solutions de load balancing et de haute disponibilité sur des systèmes Linux. Cela se passe au niveau de la couche 4 du modèle OSI :

Serveur High Availability : créer un load balancer avec une IP flottante photo

Concrètement, keepalived va vérifier toutes les quelques secondes que notre serveur de fichier est bien actif sur notre serveur MASTER. Si jamais le serveur est down, l’IP flottante sera assignée au serveur BACKUP. L’enregistrement DNS A du site doit pointer vers l’IP flottante. Cela permet de rediriger le trafic automatiquement et de manière transparente sur le serveur BACKUP.

Sur le serveur MASTER

1. On installe donc keepalived:

apt-get install keepalived

et on édite sa configuration init:

nano /etc/init/keepalived.conf

On y ajoute :

description "load-balancing and high-availability service"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/sbin/keepalived --dont-fork

2. On obtient l’adresse IP privée du serveur:

curl http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address && echo

Résultat:

10.134.23.164

A lire :  Accélérer le démarrage et l'arrêt d'Ubuntu

3. Passons maintenant à la configuration de keepalived :

nano /etc/keepalived/keepalived.conf

On y ajoute :

vrrp_script chk_nginx {
script "pidof nginx"
interval 2
}
vrrp_instance VI_1 {
interface eth1
state MASTER
priority 200
virtual_router_id 33
unicast_src_ip 10.134.23.164
unicast_peer {
10.134.4.220
}
authentication {
auth_type PASS
auth_pass keepalivedpls!
}
track_script {
chk_nginx
}
notify_master /etc/keepalived/master.sh
}

Notez les informations suivantes :

  • on vérifie toutes les 2 secondes que nginx possède bien un PID.
  • State : MASTER
  • unicast_src_ip pointe vers 10.134.23.164 (master)
  • unicast_peer pointe vers10.134.4.220 (backup)
  • le mot de passe est keepalivedpls!

Sur le serveur BACKUP

Ce sont les mêmes étapes que sur le serveur MASTER, donc j’abrège un peu :

apt-get install keepalived
nano /etc/init/keepalived.conf

ajoutez:

 description "load-balancing and high-availability service"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/sbin/keepalived --dont-fork

Configuration :

nano /etc/init/keepalived.conf

Ajoutez:

vrrp_script chk_nginx {
script "pidof nginx"
interval 2
}
vrrp_instance VI_1 {
interface eth1
state BACKUP
priority 100
virtual_router_id 33
unicast_src_ip 10.134.4.220
unicast_peer {
10.134.23.164
}
authentication {
auth_type PASS
auth_pass keepalivedpls!
}
track_script {
chk_nginx
}
notify_master /etc/keepalived/master.sh
}

Notez ce qui change :

  • State : BACKUP
  • priority 100
  • unicast_src_ip pointe vers 10.134.4.220 (backup)
  • unicast_peer pointe vers 10.134.23.164 (master)

C’est assez parlant. La priorité est moindre car on préférera toujours le MASTER au BACKUP.

Gestion de l’IP flottante chez Digital Ocean

Digital Ocean (DO) offre une IP flottante, que l’on peut assigner à un VPS. Chez d’autres hébergeurs, c’est ce que l’on appelle une IP failover. Il suffit d’y associer un nom de domaine et ce domaine pourra être redirigé très facilement vers une autre machine. Cela permet de s’affranchir des délais de propagation DNS habituels.

1. On récupère donc le script assign-ip chez Digital Ocean, sur nos deux serveurs :

cd /usr/local/bin
curl -LO http://do.co/assign-ip

2. Ensuite, on se rend sur le site de Digital Ocean > API.

A lire :  WordPress : astuce pour désactiver la notification de mise à jour de la version localisée (traduite)

Cliquez sur le bouton Generate new token et donnez un nom facilement identifiable:

> HA-nginx

Cochez les cases Reading et Writing.

3. Sauvegardez la chaîne de caractères qui vous est présentée.

4. Vous devez connaître l’identifiant de vos droplets chez Digital Ocean :

droplet_ID master : ubuntu-master
droplet_ID backup : ubuntu-backup

et l’adresse de votre IP flottante :

floating IP : 138.xxx.xxx.177

5. Voici la syntaxe utilisée pour lancer le script assign-ip:

python /usr/local/bin/assign-ip floating_ip droplet_ID

6. On passe maintenant au script qui va attribuer l’IP flottante au bon serveur. On commence par créer le script :

nano /etc/keepalived/master.sh

Et on y met :

export DO_TOKEN=' CHAINE TROUVEE EN ETAPE 3'
IP='138.xxx.xxx.177'
ID=$(curl -s http://169.254.169.254/metadata/v1/id)
HAS_FLOATING_IP=$(curl -s http://169.254.169.254/metadata/v1/floating_ip/ipv4/active)
if [ $HAS_FLOATING_IP = "false" ]; then
n=0
while [ $n -lt 10 ]
do
python /usr/local/bin/assign-ip $IP $ID && break
n=$((n+1))
sleep 3
done
fi

Vous avez à modifier :

  • la chaîne de votre API token
  • l’IP flottante

Rendez maintenant le script exécutable:

chmod +x /etc/keepalived/master.sh

7. Répétez l’étape 6 sur le serveur BACKUP : copie du script et droits d’exécution.

8. On lance le service keepalived, sur nos deux serveurs:

service keepalived start

9. Au niveau des enregistrements DNS du domaine, j’ai modifié cet enregistrement qui pointait vers le serveur MASTER:

A example.com	 directs to 104.xxx.xxx.133 1800

pour un pointage vers l’IP flottante, avec un délai beaucoup plus court :

A 	example.com 	directs to 138.xxx.xxx.177 10

Test de la configuration du load balancing

Il ne nous reste plus qu’à tester pour voir si l’IP est bien attribuée ! Je me suis créé un petit protocole de test pour voir ce qui se passe en temps réel.

A lire :  Le pouvoir des flux RSS

1. on crée une page HTML sur MASTER :

export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /var/www/html/load.html

2. on crée une page HTML sur BACKUP:

export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /var/www/html/load.html

3. On lance une boucle dans un terminal qui va afficher le contenu de notre fichier toutes les secondes, en donnant le nom du droplet et son adresse IP :

while true; do curl https://www.example.com/load.html; sleep 1; done

Ne fermez pas ce terminal.

4. Ouvrez une autre fenêtre de terminal sur le serveur MASTER et stoppez nginx:

service nginx stop

Au bout de quelques secondes, l’IP est assignée au serveur BACKUP, automatiquement et de manière transparente.

Bonus : pour savoir si un serveur possède une IP flottante, il suffit d’ouvrir un terminal sur ce serveur et lancer:

curl -s http://169.254.169.254/metadata/v1/floating_ip/ipv4/active

Voilà, vous venez de créer un système simple mais efficace de load balancing entre deux VPS, qui attribue une IP flottante à l’un d’entre eux si jamais nginx est hors service.

Sommaire de la série Créer un serveur High Availability (HA)

  1. Créer un serveur High Availability : la réplication des bases de données
  2. Créer un serveur High Availability : la réplication des fichiers
  3. Serveur High Availability : créer un load balancer avec une IP flottante

Pour développer votre projet WordPress ou Woocommerce, faites appel à mon expertise pour réaliser un site rapide, performant et fonctionnel.

Contactez-moi

Si vous avez trouvé une faute d’orthographe, informez-nous en sélectionnant le texte en question et en appuyant sur Ctrl + Entrée s’il vous plaît.

Articles en rapport:

Serveur High Availability : créer un load balancer avec une IP flottante

par Matt Lecture: 6 min
0

We use cookies to give you the best online experience. By agreeing you accept the use of cookies in accordance with our cookie policy.

Privacy Settings

Control your personal Cookie Services here.

These cookies are necessary for the website to function and cannot be switched off in our systems.

In order to use this website we use the following technically required cookies
  • wordpress_test_cookie

Decline all Services
Accept all Services

Pin It on Pinterest

Share This

Spelling error report

The following text will be sent to our editors: