« Apache » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (14 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
<br> | |||
= <span style="color:#b9770e;">Installation et Configuration Apache HTTPD</span> = | = <span style="color:#b9770e;">Installation et Configuration Apache HTTPD</span> = | ||
| Ligne 4 : | Ligne 5 : | ||
| | | | ||
<span style="font-size:115%; color:#b9770e;"> | <span style="font-size:115%; color:#b9770e;"> | ||
Cette section décrit l’installation et la configuration complète d’un serveur web Apache (HTTPD) avec SSL. | Cette section décrit l’installation et la configuration complète d’un serveur web Apache (HTTPD) avec SSL. <br><br> | ||
Elle permet de rendre votre serveur accessible sur le réseau et d’héberger des pages web. | Elle permet de rendre votre serveur accessible sur le réseau et d’héberger des pages web. <br><br> | ||
</span> | Elle inclut également la mise en place d’un système de load balancing avec HAProxy, d’une architecture haute disponibilité avec Keepalived, ainsi qu’un mécanisme de synchronisation entre les serveurs afin d’assurer la continuité de service, la répartition de charge et la tolérance aux pannes.</span> | ||
|} | |} | ||
__TOC__ | __TOC__ | ||
= <span style="color:#935116;"> | <br> | ||
= <span style="color:#935116;">1 — Installation et Configuration Apache</span> = | |||
{| style="width:100%; background:#fff8ec; border:1px solid #f5cba7; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#fff8ec; border:1px solid #f5cba7; padding:12px; border-radius:10px; overflow:hidden;" | ||
| Ligne 30 : | Ligne 32 : | ||
<pre> | <pre> | ||
rpm -qa | grep httpd | rpm -qa | grep httpd | ||
</pre> | |||
Résultat attendu dans la console : | |||
<pre> | |||
httpd-2.4.57-5.el9.x86_64 | |||
httpd-tools-2.4.57-5.el9.x86_64 | |||
httpd-filesystem-2.4.57-5.el9.noarch | |||
mod_ssl-2.4.57-5.el9.x86_64 | |||
</pre> | </pre> | ||
| Ligne 53 : | Ligne 64 : | ||
* Décommenter la ligne <b>ServerName</b> | * Décommenter la ligne <b>ServerName</b> | ||
* Adapter le nom en fonction de votre configuration réseau (/etc/sysconfig/network) | * Adapter le nom en fonction de votre configuration réseau (/etc/sysconfig/network) | ||
* Définir | * Définir l'écoute sur toutes les interfaces | ||
Configuration finale : | Configuration finale : | ||
| Ligne 88 : | Ligne 99 : | ||
</pre> | </pre> | ||
Si Apache fonctionne correctement, les ports | Résultat attendu dans la console : | ||
<pre> | |||
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("httpd",pid=1234,fd=4)) | |||
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("httpd",pid=1234,fd=6)) | |||
</pre> | |||
Si Apache fonctionne correctement, les ports 80 (HTTP) et 443 (HTTPS) doivent apparaître en écoute. | |||
| Ligne 170 : | Ligne 188 : | ||
<pre> | <pre> | ||
curl 192.168.10.251 | curl 192.168.10.251 | ||
</pre> | |||
Résultat attendu dans la console : | |||
<pre> | |||
cc | |||
</pre> | </pre> | ||
| Ligne 184 : | Ligne 208 : | ||
<br><br> | <br><br> | ||
= <span style="color:#1f618d;"> | = <span style="color:#1f618d;">2 — Configuration HTTPS (SSL/TLS)</span> = | ||
{| style="width:100%; background:#ebf5fb; border:1px solid #aed6f1; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#ebf5fb; border:1px solid #aed6f1; padding:12px; border-radius:10px; overflow:hidden;" | ||
| Ligne 193 : | Ligne 217 : | ||
== <span style="color:#2e86c1;">Principe</span> == | == <span style="color:#2e86c1;">Principe</span> == | ||
HTTPS permet de | HTTPS permet de chiffrer les échanges entre client et serveur, de garantir l'intégrité des données et d'authentifier le serveur. | ||
Le protocole utilise le port '''443'''. | |||
== <span style="color:#2e86c1;">Création d'un certificat auto-signé</span> == | |||
Pour activer HTTPS, il est nécessaire de générer un certificat SSL/TLS. | |||
Dans un environnement de test, un certificat auto-signé suffit. | |||
Générer un certificat SSL : | Générer un certificat SSL valide pour 365 jours : | ||
<pre> | <pre> | ||
| Ligne 210 : | Ligne 233 : | ||
-out /etc/pki/tls/certs/apache.crt | -out /etc/pki/tls/certs/apache.crt | ||
</pre> | </pre> | ||
== <span style="color:#2e86c1;">Configuration Apache HTTPS</span> == | == <span style="color:#2e86c1;">Configuration Apache HTTPS</span> == | ||
Modifier le fichier : | Il faut maintenant indiquer à Apache l'emplacement du certificat et de la clé privée. | ||
Modifier le fichier de configuration SSL : | |||
<pre> | <pre> | ||
| Ligne 219 : | Ligne 246 : | ||
</pre> | </pre> | ||
Localiser et adapter les lignes suivantes : | |||
<pre> | <pre> | ||
| Ligne 226 : | Ligne 253 : | ||
</pre> | </pre> | ||
Redémarrer Apache : | Redémarrer le service Apache pour appliquer les modifications : | ||
<pre> | <pre> | ||
| Ligne 232 : | Ligne 259 : | ||
</pre> | </pre> | ||
Tester | |||
== <span style="color:#2e86c1;">Vérification du fonctionnement HTTPS</span> == | |||
Tester l'accès sécurisé au serveur web via HTTPS : | |||
<pre> | <pre> | ||
curl -k https://IP_SERVEUR | curl -k https://IP_SERVEUR | ||
</pre> | </pre> | ||
Le paramètre -k permet d'ignorer l'avertissement lié au certificat auto-signé. | |||
Résultat attendu dans la console : | |||
<pre> | |||
cc | |||
</pre> | |||
Si la configuration est correcte, vous devez voir le contenu de votre page web. | |||
<br><br> | <br><br> | ||
= <span style="color:#1e8449;"> | = <span style="color:#1e8449;">3 — Load Balancing avec HAProxy</span> = | ||
{| style="width:100%; background:#eafaf1; border:1px solid #a9dfbf; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#eafaf1; border:1px solid #a9dfbf; padding:12px; border-radius:10px; overflow:hidden;" | ||
| Ligne 251 : | Ligne 290 : | ||
== <span style="color:#239b56;">Principe</span> == | == <span style="color:#239b56;">Principe</span> == | ||
Le Load Balancing permet | Le <span style="color:#239b56;">Load Balancing</span> permet de répartir les requêtes clients sur plusieurs serveurs web, d'améliorer les performances globales, de réduire la charge sur chaque serveur et d'augmenter la disponibilité du service. | ||
<span style="color:#239b56;">HAProxy</span> agit comme point d'entrée unique et distribue les requêtes vers les serveurs backend. | |||
HAProxy agit comme point | |||
<pre> | |||
┌─────────────────────────────────────────────────────────────┐ | |||
│ ARCHITECTURE HAPROXY │ | |||
└─────────────────────────────────────────────────────────────┘ | |||
┌──────────┐ | |||
│ Client │ | |||
└─────┬────┘ | |||
│ | |||
│ Requêtes HTTP/HTTPS | |||
│ | |||
▼ | |||
┌──────────────┐ | |||
│ HAProxy │ | |||
│ Load Balancer│ | |||
│ (Port 80) │ | |||
└──────┬───────┘ | |||
│ | |||
┌──────────────┴──────────────┐ | |||
│ │ | |||
│ Round Robin │ | |||
│ │ | |||
▼ ▼ | |||
┌───────────────┐ ┌───────────────┐ | |||
│ Serveur Web 1 │ │ Serveur Web 2 │ | |||
│ Apache │ │ Apache │ | |||
│ (Port 8080) │ │ (Port 8080) │ | |||
└───────────────┘ └───────────────┘ | |||
</pre> | |||
== <span style="color:#239b56;">Préparation des serveurs Apache (Backend)</span> == | == <span style="color:#239b56;">Préparation des serveurs Apache (Backend)</span> == | ||
Pour que <span style="color:#239b56;">HAProxy</span> puisse prendre le contrôle du <span style="color:#239b56;">port 80</span>, les serveurs Apache doivent être configurés pour écouter sur un autre port. | |||
Nous allons les faire écouter sur le <span style="color:#239b56;">port 8080</span>. | |||
Modifier la configuration Apache : | Modifier la configuration Apache sur chaque serveur web : | ||
<pre> | <pre> | ||
| Ligne 275 : | Ligne 335 : | ||
</pre> | </pre> | ||
Localiser et modifier les lignes suivantes : | |||
Avant : | *Avant: | ||
<pre> | <pre> | ||
Listen *:80 | Listen *:80 | ||
| Ligne 283 : | Ligne 343 : | ||
</pre> | </pre> | ||
Après : | *Après: | ||
<pre> | <pre> | ||
Listen *:8080 | Listen *:8080 | ||
| Ligne 289 : | Ligne 349 : | ||
</pre> | </pre> | ||
Vérifier la configuration : | Vérifier que la configuration ne contient pas d'erreur de syntaxe : | ||
<pre> | <pre> | ||
| Ligne 295 : | Ligne 355 : | ||
</pre> | </pre> | ||
Redémarrer Apache : | Résultat attendu dans la console : | ||
<pre> | |||
VirtualHost configuration: | |||
*:8080 web (/etc/httpd/conf/httpd.conf:42) | |||
ServerRoot: "/etc/httpd" | |||
Main DocumentRoot: "/var/www/html" | |||
Main ErrorLog: "/etc/httpd/logs/error_log" | |||
Syntax OK | |||
</pre> | |||
Redémarrer Apache en mode gracieux (sans couper les connexions en cours) : | |||
<pre> | <pre> | ||
httpd -k graceful | httpd -k graceful | ||
</pre> | </pre> | ||
== <span style="color:#239b56;">Ouverture du port 8080 sur les serveurs web</span> == | == <span style="color:#239b56;">Ouverture du port 8080 sur les serveurs web</span> == | ||
Pour que HAProxy puisse communiquer avec les serveurs Apache, il est nécessaire d'autoriser le trafic sur le port 8080. | |||
Modifier iptables : | Modifier le fichier de configuration iptables : | ||
<pre> | <pre> | ||
| Ligne 318 : | Ligne 390 : | ||
</pre> | </pre> | ||
Appliquer : | Appliquer les changements au pare-feu : | ||
<pre> | <pre> | ||
systemctl reload iptables | systemctl reload iptables | ||
</pre> | </pre> | ||
Vérifier que la règle a bien été ajoutée : | |||
<pre> | |||
iptables -nvL | grep 8080 | |||
</pre> | |||
Résultat attendu dans la console : | |||
<pre> | |||
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 | |||
</pre> | |||
== <span style="color:#239b56;">Installation HAProxy</span> == | == <span style="color:#239b56;">Installation HAProxy</span> == | ||
HAProxy doit être installé sur le serveur qui jouera le rôle de répartiteur de charge. | |||
Installation du package HAProxy : | |||
<pre> | <pre> | ||
dnf install haproxy -y | dnf install haproxy -y | ||
</pre> | </pre> | ||
== <span style="color:#239b56;">Configuration HAProxy</span> == | == <span style="color:#239b56;">Configuration HAProxy</span> == | ||
Modifier le fichier : | La configuration de HAProxy définit comment les requêtes seront distribuées entre les serveurs. | ||
Modifier le fichier de configuration principal : | |||
<pre> | <pre> | ||
| Ligne 342 : | Ligne 432 : | ||
</pre> | </pre> | ||
Exemple de configuration utilisant l'algorithme <span style="color:#239b56;">round robin</span> pour la répartition de charge : | |||
<pre> | <pre> | ||
| Ligne 367 : | Ligne 457 : | ||
</pre> | </pre> | ||
Le mode | Le mode <span style="color:#239b56;">roundrobin</span> distribue les requêtes alternativement entre les serveurs, assurant une répartition équilibrée de la charge. | ||
== <span style="color:#239b56;">Démarrage du service HAProxy</span> == | == <span style="color:#239b56;">Démarrage du service HAProxy</span> == | ||
Activer et démarrer le service HAProxy : | |||
<pre> | <pre> | ||
| Ligne 376 : | Ligne 469 : | ||
</pre> | </pre> | ||
Vérifier le | Vérifier que le service fonctionne correctement : | ||
<pre> | <pre> | ||
| Ligne 382 : | Ligne 475 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | <pre> | ||
● haproxy.service - HAProxy Load Balancer | |||
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled) | |||
Active: active (running) since Sat 2026-02-21 17:00:00 CET; 5s ago | |||
Main PID: 1234 (haproxy) | |||
Status: "Ready." | |||
</pre> | </pre> | ||
== <span style="color:#239b56;">Test du Load Balancing</span> == | |||
Vérifier que le système de répartition de charge fonctionne correctement. | |||
Tester | Tester l'accès via l'adresse IP du serveur HAProxy : | ||
<pre> | <pre> | ||
| Ligne 412 : | Ligne 497 : | ||
</pre> | </pre> | ||
Effectuer plusieurs requêtes successives. | Effectuer plusieurs requêtes successives pour observer le mécanisme de distribution. | ||
{| style="width:100%; background:#eafaf1; border:1px solid #a9dfbf; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#eafaf1; border:1px solid #a9dfbf; padding:12px; border-radius:10px; overflow:hidden;" | ||
| | | | ||
<b style="color:#1e8449;">Si la configuration fonctionne correctement, les réponses doivent alterner entre les différents serveurs web.</b> | <b style="color:#1e8449;">Si la configuration fonctionne correctement, les réponses doivent alterner entre les différents serveurs web selon l'algorithme <span style="color:#1e8449;">round robin</span>.</b> | ||
|} | |} | ||
| Ligne 424 : | Ligne 509 : | ||
<br><br> | <br><br> | ||
= <span style="color:#6c3483;"> | = <span style="color:#6c3483;">4 — Haute Disponibilité avec Keepalived</span> = | ||
{| style="width:100%; background:#f4ecf7; border:1px solid #d2b4de; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#f4ecf7; border:1px solid #d2b4de; padding:12px; border-radius:10px; overflow:hidden;" | ||
| Ligne 433 : | Ligne 518 : | ||
== <span style="color:#884ea0;">Principe</span> == | == <span style="color:#884ea0;">Principe</span> == | ||
Keepalived permet : | <span style="color:#884ea0;">Keepalived</span> permet d'assurer la continuité du service (<span style="color:#884ea0;">Haute Disponibilité</span>), de basculer automatiquement vers un serveur secondaire en cas de panne, d'utiliser une <span style="color:#884ea0;">adresse IP virtuelle</span> partagée entre plusieurs serveurs (<span style="color:#884ea0;">VIP</span>) et de superviser l'état du service HAProxy. | ||
Fonctionnement : | |||
Un serveur est <span style="color:#884ea0;">'''MASTER'''</span> (actif), un serveur est <span style="color:#884ea0;">'''BACKUP'''</span> (passif). Si le serveur <span style="color:#884ea0;">MASTER</span> tombe, le <span style="color:#884ea0;">BACKUP</span> récupère automatiquement l'IP virtuelle | |||
== <span style="color:#884ea0;">Installation de Keepalived</span> == | |||
Keepalived doit être installé sur les deux serveurs qui assureront la haute disponibilité (MASTER et BACKUP). | |||
Installation du package Keepalived : | |||
<pre> | <pre> | ||
dnf install keepalived -y | dnf install keepalived -y | ||
</pre> | </pre> | ||
== <span style="color:#884ea0;">Configuration du serveur maître (MASTER)</span> == | == <span style="color:#884ea0;">Configuration du serveur maître (MASTER)</span> == | ||
Le serveur <span style="color:#884ea0;">MASTER</span> sera le serveur actif qui portera l'<span style="color:#884ea0;">adresse IP virtuelle</span> en temps normal. | |||
Vider le fichier de configuration par défaut : | Vider le fichier de configuration par défaut : | ||
| Ligne 464 : | Ligne 547 : | ||
</pre> | </pre> | ||
Éditer le fichier de configuration : | |||
<pre> | <pre> | ||
| Ligne 470 : | Ligne 553 : | ||
</pre> | </pre> | ||
Ajouter la configuration suivante pour le serveur MASTER : | |||
<pre> | <pre> | ||
| Ligne 504 : | Ligne 587 : | ||
</pre> | </pre> | ||
Démarrer et activer Keepalived : | Démarrer et activer le service Keepalived : | ||
<pre> | <pre> | ||
| Ligne 510 : | Ligne 593 : | ||
systemctl start keepalived --now | systemctl start keepalived --now | ||
</pre> | </pre> | ||
== <span style="color:#884ea0;">Configuration du serveur secondaire (BACKUP)</span> == | == <span style="color:#884ea0;">Configuration du serveur secondaire (BACKUP)</span> == | ||
Sur la seconde machine, | Le serveur <span style="color:#884ea0;">BACKUP</span> reste en veille et ne prendra le relais qu'en cas de défaillance du serveur <span style="color:#884ea0;">MASTER</span>. | ||
Sur la seconde machine, éditer le fichier de configuration : | |||
<pre> | <pre> | ||
| Ligne 520 : | Ligne 606 : | ||
</pre> | </pre> | ||
Ajouter la configuration suivante pour le serveur BACKUP : | |||
<pre> | <pre> | ||
| Ligne 554 : | Ligne 640 : | ||
</pre> | </pre> | ||
Activer le service : | Activer et démarrer le service : | ||
<pre> | <pre> | ||
| Ligne 560 : | Ligne 646 : | ||
systemctl start keepalived --now | systemctl start keepalived --now | ||
</pre> | </pre> | ||
== <span style="color:#884ea0;">Vérification du fonctionnement</span> == | == <span style="color:#884ea0;">Vérification du fonctionnement</span> == | ||
Sur le serveur MASTER : | Vérifier que l'adresse IP virtuelle est bien active sur le serveur MASTER. | ||
Sur le serveur MASTER, afficher les adresses IP : | |||
<pre> | <pre> | ||
| Ligne 570 : | Ligne 659 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | |||
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 | |||
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff | |||
inet 192.168.10.252/24 brd 192.168.10.255 scope global eth0 | |||
valid_lft forever preferred_lft forever | |||
inet 192.168.10.250/32 scope global eth0 | |||
valid_lft forever preferred_lft forever | |||
</pre> | |||
L'adresse IP physique du serveur et l'adresse IP virtuelle 192.168.10.250 doivent apparaître sur l'interface réseau. | |||
Test de basculement : | Test du mécanisme de basculement : | ||
1. Arrêter le serveur MASTER ou le service Keepalived | 1. Arrêter le serveur MASTER ou stopper le service Keepalived | ||
2. Sur le serveur BACKUP exécuter : | 2. Sur le serveur BACKUP, exécuter la commande suivante : | ||
<pre> | <pre> | ||
| Ligne 584 : | Ligne 681 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | |||
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 | |||
link/ether 52:54:00:12:34:57 brd ff:ff:ff:ff:ff:ff | |||
inet 192.168.10.251/24 brd 192.168.10.255 scope global eth0 | |||
valid_lft forever preferred_lft forever | |||
inet 192.168.10.250/32 scope global eth0 | |||
valid_lft forever preferred_lft forever | |||
</pre> | |||
L'adresse IP virtuelle doit apparaître automatiquement sur le serveur secondaire. | |||
{| style="width:100%; background:#f4ecf7; border:1px solid #d2b4de; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#f4ecf7; border:1px solid #d2b4de; padding:12px; border-radius:10px; overflow:hidden;" | ||
| Ligne 594 : | Ligne 702 : | ||
<br><br> | <br><br> | ||
= <span style="color:#566573;"> | = <span style="color:#566573;">5 — Synchronisation des serveurs</span> = | ||
{| style="width:100%; background:#f2f4f4; border:1px solid #d5d8dc; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#f2f4f4; border:1px solid #d5d8dc; padding:12px; border-radius:10px; overflow:hidden;" | ||
| Ligne 603 : | Ligne 711 : | ||
== <span style="color:#5d6d7e;">Principe</span> == | == <span style="color:#5d6d7e;">Principe</span> == | ||
La synchronisation permet : | La <span style="color:#5d6d7e;">synchronisation</span> permet de maintenir les mêmes fichiers sur plusieurs serveurs, d'assurer la cohérence des données et de faciliter la haute disponibilité. | ||
== <span style="color:#5d6d7e;">Installation de lsyncd</span> == | |||
<span style="color:#5d6d7e;">Lsyncd</span> est un outil de synchronisation temps réel basé sur <span style="color:#5d6d7e;">inotify</span> et <span style="color:#5d6d7e;">rsync</span>. | |||
Installation du package lsyncd : | |||
<pre> | <pre> | ||
dnf install lsyncd -y | dnf install lsyncd -y | ||
</pre> | </pre> | ||
== <span style="color:#5d6d7e;">Génération des clés SSH</span> == | == <span style="color:#5d6d7e;">Génération des clés SSH</span> == | ||
Pour permettre la synchronisation automatique sans saisie de mot de passe, il est nécessaire de configurer l'authentification par <span style="color:#5d6d7e;">clés SSH</span>. | |||
Générer les <span style="color:#5d6d7e;">clés SSH</span> sur chaque serveur et les échanger. | |||
Sur serveur 1 : | Sur le serveur 1, générer la clé et la copier vers le serveur 2 : | ||
<pre> | <pre> | ||
| Ligne 626 : | Ligne 738 : | ||
</pre> | </pre> | ||
Sur serveur 2 : | Sur le serveur 2, générer la clé et la copier vers le serveur 1 : | ||
<pre> | <pre> | ||
| Ligne 632 : | Ligne 744 : | ||
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.252 | ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.252 | ||
</pre> | </pre> | ||
== <span style="color:#5d6d7e;">Configuration de lsyncd</span> == | == <span style="color:#5d6d7e;">Configuration de lsyncd</span> == | ||
Créer le | La configuration de lsyncd définit les répertoires à synchroniser et les serveurs cibles. | ||
Créer le répertoire de configuration : | |||
<pre> | <pre> | ||
| Ligne 641 : | Ligne 757 : | ||
</pre> | </pre> | ||
Créer | Créer le fichier de configuration pour synchroniser le répertoire /var/www/html/ : | ||
*Remarque: adapter l'adresse IP cible en fonction du serveur où vous créez la configuration. | |||
<pre> | <pre> | ||
| Ligne 647 : | Ligne 765 : | ||
</pre> | </pre> | ||
Ajouter : | Ajouter la configuration suivante : | ||
<pre> | <pre> | ||
| Ligne 669 : | Ligne 787 : | ||
</pre> | </pre> | ||
Modifier | |||
Modifier le fichier de service systemd pour adapter les permissions et le chemin de configuration. | |||
Éditer le fichier sur les deux serveurs : | |||
<pre> | <pre> | ||
| Ligne 675 : | Ligne 797 : | ||
</pre> | </pre> | ||
Modifier les paramètres suivants : | |||
*User=rootpour donner les droits nécessaires | |||
*ExecStartpour indiquer le bon chemin vers le fichier de configuration. | |||
Configuration finale : | |||
<pre> | <pre> | ||
| Ligne 694 : | Ligne 820 : | ||
</pre> | </pre> | ||
Recharger la configuration systemd pour prendre en compte les modifications : | |||
Sur les deux serveurs, exécuter : | |||
<pre> | <pre> | ||
| Ligne 700 : | Ligne 828 : | ||
</pre> | </pre> | ||
Activer le service sur les | Activer le service au démarrage sur les deux serveurs : | ||
<pre> | <pre> | ||
| Ligne 706 : | Ligne 834 : | ||
</pre> | </pre> | ||
*Important: démarrer le service uniquement sur le serveur maître (<span style="color:#5d6d7e;">MASTER</span>). | |||
Le serveur de secours (<span style="color:#5d6d7e;">BACKUP</span>) activera automatiquement le service lors d'une bascule. | |||
<pre> | <pre> | ||
systemctl start lsyncd | systemctl start lsyncd | ||
</pre> | </pre> | ||
== <span style="color:#5d6d7e;">Reconfiguration de Keepalived</span> == | == <span style="color:#5d6d7e;">Reconfiguration de Keepalived</span> == | ||
Créer | Pour que <span style="color:#5d6d7e;">Keepalived</span> gère automatiquement le démarrage et l'arrêt de <span style="color:#5d6d7e;">lsyncd</span> lors des basculements, il faut créer des <span style="color:#5d6d7e;">scripts de notification</span>. | ||
Créer deux scripts bash dans le répertoire /etc/keepalived/ sur les deux serveurs. | |||
*Script pour le serveur <span style="color:#5d6d7e;">MASTER</span>(`master.sh`) : | |||
<pre> | <pre> | ||
| Ligne 723 : | Ligne 856 : | ||
</pre> | </pre> | ||
*Script pour le serveur <span style="color:#5d6d7e;">BACKUP</span>(`backup.sh`) : | |||
<pre> | <pre> | ||
| Ligne 730 : | Ligne 863 : | ||
</pre> | </pre> | ||
Rendre les scripts exécutables : | |||
<pre> | <pre> | ||
| Ligne 737 : | Ligne 870 : | ||
</pre> | </pre> | ||
Créer un script de vérification | Créer un script de vérification de l'état de synchronisation. | ||
Ce script permet à Keepalived de surveiller l'état de lsyncd. | |||
Créer le fichier /usr/local/bin/check_lsyncd_sync.sh : | |||
<pre> | <pre> | ||
| Ligne 756 : | Ligne 893 : | ||
</pre> | </pre> | ||
Modifier | Rendre le script exécutable : | ||
<pre> | |||
chmod +x /usr/local/bin/check_lsyncd_sync.sh | |||
</pre> | |||
Modifier la configuration de Keepalived pour intégrer les scripts de notification et de vérification : | |||
<pre> | <pre> | ||
| Ligne 762 : | Ligne 905 : | ||
</pre> | </pre> | ||
Remplacer le contenu par la configuration suivante : | |||
<pre> | <pre> | ||
| Ligne 805 : | Ligne 948 : | ||
</pre> | </pre> | ||
Redémarrer Keepalived : | Redémarrer le service Keepalived pour appliquer les changements : | ||
<pre> | <pre> | ||
| Ligne 811 : | Ligne 954 : | ||
</pre> | </pre> | ||
Sur le serveur maître : | |||
== <span style="color:#5d6d7e;">Vérification de la synchronisation</span> == | |||
Vérifier que le service <span style="color:#5d6d7e;">lsyncd</span> est actif uniquement sur le serveur maître. | |||
Sur le serveur maître (<span style="color:#5d6d7e;">MASTER</span>), vérifier l'état du service : | |||
<pre> | <pre> | ||
| Ligne 819 : | Ligne 966 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | <pre> | ||
Active | ● lsyncd.service - Live Syncing (Mirror) Daemon | ||
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) | |||
Active: active (running) since Sat 2026-02-21 17:05:00 CET; 10s ago | |||
Main PID: 5678 (lsyncd) | |||
</pre> | </pre> | ||
Sur le serveur | Sur le serveur de secours (<span style="color:#5d6d7e;">BACKUP</span>), vérifier que le service est bien arrêté : | ||
<pre> | <pre> | ||
| Ligne 831 : | Ligne 981 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | <pre> | ||
failed | ● lsyncd.service - Live Syncing (Mirror) Daemon | ||
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) | |||
Active: failed (Result: exit-code) since Sat 2026-02-21 17:05:00 CET; 2min ago | |||
</pre> | </pre> | ||
== <span style="color:#5d6d7e;">Test de la synchronisation</span> == | == <span style="color:#5d6d7e;">Test de la synchronisation</span> == | ||
Modifier la page HTML sur le maître : | Tester le mécanisme de synchronisation automatique en temps réel. | ||
Modifier la page HTML sur le serveur maître : | |||
<pre> | <pre> | ||
| Ligne 845 : | Ligne 1 001 : | ||
</pre> | </pre> | ||
Vérifier la | Vérifier que la modification a été automatiquement synchronisée sur le serveur esclave : | ||
<pre> | <pre> | ||
| Ligne 851 : | Ligne 1 007 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | |||
cc | |||
</pre> | |||
Le contenu doit être identique sur les deux serveurs. | |||
== <span style="color:#5d6d7e;">Test du basculement</span> == | |||
Simuler une panne en éteignant le serveur maître, puis vérifier que <span style="color:#5d6d7e;">lsyncd</span> démarre automatiquement sur l'esclave : | |||
<pre> | <pre> | ||
| Ligne 857 : | Ligne 1 023 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | <pre> | ||
Active | ● lsyncd.service - Live Syncing (Mirror) Daemon | ||
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) | |||
Active: active (running) since Sat 2026-02-21 17:10:00 CET; 5s ago | |||
Main PID: 5890 (lsyncd) | |||
</pre> | </pre> | ||
Modifier la page HTML sur | Modifier la page HTML sur le serveur qui est maintenant devenu maître (ancien esclave) : | ||
<pre> | <pre> | ||
| Ligne 869 : | Ligne 1 038 : | ||
</pre> | </pre> | ||
Redémarrer | Redémarrer l'ancien serveur maître et vérifier que la synchronisation s'effectue dans le bon sens : | ||
<pre> | <pre> | ||
| Ligne 875 : | Ligne 1 044 : | ||
</pre> | </pre> | ||
Vérifier le | Résultat attendu dans la console : | ||
<pre> | |||
cc | |||
</pre> | |||
Le contenu modifié sur l'ancien esclave doit être synchronisé vers le serveur qui redémarre. | |||
Vérifier le statut du service lsyncd sur l'ancien serveur maître (qui redevient maître) : | |||
<pre> | <pre> | ||
| Ligne 881 : | Ligne 1 058 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | <pre> | ||
Active | ● lsyncd.service - Live Syncing (Mirror) Daemon | ||
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) | |||
Active: active (running) since Sat 2026-02-21 17:12:00 CET; 5s ago | |||
Main PID: 6012 (lsyncd) | |||
</pre> | </pre> | ||
Sur | Sur le serveur qui est redevenu esclave (BACKUP) : | ||
<pre> | <pre> | ||
| Ligne 893 : | Ligne 1 073 : | ||
</pre> | </pre> | ||
Résultat attendu dans la console : | |||
<pre> | <pre> | ||
failed | ● lsyncd.service - Live Syncing (Mirror) Daemon | ||
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) | |||
Active: failed (Result: exit-code) since Sat 2026-02-21 17:12:00 CET; 10s ago | |||
</pre> | </pre> | ||
{| style="width:100%; background:#f2f4f4; border:1px solid #d5d8dc; padding:12px; border-radius:10px; overflow:hidden;" | {| style="width:100%; background:#f2f4f4; border:1px solid #d5d8dc; padding:12px; border-radius:10px; overflow:hidden;" | ||
| | | | ||
<b style="color:#5d6d7e;"> | <b style="color:#5d6d7e;">Votre infrastructure est maintenant complète : serveur <span style="color:#5d6d7e;">Apache</span> avec <span style="color:#5d6d7e;">HTTPS</span>, répartition de charge (<span style="color:#5d6d7e;">HAProxy</span>), haute disponibilité (<span style="color:#5d6d7e;">Keepalived</span>) et synchronisation automatique des fichiers (<span style="color:#5d6d7e;">lsyncd</span>) sont opérationnels.</b> | ||
|} | |} | ||
Dernière version du 27 février 2026 à 20:35
Installation et Configuration Apache HTTPD
1 — Installation et Configuration Apache
Installation des packages
Installation du serveur Apache ainsi que du module SSL pour HTTPS :
dnf install httpd mod_ssl -y
Vérifier que l’installation s’est bien déroulée :
rpm -qa | grep httpd
Résultat attendu dans la console :
httpd-2.4.57-5.el9.x86_64 httpd-tools-2.4.57-5.el9.x86_64 httpd-filesystem-2.4.57-5.el9.noarch mod_ssl-2.4.57-5.el9.x86_64
Configuration du serveur
Tout d’abord, il faut paramétrer le nom de la machine ainsi que l’adresse d’écoute du serveur web.
Modifier le fichier :
/etc/httpd/conf/httpd.conf
Chercher les lignes suivantes :
Listen 80 #ServerName www.example.com:80
Instructions :
- Décommenter la ligne ServerName
- Adapter le nom en fonction de votre configuration réseau (/etc/sysconfig/network)
- Définir l'écoute sur toutes les interfaces
Configuration finale :
Listen *:80 ServerName web:80
Démarrage du service HTTPD
Démarrage du service Apache :
systemctl start httpd.service --now
Activation automatique au démarrage du système (création du lien symbolique) :
systemctl enable httpd.service --now
Vérification du service
Vérifier que le service fonctionne correctement :
ss -atnp | grep httpd
Résultat attendu dans la console :
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("httpd",pid=1234,fd=4))
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("httpd",pid=1234,fd=6))
Si Apache fonctionne correctement, les ports 80 (HTTP) et 443 (HTTPS) doivent apparaître en écoute.
Ouverture des ports dans iptables
Pour rendre votre site accessible depuis le réseau, il est nécessaire d’ouvrir les ports 80 et 443. Sans cette étape, votre navigateur affichera une erreur de connexion refusée.
Modifier :
vi /etc/sysconfig/iptables
Ajouter les règles suivantes :
-I INPUT 2 -p tcp --dport 80 -j ACCEPT -I INPUT 3 -p tcp --dport 443 -j ACCEPT
Appliquer les changements :
systemctl reload iptables
Vérifier les règles :
iptables -nvL
Résultat attendu
Après vérification, vous devez voir apparaître les règles pour les ports HTTP et HTTPS.
IMPORTANT : les 2 lignes en gras ci-dessous doivent absolument être visibles. Ce sont elles qui autorisent l’accès au serveur web.
pkts bytes target prot opt in out source destination 81 5840 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Création de la page d’accueil
Créer la première page de votre site web :
vi /var/www/html/index.html
Exemple de contenu :
cc
Attribuer les droits au dossier pour qu’Apache puisse accéder aux fichiers :
chown apache.apache -R /var/www/html
Vérification finale
Tester l’accès au serveur avec curl :
curl 192.168.10.251
Résultat attendu dans la console :
cc
Vous devez voir apparaître le contenu de votre page web.
Important
2 — Configuration HTTPS (SSL/TLS)
Principe
HTTPS permet de chiffrer les échanges entre client et serveur, de garantir l'intégrité des données et d'authentifier le serveur.
Le protocole utilise le port 443.
Création d'un certificat auto-signé
Pour activer HTTPS, il est nécessaire de générer un certificat SSL/TLS. Dans un environnement de test, un certificat auto-signé suffit.
Générer un certificat SSL valide pour 365 jours :
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/pki/tls/private/apache.key \ -out /etc/pki/tls/certs/apache.crt
Configuration Apache HTTPS
Il faut maintenant indiquer à Apache l'emplacement du certificat et de la clé privée.
Modifier le fichier de configuration SSL :
vi /etc/httpd/conf.d/ssl.conf
Localiser et adapter les lignes suivantes :
SSLCertificateFile /etc/pki/tls/certs/apache.crt SSLCertificateKeyFile /etc/pki/tls/private/apache.key
Redémarrer le service Apache pour appliquer les modifications :
systemctl restart httpd
Vérification du fonctionnement HTTPS
Tester l'accès sécurisé au serveur web via HTTPS :
curl -k https://IP_SERVEUR
Le paramètre -k permet d'ignorer l'avertissement lié au certificat auto-signé.
Résultat attendu dans la console :
cc
Si la configuration est correcte, vous devez voir le contenu de votre page web.
3 — Load Balancing avec HAProxy
Principe
Le Load Balancing permet de répartir les requêtes clients sur plusieurs serveurs web, d'améliorer les performances globales, de réduire la charge sur chaque serveur et d'augmenter la disponibilité du service.
HAProxy agit comme point d'entrée unique et distribue les requêtes vers les serveurs backend.
┌─────────────────────────────────────────────────────────────┐
│ ARCHITECTURE HAPROXY │
└─────────────────────────────────────────────────────────────┘
┌──────────┐
│ Client │
└─────┬────┘
│
│ Requêtes HTTP/HTTPS
│
▼
┌──────────────┐
│ HAProxy │
│ Load Balancer│
│ (Port 80) │
└──────┬───────┘
│
┌──────────────┴──────────────┐
│ │
│ Round Robin │
│ │
▼ ▼
┌───────────────┐ ┌───────────────┐
│ Serveur Web 1 │ │ Serveur Web 2 │
│ Apache │ │ Apache │
│ (Port 8080) │ │ (Port 8080) │
└───────────────┘ └───────────────┘
Préparation des serveurs Apache (Backend)
Pour que HAProxy puisse prendre le contrôle du port 80, les serveurs Apache doivent être configurés pour écouter sur un autre port. Nous allons les faire écouter sur le port 8080.
Modifier la configuration Apache sur chaque serveur web :
vi /etc/httpd/conf/httpd.conf
Localiser et modifier les lignes suivantes :
- Avant:
Listen *:80 ServerName web:80
- Après:
Listen *:8080 ServerName web:8080
Vérifier que la configuration ne contient pas d'erreur de syntaxe :
httpd -S
Résultat attendu dans la console :
VirtualHost configuration: *:8080 web (/etc/httpd/conf/httpd.conf:42) ServerRoot: "/etc/httpd" Main DocumentRoot: "/var/www/html" Main ErrorLog: "/etc/httpd/logs/error_log" Syntax OK
Redémarrer Apache en mode gracieux (sans couper les connexions en cours) :
httpd -k graceful
Ouverture du port 8080 sur les serveurs web
Pour que HAProxy puisse communiquer avec les serveurs Apache, il est nécessaire d'autoriser le trafic sur le port 8080.
Modifier le fichier de configuration iptables :
vi /etc/sysconfig/iptables
Ajouter :
-I INPUT 1 -p tcp --dport 8080 -j ACCEPT
Appliquer les changements au pare-feu :
systemctl reload iptables
Vérifier que la règle a bien été ajoutée :
iptables -nvL | grep 8080
Résultat attendu dans la console :
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
Installation HAProxy
HAProxy doit être installé sur le serveur qui jouera le rôle de répartiteur de charge.
Installation du package HAProxy :
dnf install haproxy -y
Configuration HAProxy
La configuration de HAProxy définit comment les requêtes seront distribuées entre les serveurs.
Modifier le fichier de configuration principal :
vi /etc/haproxy/haproxy.cfg
Exemple de configuration utilisant l'algorithme round robin pour la répartition de charge :
global
log /dev/log local0
maxconn 2000
daemon
defaults
mode http
timeout connect 5s
timeout client 50s
timeout server 50s
frontend http_front
bind *:80
default_backend web_back
backend web_back
balance roundrobin
option httpchk
server web1 192.168.10.252:8080 check
server web2 192.168.10.251:8080 check
Le mode roundrobin distribue les requêtes alternativement entre les serveurs, assurant une répartition équilibrée de la charge.
Démarrage du service HAProxy
Activer et démarrer le service HAProxy :
systemctl enable haproxy --now
Vérifier que le service fonctionne correctement :
systemctl status haproxy
Résultat attendu dans la console :
● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2026-02-21 17:00:00 CET; 5s ago Main PID: 1234 (haproxy) Status: "Ready."
Test du Load Balancing
Vérifier que le système de répartition de charge fonctionne correctement.
Tester l'accès via l'adresse IP du serveur HAProxy :
curl 192.168.10.251
Effectuer plusieurs requêtes successives pour observer le mécanisme de distribution.
4 — Haute Disponibilité avec Keepalived
Principe
Keepalived permet d'assurer la continuité du service (Haute Disponibilité), de basculer automatiquement vers un serveur secondaire en cas de panne, d'utiliser une adresse IP virtuelle partagée entre plusieurs serveurs (VIP) et de superviser l'état du service HAProxy.
Fonctionnement :
Un serveur est MASTER (actif), un serveur est BACKUP (passif). Si le serveur MASTER tombe, le BACKUP récupère automatiquement l'IP virtuelle
Installation de Keepalived
Keepalived doit être installé sur les deux serveurs qui assureront la haute disponibilité (MASTER et BACKUP).
Installation du package Keepalived :
dnf install keepalived -y
Configuration du serveur maître (MASTER)
Le serveur MASTER sera le serveur actif qui portera l'adresse IP virtuelle en temps normal.
Vider le fichier de configuration par défaut :
echo > /etc/keepalived/keepalived.conf
Éditer le fichier de configuration :
vi /etc/keepalived/keepalived.conf
Ajouter la configuration suivante pour le serveur MASTER :
global_defs {
router_id WEB1
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.10.250
}
track_script {
chk_haproxy
}
}
Démarrer et activer le service Keepalived :
systemctl enable keepalived --now systemctl start keepalived --now
Configuration du serveur secondaire (BACKUP)
Le serveur BACKUP reste en veille et ne prendra le relais qu'en cas de défaillance du serveur MASTER.
Sur la seconde machine, éditer le fichier de configuration :
vi /etc/keepalived/keepalived.conf
Ajouter la configuration suivante pour le serveur BACKUP :
global_defs {
router_id WEB2
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.10.250
}
track_script {
chk_haproxy
}
}
Activer et démarrer le service :
systemctl enable keepalived --now systemctl start keepalived --now
Vérification du fonctionnement
Vérifier que l'adresse IP virtuelle est bien active sur le serveur MASTER.
Sur le serveur MASTER, afficher les adresses IP :
ip a
Résultat attendu dans la console :
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.252/24 brd 192.168.10.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.10.250/32 scope global eth0
valid_lft forever preferred_lft forever
L'adresse IP physique du serveur et l'adresse IP virtuelle 192.168.10.250 doivent apparaître sur l'interface réseau.
Test du mécanisme de basculement :
1. Arrêter le serveur MASTER ou stopper le service Keepalived 2. Sur le serveur BACKUP, exécuter la commande suivante :
ip a
Résultat attendu dans la console :
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.251/24 brd 192.168.10.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.10.250/32 scope global eth0
valid_lft forever preferred_lft forever
L'adresse IP virtuelle doit apparaître automatiquement sur le serveur secondaire.
5 — Synchronisation des serveurs
Principe
La synchronisation permet de maintenir les mêmes fichiers sur plusieurs serveurs, d'assurer la cohérence des données et de faciliter la haute disponibilité.
Installation de lsyncd
Lsyncd est un outil de synchronisation temps réel basé sur inotify et rsync.
Installation du package lsyncd :
dnf install lsyncd -y
Génération des clés SSH
Pour permettre la synchronisation automatique sans saisie de mot de passe, il est nécessaire de configurer l'authentification par clés SSH.
Générer les clés SSH sur chaque serveur et les échanger.
Sur le serveur 1, générer la clé et la copier vers le serveur 2 :
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.251
Sur le serveur 2, générer la clé et la copier vers le serveur 1 :
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.252
Configuration de lsyncd
La configuration de lsyncd définit les répertoires à synchroniser et les serveurs cibles.
Créer le répertoire de configuration :
mkdir -p /etc/lsyncd
Créer le fichier de configuration pour synchroniser le répertoire /var/www/html/ :
- Remarque: adapter l'adresse IP cible en fonction du serveur où vous créez la configuration.
vi /etc/lsyncd/lsyncd.conf.lua
Ajouter la configuration suivante :
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.status",
nodaemon = false,
}
sync {
default.rsync,
source = "/var/www/html/",
target = "root@192.168.10.251:/var/www/html/",
rsync = {
archive = true,
compress = true,
_extra = {"--delete"}
}
}
Modifier le fichier de service systemd pour adapter les permissions et le chemin de configuration.
Éditer le fichier sur les deux serveurs :
vi /usr/lib/systemd/system/lsyncd.service
Modifier les paramètres suivants :
- User=rootpour donner les droits nécessaires
- ExecStartpour indiquer le bon chemin vers le fichier de configuration.
Configuration finale :
[Unit] Description=Live Syncing (Mirror) Daemon Documentation=man:lsyncd(1) https://axkibe.github.io/lsyncd/ After=network.target [Service] User=root Type=simple EnvironmentFile=-/etc/sysconfig/lsyncd ExecStart=/usr/bin/lsyncd -nodaemon /etc/lsyncd/lsyncd.conf.lua Restart=on-failure [Install] WantedBy=multi-user.target
Recharger la configuration systemd pour prendre en compte les modifications :
Sur les deux serveurs, exécuter :
systemctl daemon-reload
Activer le service au démarrage sur les deux serveurs :
systemctl enable lsyncd
- Important: démarrer le service uniquement sur le serveur maître (MASTER).
Le serveur de secours (BACKUP) activera automatiquement le service lors d'une bascule.
systemctl start lsyncd
Reconfiguration de Keepalived
Pour que Keepalived gère automatiquement le démarrage et l'arrêt de lsyncd lors des basculements, il faut créer des scripts de notification.
Créer deux scripts bash dans le répertoire /etc/keepalived/ sur les deux serveurs.
- Script pour le serveur MASTER(`master.sh`) :
#!/bin/bash systemctl start lsyncd
- Script pour le serveur BACKUP(`backup.sh`) :
#!/bin/bash systemctl stop lsyncd
Rendre les scripts exécutables :
chmod +x /etc/keepalived/master.sh chmod +x /etc/keepalived/backup.sh
Créer un script de vérification de l'état de synchronisation.
Ce script permet à Keepalived de surveiller l'état de lsyncd.
Créer le fichier /usr/local/bin/check_lsyncd_sync.sh :
#!/bin/bash
STATUS_FILE="/var/log/lsyncd.status"
systemctl is-active --quiet lsyncd
if [ $? -ne 0 ]; then
exit 1
fi
if grep -q "Syncing" "$STATUS_FILE"; then
exit 1
fi
exit 0
Rendre le script exécutable :
chmod +x /usr/local/bin/check_lsyncd_sync.sh
Modifier la configuration de Keepalived pour intégrer les scripts de notification et de vérification :
vi /etc/keepalived/keepalived.conf
Remplacer le contenu par la configuration suivante :
bal_defs {
router_id WEB1
}
vrrp_script check_sync {
script "/usr/local/bin/check_lsyncd_sync.sh"
interval 2
weight 2
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.10.250
}
track_script {
chk_haproxy
check_sync
}
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
notify_fault "/etc/keepalived/backup.sh"
}
Redémarrer le service Keepalived pour appliquer les changements :
systemctl restart keepalived
Vérification de la synchronisation
Vérifier que le service lsyncd est actif uniquement sur le serveur maître.
Sur le serveur maître (MASTER), vérifier l'état du service :
systemctl status lsyncd
Résultat attendu dans la console :
● lsyncd.service - Live Syncing (Mirror) Daemon Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2026-02-21 17:05:00 CET; 10s ago Main PID: 5678 (lsyncd)
Sur le serveur de secours (BACKUP), vérifier que le service est bien arrêté :
systemctl status lsyncd
Résultat attendu dans la console :
● lsyncd.service - Live Syncing (Mirror) Daemon Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Sat 2026-02-21 17:05:00 CET; 2min ago
Test de la synchronisation
Tester le mécanisme de synchronisation automatique en temps réel.
Modifier la page HTML sur le serveur maître :
vi /var/www/html/index.html
Vérifier que la modification a été automatiquement synchronisée sur le serveur esclave :
cat /var/www/html/index.html
Résultat attendu dans la console :
cc
Le contenu doit être identique sur les deux serveurs.
Test du basculement
Simuler une panne en éteignant le serveur maître, puis vérifier que lsyncd démarre automatiquement sur l'esclave :
systemctl status lsyncd
Résultat attendu dans la console :
● lsyncd.service - Live Syncing (Mirror) Daemon Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2026-02-21 17:10:00 CET; 5s ago Main PID: 5890 (lsyncd)
Modifier la page HTML sur le serveur qui est maintenant devenu maître (ancien esclave) :
vi /var/www/html/index.html
Redémarrer l'ancien serveur maître et vérifier que la synchronisation s'effectue dans le bon sens :
cat /var/www/html/index.html
Résultat attendu dans la console :
cc
Le contenu modifié sur l'ancien esclave doit être synchronisé vers le serveur qui redémarre.
Vérifier le statut du service lsyncd sur l'ancien serveur maître (qui redevient maître) :
systemctl status lsyncd
Résultat attendu dans la console :
● lsyncd.service - Live Syncing (Mirror) Daemon Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2026-02-21 17:12:00 CET; 5s ago Main PID: 6012 (lsyncd)
Sur le serveur qui est redevenu esclave (BACKUP) :
systemctl status lsyncd
Résultat attendu dans la console :
● lsyncd.service - Live Syncing (Mirror) Daemon Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Sat 2026-02-21 17:12:00 CET; 10s ago