Semaine 8 · Laboratoire

Doubler
tous les étages

Deux Varnish, deux HAproxy, une IP virtuelle, et un maître qu'on éteint sous charge : le laboratoire 3 de l'Application distribuée.

420-5A4-MT · Acte 7 · Ne jamais tomber
Laboratoire Redirection · Entreprise

Cornucopia · Expansion Régionale & Délais Critiques

Cornucopia dessert désormais 10 points de livraison régionaux. Une panne du site paralyse toute la chaîne logistique du matin.
Projet de la Ferme

Garantir un accès ininterrompu aux maraîchers, aux livreurs et aux abonnés : le système doit survivre à la défaillance physique soudaine d'un serveur web ou d'une passerelle.

Laboratoire Redirection · Achalandage

Panne du reverse proxy : Keepalived et l'IP flottante !

Sur le terrain

Niveau d'Exigence

99,9 % de temps en ligne

⚠️ PANNE DE PASSERELLE UNIQUE !

Si l'unique passerelle Varnish/HAProxy plante ou subit une coupure de courant, tous les serveurs web derrière deviennent inaccessibles !

ANALYSE

Rapport du terrain

Le Problème Système

Point de faille unique sur le point d'entrée réseau du domaine de la ferme.

✅ Solution trouvée

Monter deux passerelles HAProxy redondantes orchestrées par Keepalived. L'IP virtuelle bascule automatiquement en moins de 1 seconde sans déconnexion !

Laboratoire Redirection · Mission

La mission du jour

À la fin de la séance, vous aurez :

C'est le laboratoire le plus payant du module (10 points) et le plus dense : deux semaines de techniques en une. Minimum 2 commits pertinents en classe cette semaine.

Laboratoire Redirection · Devis

HAproxy et Heartbeat : balancer, puis ne jamais tomber

10 points Git : /votre-depot/balancement/

Partie HAproxy. Ajoutez à votre ensemble existant :

Partie Heartbeat. Puis :

Mesures : pour chaque partie, test de charge BRUTAL, captures top à 10 et 60 secondes (parties 4 et 5), tableau rempli.

Barème : guide d'installation (4), fichiers de configuration (2), tableau rempli (2), captures d'écran (2).

Minimum 2 commits pertinents en classe durant la semaine 8; le reste avant le cours de la semaine 9. Ce laboratoire doit être entièrement terminé pour le début de la semaine 9. Note selon l'infra : l'IP virtuelle se configure différemment en VirtualBox (réseau hôte), en DinD (réseau Docker) et en VPS (IP partagée du fournisseur); le coup de main par infra est donné en classe.

Laboratoire Redirection · Topologie HAproxy

HAproxy

Topologie : un client 192.168.56.40 accède au serveur HAPROXY qui balance la charge entre VARNISH-1 et VARNISH-2, tous deux en avant du serveur HTTP relié au serveur MYSQL
Laboratoire Redirection · Consignes HAproxy

HAproxy

La mise en place

  • Ajouter les services suivants à votre ensemble de serveurs existants avec les mêmes caractéristiques précédentes :
  • Un second serveur qui offre le service de cache Varnish en avant de votre serveur HTTP (apache).
  • Un serveur qui offre le service de balancement de la charge HAproxy en avant de vos serveurs varnish.
  • Modifier l'URL d'accès de WordPress pour utiliser l'IP du serveur haproxy.

Le test de charge BRUTAL

  • Faire un test de charge BRUTAL avec JMeter pour documenter les performances de votre ensemble de serveurs actuel.
  • Faire une seule capture d'écran statique de la commande top exécutée en ssh de tous les serveurs actifs après environ 10 secondes de test (performances_partie_4_10secondes.png).
  • La même chose après environ 60 secondes de test (performances_partie_4_60secondes.png).
  • Noter dans un tableau la valeur idle du processeur (id) pour chaque serveur.
  • Noter dans un tableau la valeur moyenne (temps moyen de réponse) indiquée par JMeter.
Laboratoire Redirection · Topologie Heartbeat

Heartbeat

Topologie : un client 192.168.56.49 accède à l'IP virtuelle de la grappe HAPROXY-1 et HAPROXY-2 en haute disponibilité, qui balance la charge entre VARNISH-1 et VARNISH-2 en avant du serveur HTTP relié au serveur MYSQL
Laboratoire Redirection · Consignes Heartbeat

Heartbeat

La mise en place

  • Ajouter les services suivants à votre ensemble de serveurs existants avec les mêmes caractéristiques précédentes :
  • Un second serveur qui offre le service de balancement de la charge HAproxy en avant de vos serveurs varnish.
  • Un Heartbeat sur vos serveurs HAproxy qui assure la haute disponibilité et procure une IP virtuelle à la grappe de serveurs.
  • Modifier l'URL d'accès de WordPress pour utiliser l'IP virtuelle de la grappe haproxy.

Le test de charge BRUTAL

  • Faire un test de charge BRUTAL avec JMeter pour documenter les performances de votre ensemble de serveurs actuel.
  • Faire une seule capture d'écran statique de la commande top exécutée en ssh de tous les serveurs actifs après environ 10 secondes de test (performances_partie_5_10secondes.png).
  • La même chose après environ 60 secondes de test (performances_partie_5_60secondes.png).
  • Noter dans un tableau la valeur idle du processeur (id) pour chaque serveur.
  • Noter dans un tableau la valeur moyenne (temps moyen de réponse) indiquée par JMeter.

Faire un test de charge BRUTAL et éteindre le serveur haproxy maître : WordPress doit continuer de répondre. (Ce test sera reproduit en classe pour l'évaluation.)

Laboratoire Redirection · Étape 1

Le deuxième Varnish

Laboratoire Redirection · Étape 2

HAproxy balance entre les deux caches

# sur la nouvelle instance haproxy40 (reference : 192.168.56.40)
sudo apt-get -y install haproxy
sudo nano /etc/haproxy/haproxy.cfg
frontend site_http
bind ADRESSE_DE_HAPROXY40:80
default_backend site_http_varnish
backend site_http_varnish
balance roundrobin
server site1 ADRESSE_VARNISH30:80 check inter 10s
server site2 ADRESSE_VARNISH31:80 check inter 10s
haproxy -f /etc/haproxy/haproxy.cfg -c
sudo service haproxy restart
Laboratoire Redirection · Étape 3

WordPress derrière la passerelle, l'admin à part

secondes / serveurHTTPMYSQLVARNISH-1VARNISH-2HAPROXYtemps moyen de réponse (seconde)
10 secondes
60 secondes

Amusez-vous à éteindre varnish31 pendant que vous rafraîchissez le site : check inter fait son travail, le site ne bronche pas. Premier avant-goût de la suite.

Laboratoire Redirection · Étape 4

La grappe Heartbeat

# haproxy41 : clone de haproxy40; puis sur LES DEUX :
sudo apt-get install heartbeat resource-agents-extra
sudo nano /etc/heartbeat/ha.cf
node haproxy_heartbeat40 / node haproxy_heartbeat41 · keepalive 1 · deadtime 10 · bcast enp0s8 · auto_failback yes
sudo nano /etc/heartbeat/authkeys
auth 1 / 1 sha1 VotreClefSecrete
sudo chmod 600 /etc/heartbeat/authkeys
sudo nano /etc/heartbeat/haresources
haproxy_heartbeat40 192.168.56.49

Pièges connus : les noms des noeuds doivent correspondre à uname -n (fichier hosts à l'appui); et sur Ubuntu récent, l'interface par défaut du script IPaddr doit devenir enp0s8. Le coup de main est donné en classe.

Laboratoire Redirection · Étape 5

HAproxy adopte l'IP virtuelle

# sur les deux HAproxy : permettre d'ecouter une adresse qu'on ne porte pas encore
sudo nano /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
sudo sysctl -p
# dans haproxy.cfg : bind sur l'IP VIRTUELLE au lieu de l'IP locale
bind 192.168.56.49:80
sudo service heartbeat start
ping 192.168.56.49
Laboratoire Redirection · Étape 6 · L'épreuve

Éteindre le maître sous charge

secondes / serveurHTTPMYSQLVARNISH-1VARNISH-2HAPROXY-1HAPROXY-2temps moyen de réponse (seconde)
10 secondes
60 secondes

Ce test sera reproduit en classe pour l'évaluation. Répétez-le jusqu'à ce qu'il soit ennuyeux : c'est à ce moment-là qu'il est prêt.

Laboratoire Redirection · Barème

HAproxy · Heartbeat

Dans Git : /votre-depot/balancement/
  • (4 points) sa version de son guide d'installation
  • (2 points) les fichiers de configurations utilisés
  • (2 points) le tableau rempli
  • (2 points) les captures d'écran

Un minimum de 2 commits pertinents doit être effectué en classe durant la semaine 3, les autres devant être complétés avant le cours de la semaine 4. Ce laboratoire doit être entièrement terminé pour le début de la semaine 4.

Laboratoire Redirection · Avant de partir

Livrables et devoir

La semaine prochaine, l'acte 8 : le monde réel. En équipe, un cluster de Raspberry Pi, et la panne qu'on provoque en débranchant un fil, pour de vrai.