Mise en place de Load Balancing via LVS

Dans notre réseau nous disposons de deux serveurs web, le but de cette article est de mettre en place de la répartition de charge entre ces deux serveurs web. Pour ce faire nous allons utiliser LVS (Linux Virtual Server).

I – Prérequis

LVS est un projet contenant un ensemble de produits de répartition de charge, management de cluster, etc. Nous avons besoin de trois machine au total, vu que nous faisons du Load Balancing je vous invite à aller voir mon cours sur la haute disponibilité (ici).

Voici à quoi ressemble notre réseau :

Le directeur LVS est une machine fraichement installé sous Debian, les deux server web sont des apache2.

Tableau récapitulatif des IP :

Machine

@IP

Serveur web 1

172.17.0.100

Serveur web 2

172.17.0.101

Directeur LVS

172.17.0.99

VIP

172.17.0.98

En plus, les serveurs auront l’adresse IP virtuelle (VIP), la VIP est l’adresse IP qui permet de joindre le cluster.

II – Installation et configuration du directeur

Nous commençons par installer le paquet ipvsadm (apt-get install ipvsadm).

Une fois le paquet installer nous allons modifier les configurations d’ipvsadm nous ouvrons (avec notre éditeur de texte préféré) le fichier /etc/default/ipvsadm, nous mettons les configurations suivantes dans ce fichier :

Nous indiquons que nous voulons faire démarrer le service au démarrage (AUTO=true), que nous voulons que le serveur LVS soit master (DAEMON=master) et qu’il utilise la bonne interface réseau (enp2s0).

On configure l’adresse IP virtuelle (dans le fichier /etc/network/interface) sur une sous-interface de notre interface.

On met un /32 car c’est la seule machine de ce sous réseau. Puis on « lève » cette interface.

Ajoutons un service sur notre adresse IP virtuelle (-A pour ajouter), nous ajoutons un service TCP en précisant l’IP virtuelle et le port (-t 172.17.0.98:80).

Cette commande déclare également que l’on fait du round robin (-s rr), c’est-à-dire de la répartition de charge.

Puis nous déclarons les serveurs réels qui compose notre cluster.

Cette commande ajoute un serveur réel (-a) de type TCP (@IP:Port) qui correspond au serveur réel (-r @IP:Port), on ajoute les serveurs en mode Direct Routing (-g), c’est-à-dire que le serveur web répond directement au client. On a également attribué un poid (-w) pour chaque serveur, le serveur avec le plus de poids est le serveur privilégié par le LVS.

On peut vérifier la configuration avec la commande ipvsadm -Ln.

On termine la configuration de notre serveur en sauvegardant grâce à la commande suivante :

III – Modification sur les serveurs web

Sur chaque serveur web il faut désactiver les résolution arp, les serveurs web n’auront plus à faire de résolution arp car tout le monde communique avec le cluster (donc avec le directeur LVS) et non plus avec les serveurs web.

Ainsi on ajoute ces valeurs dans le fichier /etc/sysctl.conf puis on recharge le fichier de configuration (sysctl -p)

On configure notre IP virtuelle (dans le fichier /etc/network/interface) sur chaque serveur.

IV – Attention au pare-feu

Dans notre réseau nous avons un pare-feu IPCOP, notre pare-feu bloque toutes les entrées vers d’autres IP que celles de nos serveurs web réel or maintenant nous n’utilisons plus ces adresses IP, nous utilisons l’IP virtuelle du cluster.

Nous allons donc modifier légèrement notre pare-feu. Notre pare-feu contient des règles autorisant notre LAN (non représenté sur notre schéma) à accéder aux IP des serveurs web réels, je les remplace par une règle autorisant le LAN à accéder à l’IP virtuelle. Cette règle fait partie des règle interne (Internal Traffic) de notre pare-feu.

On modifie aussi notre règle de Port Forwarding pour renvoyer vers l’adresse IP virtuelle et non l’adresse d’un serveur web.

V – Test

Pour tester nous initions plusieurs connexions, comme on a deux pages web différentes entre les deux serveurs nous allons d’abord obtenir la page du serveur avec le poids le plus élevé puis la page de l’autre.

Je rafraîchis la page et j’obtiens :

On voit bien que l’on obtient deux pages différentes, et on peut voir que la première page que l’on a obtenue est la page du serveur avec le poids le plus élevé.

sources : le blog de Guillaume ; server-world ; wikipedia

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.