Skip to main content

Redondance de serveurs WEB avec HAProxy

Mise en place du HAP

Activer le routage du serveur web afin de permettre de ping l’extérieur et de faire des MAJ.

HAP1.png

Ajout de la configuration du front end et du back end check

sudo nano etc/haproxy/haproxy.cfg

HAP2.png

Vient alors un problème : si le HAP tombe, plus aucun serveur n'est accessible. Solution : mise en place d'un heartbeat grâce à keepalived entre 2 HAP

aller sur le HAP et installer keepalived 

apt-get installed keepalived

Il faut modifier les fichiers de configuration

nano /etc/sysctl.conf

au dessus de la ligne précédemment décommentée, on ajoute ceci

net.ipv4.ip_nonlocal_bind=1
net.ipv4.conf.all.arp_announce=1
net.ipv4.conf.all.arp_ignore=1

HAP3.jpg

Faire une vérification

sysctl -p /etc/sysctl.conf

la commande doit retourner les 4 lignes que l’on vient de saisir

on récupère l’ip de notre machine qui deviendra l’adresse virtuelle commune à nos 2 HAP 

ip c -linkshow

Lui donner .10 (.20 sera configuré sur la seconde machine)

Rendre le changement effectif : 

service networking restart

Modifier le fichier de conf de keepalived

nano /etc/keepalived/keepalived.conf

Y saisir ceci : 

vrrp_instance VI_1 {
virtual_router_id 100
state MASTER
priority 100
#contrôle du balancer inter-load toutes les 1 secondes
advert_int 1
interface ens18 #ici l'ID est propre à chaque machine, que l'on peut voir en faisant ip a

#authentification mutuelle entre les LB, identiques sur les deux membres
authentication {
auth_type PASS
auth_pass secret #le mot de passe voulu
     }
     # Interface réseau commune aux deux LB
   virtual_ipaddress {
10.0.0.80/32 brd 10.0.0.255 scope global
     }
}

Sauvegarder et appliquer

service keepalived restart

Vérifier que tout soit ok

service keepalived status

En listant à nouveau la configuration réseau de la machine ip a les nouvelles adresses doivent apparaître

HAP4.png

on peut maintenant créer le second serveur web et lui attribuer 10.0.0.20

En cas de clonage de VM, il faudra modifier l'adresse de la seconde carte réseau également et redémarrer le service avec service networking restart 

Modifier le fichier de conf de keepalived

nano /etc/keepalived/keepalived.conf

MASTER devient BACKUP (slave ne rentre pas dans la terminologie de conf)
100 devient 90 

on a donc : 

vrrp_instance VI_1 {
virtual_router_id 100
state BACKUP
priority 90
#contrôle du balancer inter-load toutes les 1 secondes
advert_int 1
interface ens18 #ici l'ID est propre à chaque machine, que l'on peut voir en faisant ip a

#authentification mutuelle entre les LB, identiques sur les deux membres
authentication {
auth_type PASS
auth_pass secret #le mot de passe voulu
     }
     # Interface réseau commune aux deux LB
   virtual_ipaddress {
10.0.0.80/32 brd 10.0.0.255 scope global
     }
}

optimisation : load-balancing

Objectif : le HAP2 sert de serveur WEB quand le HAP1 est fonctionnel
Afin de répartir la charge du HAP1, on va mettre en place un serveur WEB sur le HAP2

ci-dessous, les termes "srv" et "domaine" sont à modifier selon l'environnement

Tout d'abord, installer apache2 sur le serveur 

apt-get install apache2

Afin de reconnaître la page, on modifie **index.html** afin d’y ajouter des éléments facilement identifiables

nano /var/www/html/index.html

On peut par exemple changer le champs titre qui apparaîtra dans l’onglet, ou la première ligne “it works”. Une fois cela fait on copie le fichier en le renommant afin de l’identifier correctement

cp /var/www/html/index.html /var/www/html/site1.srv.domaine

Il faut ensuite "activer" la page

a2ensite site1.srv.domaine

On lui donne ensuite une configuration virtuelle

nano /etc/apache2/sites-available/site1.srv.domaine.conf

Définir ceci : 

<VirtualHost *:8080>
#en temps normal, on aurait renseigné le port 80 mais celui-ci est utilisé par le HAP, il faut le laisser disponible

DocumentRoot /var/www/html/site1.srv.domaine
ServerName site1.184.sio
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combine

<Directory /var/www/html/site1.srv.domaine/>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Redémarrer apache pour appliquer le changement

systemctl reload apache2

En cas d’erreur, s’assurer que le service soit démarré avec

systemctl start apache2

Faire un contrôle du statut ; doit être vert active/running

service apache2 status

Enfin, comme on a mis le port 8080 et non 80 dans le virutal host, il faut indiquer a apache d'écouter sur ce port aussi

nano /etc/apache2/ports.conf


hap5.png

On peut aussi établir un HTTPS en utilsant openssl autosigné. Sur le HAP1, il faut tout d'abord créer le dossier qui va contenir le certificat

mkdir /etc/haproxy/cert/

Créer ensuite la clé (key) et le certificat (crt)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/haproxy/cert/certif.key -out /etc/haproxy/cert/certif.crt

Enfin, combiner dans une clé publique (pem)

cat certif.crt certif.key > certif.pem

Ajouter le certificat dans un nouveau frontend dans le fichier de conf du HAP

nano /etc/haproxy/haproxy.cfg

hap6.jpg


Redémarrer Keepalive et HAProxy pour être sur d’appliquer les modifications

service keepalived restart
service haproxy restart