Services redondés
-
Synchroniser des données et de la configuration entre deux VMs
-
Mettre en place un répartiteur de charge pour augmenter la fiabilité et la réactivité du service HTTP
Synchronisation des fichiers
On veut synchroniser à la fois les fichiers contenant le site à servir dans /srv/cours-git et la configuration nginx.
La VM A deviendra la VM principale, sur laquelle les fichiers HTML servis et la configuration Nginx seront modifiées par la suite, la VM B sera une VM secondaire, recevant les modifications régulièrement.
-
Créer un script qui permet de synchroniser par SSH depuis la VM A vers la VM B
-
Ajout de fichier
-
Modification de fichier
-
Suppression de fichier
-
Permissions identiques
-
Inclure les fichiers cachés
-
-
Automatiser l’exécution de ce script avec
cron, toutes les 5 minutes du lundi au vendredi et de 7h à 19h -
Observer la différence dans les snapshots ZFS de la VM B
Pour éditer des fichiers de manière plus aisée dans le terminal, on pourrait installer vim et suivre son tutoriel vimtutor
|
Solution
/root/nginx-sync.sh#!/usr/bin/env bash
# Synchronisation du dossier /srv
rsync -asrvP --delete /srv/cours-git/ 192.168.122.22:/srv/cours-git/
# Synchronisation de la configuration Nginx
rsync -asrvP --delete /etc/nginx/ 192.168.122.22:/etc/nginx/
# Rechargement de la configuration Nginx
ssh 192.168.122.22 "systemctl reload nginx"
On pensera à rendre le script exécutable :
# chmod +x /root/nginx-sync.sh
Enfin, on déclenchera le script toutes les 5 minutes à l’aide d’un cron, vous pouvez vous aider de services comme Crontab Guru pour comprendre la syntaxe de la périodicité.
# crontab -e
*/5 7-19 * * 1-5 /root/nginx-sync.sh
On peut vérifier l’exécution du cron avec :
# journalctl -u crond
Répartiteur de charge
On montera une troisième VM (possibilité de cloner la première VM, en faisant attention à changer le nom de machine) afin d’y installer un répartiteur de charge.
Le répartiteur de charge a pour rôle de se mettre devant nos deux nginx et de transférer les requêtes HTTP soit vers l’un, soit vers l’autre.
Dans HAProxy, vous devrez activer une page de statistiques servir sur le même port que les pages, sous le chemin /stats.
On partira pour cela du fichier de configuration par défaut de HAProxy, qu’on adaptera pour nos besoins.
Solution
/etc/haproxy/haproxy.cfg - Configuration de la partie frontalefrontend main
bind *:80 (1)
default_backend nginx (2)
stats enable (3)
stats uri /stats
stats refresh 10s
stats admin if TRUE (4)
| 1 | On écoute sur n’importe quelle adresse IP et sur le port 80 de la VM |
| 2 | Les requêtes sont transmises au backend s’appelant nginx |
| 3 | Les lignes suivantes configurent l’interface de stats et d’administration |
| 4 | Ici on laisse l’admin ouvert pour simplifier le debug, mais on configurera un contrôle d’accès avant la mise en production |
/etc/haproxy/haproxy.cfg - Configuration des serveurs en arrière-planbackend nginx (1)
balance roundrobin (2)
server cesi-adminsys-a 192.168.122.55:80 check (3)
server cesi-adminsys-b 192.168.122.89:80 check
| 1 | On précise ici le nom du backend |
| 2 | Les requêtes sont transmises alternativement sur chaque serveur disponible, on pourrait à la place choisir un algorithme se basant sur le nombre de connexions totales en cours |
| 3 | Ici cesi-adminsys-a est un nom arbitraire, pas forcément le nom de l’hôte. Avec l’instruction check on demande à HAProxy de vérifier régulièrement l’état des serveurs, sans attendre qu’une requête venant du frontend échoue. |