TP4 : Équilibrage de charge avec Apache
1. Serveur front : Configuration réseau et Routage (NAT)
Exécutez ces commandes en tant que root sur le serveur front.
1.1 Configuration des interfaces réseau
Éditez le fichier /etc/network/interfaces :
auto lo
iface lo inet loopback
# Interface publique
allow-hotplug enp1s0
iface enp1s0 inet dhcp
# Interface privée
auto enp7s0
iface enp7s0 inet static
address 10.20.1.10
netmask 255.255.255.0
Puis redémarrez le service réseau :
systemctl restart networking
1.2 Activation de l'IP Forwarding
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sysctl -p
1.3 Mise en place du Masquerading (NAT)
iptables -t nat -A POSTROUTING -s 10.20.1.0/24 -o enp1s0 -j MASQUERADE
1.4 Sauvegarde persistante des règles
Répondez "Oui" aux questions de l'installateur.
apt-get update
apt-get install -y iptables-persistent
netfilter-persistent save
2. Serveurs back : Création des sites web
Exécutez chaque bloc sur le serveur correspondant en tant que root.
Sur le serveur back1
Créez le répertoire et la page d'accueil :
mkdir -p /var/www/serveur-a
echo "<h1>Bienvenue sur le Serveur A (back1)</h1><p>Cette page est servie par 10.20.1.11</p>" > /var/www/serveur-a/index.html
Créez le fichier /etc/apache2/sites-available/serveur-a.conf :
<VirtualHost *:80>
ServerName www.serveur-a.net
DocumentRoot /var/www/serveur-a
ErrorLog ${APACHE_LOG_DIR}/serveur-a_error.log
CustomLog ${APACHE_LOG_DIR}/serveur-a_access.log combined
</VirtualHost>
Activez le site :
a2ensite serveur-a.conf
systemctl reload apache2
Sur le serveur back2
Créez le répertoire et la page d'accueil :
mkdir -p /var/www/serveur-b
echo "<h1>Bienvenue sur le Serveur B (back2)</h1><p>Cette page est servie par 10.20.1.12</p>" > /var/www/serveur-b/index.html
Créez le fichier /etc/apache2/sites-available/serveur-b.conf :
<VirtualHost *:80>
ServerName www.serveur-b.net
DocumentRoot /var/www/serveur-b
ErrorLog ${APACHE_LOG_DIR}/serveur-b_error.log
CustomLog ${APACHE_LOG_DIR}/serveur-b_access.log combined
</VirtualHost>
Activez le site :
a2ensite serveur-b.conf
systemctl reload apache2
Sur le serveur back3
Créez le répertoire et la page d'accueil :
mkdir -p /var/www/serveur-c
echo "<h1>Bienvenue sur le Serveur C (back3)</h1><p>Cette page est servie par 10.20.1.13</p>" > /var/www/serveur-c/index.html
Créez le fichier /etc/apache2/sites-available/serveur-c.conf :
<VirtualHost *:80>
ServerName www.serveur-c.net
DocumentRoot /var/www/serveur-c
ErrorLog ${APACHE_LOG_DIR}/serveur-c_error.log
CustomLog ${APACHE_LOG_DIR}/serveur-c_access.log combined
</VirtualHost>
Activez le site :
a2ensite serveur-c.conf
systemctl reload apache2
3. Serveur front : Équilibreur de charge Apache
Retournez sur le serveur front (toujours en root).
3.1 Résolution des noms DNS locaux
Ajoutez ces lignes à la fin du fichier /etc/hosts :
10.20.1.11 www.serveur-a.net
10.20.1.12 www.serveur-b.net
10.20.1.13 www.serveur-c.net
3.2 Activation des modules requis
a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests
3.3 Sécurisation du proxy
Éditez le fichier /etc/apache2/mods-available/proxy.conf :
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
Order deny,allow
Deny from all
</Proxy>
</IfModule>
3.4 Création du VirtualHost d'équilibrage
Répartition configurée : 50% / 30% / 20%
Créez le fichier /etc/apache2/sites-available/balanced.conf :
<VirtualHost *:80>
ServerName www.balanced.net
<Proxy "balancer://moncluster">
BalancerMember "http://www.serveur-a.net" loadfactor=5
BalancerMember "http://www.serveur-b.net" loadfactor=3
BalancerMember "http://www.serveur-c.net" loadfactor=2
ProxySet lbmethod=byrequests
Order allow,deny
Allow from all
</Proxy>
ProxyPass "/" "balancer://moncluster/"
ProxyPassReverse "/" "balancer://moncluster/"
ErrorLog ${APACHE_LOG_DIR}/balanced_error.log
CustomLog ${APACHE_LOG_DIR}/balanced_access.log combined
</VirtualHost>
3.5 Activation et redémarrage
a2ensite balanced.conf
systemctl restart apache2
4. Machine Client : Configuration et Test final
4.1 Ajout de la résolution DNS locale
echo "192.168.122.50 www.balanced.net" | sudo tee -a /etc/hosts
4.2 Test de répartition de charge (10 requêtes)
for i in {1..10}; do curl -s http://www.balanced.net | grep "Serveur"; done