# Installer un serveur de Load Balancing - HAProxy

[![image-1607717025268.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607717025268.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607717025268.png)

### <span style="text-decoration: underline;">**Introduction :** </span>

##### <span style="text-decoration: underline;">**Contexte :**</span> Le <span style="text-decoration: underline;">load balancing</span> permet la tolérance de panne mais aussi la continuité de service lors une forte demande utilisateur. Concrètement, un serveur de load balancing ou en français, serveur de répartition de charge, redirige l'utilisateur vers plusieurs serveurs de même fonction. Un utilisateur pourra sans même s'en rendre compte consulter deux serveurs web entre deux pages d'un site. Ce mécanisme permet donc de traiter un nombre d'utilisateur bien plus important qu'un serveur seul permettrais. 

#####  

##### <span style="text-decoration: underline;">**Schéma :** </span>

[![image-1607722445805.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607722445805.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607722445805.png)

### <span style="text-decoration: underline;">**Étape 1 - Prérequis**</span>

Conformément au schéma ci-dessus, pour réaliser l'installation d'HAProxy, vous aurez besoin d'au minimum, deux serveurs web. Pour comprendre correctement le load balancing, j'ai modifié la page d'accueil de chacun de ces sites web afin qu'ils affichent leurs noms. Notons qu'en production, ce serait le même site web qui serait stocké dans les serveurs web.

##### **<span style="text-decoration: underline;">Serveur web 01 :</span>** [![image-1607719992443.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607719992443.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607719992443.png)

#####  

##### **<span style="text-decoration: underline;">Serveur web 02 :  
[![image-1607720011807.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607720011807.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607720011807.png)</span>**

### <span style="text-decoration: underline;">**Étape 2 - Mise à jour du système et installation d'HAProxy**</span>

Premièrement nous allons mettre à jour notre serveur. Un système à jour est un système fiable !

```
apt-get update ; apt-get upgrade -y
```

En suite nous allons installer le paquet haproxy :

```
apt-get install haproxy -y
```

### <span style="text-decoration: underline;">**Étape 3 - Modification de la configuration d'HAProxy**</span>

Maintenant, modifions la configuration du paquet :

```
nano /etc/haproxy/haproxy.cfg
```

Nous laisserons la configuration par défaut et ajouterons à la fin du fichier de configuration les lignes suivantes :

```
# FrontEND
frontend frontend-base
        # IP d'écoute du proxy.
        bind 172.31.64.100:80
        default_backend backend-base
        option forwardfor
# BackEND
backend backend-base
        # On utilise le mode Roundrobin
        balance roundrobin
        # On liste les serveurs de backend
        server  serveur-web-1   172.31.64.101:80 check
        server  serveur-web-2   172.31.64.102:80 check
```

Pour appliquer les modifications, il va falloir redémarrer le service haproxy. Faites la commandes ci dessous :

```
/etc/init.d/haproxy restart 
```

### <span style="text-decoration: underline;">**Étape 4 - Tests de la configuration d'HAProxy**</span>

Pour tester si la configuration fonctionne, nous allons utiliser un navigateur et consulter l'adresse IP du serveur HAPROXY. Celui ci écoute sur le port 80 (HTTP) et redirigera toutes nos requêtes vers l'un des deux serveurs du cluster.

<span style="text-decoration: underline;">**Nous nous y rendons une première fois :** </span>

[![image-1607720034246.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607720034246.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607720034246.png)

<span style="text-decoration: underline;">**Nous nous y rendons une seconde fois :** </span>

[![image-1607720068441.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607720068441.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607720068441.png)

Le load balancing fonctionne belle est bien, nous avons donc correctement installé HAProxy.

### <span style="text-decoration: underline;">**Étape 5 - Stress Test.**</span>

**Un stress test est le fait de surcharger un serveur pour en connaitre ses limites.** Nous allons donc utiliser une commande venant d'apache2. Cette commande permet de simuler un nombre très important de connexions sur un serveur Web.

Afin d'effectuer une comparaison fiable, nous allons utiliser des serveurs web ayant la même puissance à chaque fois.

#####  

##### <span style="text-decoration: underline;">**1 - Schéma :**</span>

[![image-1607735739594.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607735739594.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607735739594.png)

#####  

##### <span style="text-decoration: underline;">**2 - Installation :**</span>

Pour installer apache2, il faudra exécuter les commandes suivantes sur votre machine de stress test :

```
apt-get install apache2 -y
```

<p class="callout info">Aucune configuration pour Apache2 n'est nécessaire.</p>

#####  

##### <span style="text-decoration: underline;">**3 - Stress d'un serveur web (seul) :**</span>

Nous allons donc procéder à la surcharge d'un de nos serveur web et c'est pourquoi, dans la commande suivante nous mettrons l'adresse IP du serveur web 01.

```
ab -n 100000000 -c 9999 172.31.64.101/
```

- L'argument -n permet de spécifier le nombre total de requêtes à envoyer.
- L'argument -c définie le nombre de requêtes à faire simultanément.
- Pour ce qui est de l'adresse IP, n'oubliez pas le / à la fin sinon cela ne fonctionnera pas.

**<span style="text-decoration: underline;">Résultat :</span>**

[![image-1607737904465.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607737904465.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607737904465.png)

Cela signifie qu'au bout de **372 763 requêtes**, le serveur web 01 ne peut plus tenir la charge.

##### <span style="text-decoration: underline;">**4 - Stress test avec load balancing ( 2 machines ) :**</span>

C'est le cluster entier que nous allons surcharger, pour cela, nous avons simplement à renseigner l'adresse IP du serveur HAProxy.

```
ab -n 100000000 -c 9999 172.31.64.100/
```

**<span style="text-decoration: underline;">Résultat :</span>**

[![image-1607738431268.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/scaled-1680-/image-1607738431268.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2020-12/image-1607738431268.png)

Cela signifie qu'au bout de  **529 522 requêtes**, le cluster ne peut plus tenir la charge.

##### <span style="text-decoration: underline;">**5 - Conclusion :**</span>

Nous avons bel et bien installé une solution de load balancing permettant de réaliser une continuité de service.