PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Load-Balancing et Fail-Over Web avec Pfsense

lundi 16 juin 2014 à 09:00

I. Présentation

Les serveurs web se doivent aujourd’hui d’avoir une haute disponibilité et de supporter une haute charge au vue de l’importance qu’ils ont pour les entreprises. Il est souvent conseillé pour accroitre cette disponibilité de mettre en place plusieurs serveurs ayant le même rôle avec la possibilité de répartir la charge entre ceux-ci (ce que l’on appelle le Load-Balancing) mais également de prendre toute la charge sur un serveur si l’autre vient à être indisponible (ce que l’on appelle le Fail-Over).

Dans ce tutoriel, nous allons apprendre à mettre en place du Load-Balancing et du Fail-Over entre deux serveurs web avec la plate-forme libre et open-source Pfsense.

II. Architecture globale

Nous allons donc travailler sur l’architecture suivante :

LBpfsense01

Celle-ci est plutôt basique pour un soucis de clarté du tutoriel. Il faut savoir qu’au lieu de mettre des serveurs web en place, on pourrait utiliser n’importe quel autre service. Le service web est ici pris car il correspond à la majorité des contextes de mise en place. Nous allons travailler avec une Pfsense version 2.1.

Note : Les deux serveurs web seront quant à eux des serveurs Apache 2.2 sous Linux. Nous y mettrons volontairement deux pages web différentes sur l’un et l’autre pour illustrer le fonctionnement du Load-Balancing ainsi que du Fail-Over. Nous partons du principe que le réseau au niveau IP et les serveurs web sont déjà configurés.

III. Création du Pool de load Balancing

On va commencer par créer un pool, c’est à dire un groupe, dans lequel nous mettrons ensuite nos serveurs. La gestion par pool permet de travailler avec des groupes ce qui est plus simple et plus efficace lors de configurations complexes. On se rend donc dans  “Services” puis dans “Load Balancer” :

LBpfsense02

On se retrouve ensuite face à un tableau qui est le tableau de gestion des Pools. On cliquera sur le “+” à droite de ce tableau pour en créer un nouveau :

LBpfsense03

Tableau de gestion de pools de serveur dans Pfsense

On arrivera sur un formulaire sur lequel on pourra créer notre pool de serveur :

LBpfsense04

Formulaire Load-Balancer

Dans ce nouveau formulaire nous allons remplir le premier cadre dans lequel nous saisirons le nom de notre Pool, le mode (ici Load-Balance), éventuellement une description et le port sur lequel il agira. Etant donné que nous mettons deux serveurs web derrière, on mettra 80. On saisi ensuite la valeur “Retry” qui permet d’indiquer combien de fois un serveur va être vérifié avant d’être déclaré hors service. Ici “3” signifie qu’au bout de 3 réponses de suite invalides de la part d’un serveur, celui-ci sera considéré comme hors service et s’appliquera alors le Fail-over, le seul serveur restant prendra toute la charge. En seconde partie de se formulaire nous indiquerons sur quel protocole le Pfsense doit faire ses vérifications, attention le choix est limité  :

LBpfsense05

Formulaire Load-Balancer

Puis on ajoutera les différentes IP de nos serveurs web. Ici j’en ai deux, je les saisis puis cliquer sur “Add to pool”. On cliquera ensuite sur “Save” puis sur “Apply Change” sur la page suivante. On pourra alors voir un récapitulatif de notre pool dans le tableau des Pools :

LBpfsense06

Tableau récapitulatif des pools de serveur

Il faut également savoir que l’on peut voir et modifier les métriques de base qui gèrent le load-balancing et le fail-over dans l’onglet “Settings” :

LBpfsense14

Dans l’onglet Settings, on voit les métriques de base appliquées au load-balancing

On voit ici donc trois métriques :

IV. Le serveur virtuel

Maintenant que notre pool est créé, nous allons faire ce que l’on appelle un serveur virtuel. C’est un serveur qui va représenter notre pool sur l’interface WAN sur lequel les requêtes web client arrivons. On va se rendre dans le tableau “Virtual Server” puis cliquer sur le “+” à droite du tableau pour arriver sur ce formulaire :

LBpfsense07

Formulaire de création d’un virtual server

Ici nous allons indiquer le nom du serveur virtuel qui n’est qu’à titre indicatif, aucun rapport avec le nom DNS, une description puis l’adresse IP sur laquelle les requêtes clients arriveront. Ici , il s’agit de l’adresse IP WAN de mon serveur. On va ensuite lier notre pool web à ce serveur virtuel et indiquer le protocole de transport qui est ici TCP. Une fois de plus nous cliquerons sur “Submit” puis sur “Apply Change”.

Dans notre cas, les requêtes arrivent de l’extérieur, il faut donc créer une règle qui permettra aux requêtes d’arriver et d’être acceptées. Nous allons donc dans “Firewall” puis “Rules” on cliquera sur le “+” à droite du tableau pour ajouter une règle :

LBpfsense08

La seule à modifier par rapport à ce qui est donné par défaut est le port de destination que l’on doit mettre en HTTP. On s’assurera que la règle est bien en “Pass” et on pourra ajouter des conditions supplémentaires si besoin est.

V. Test du Load-Balancing et du Fail-Over

Pfsense met en place différents outils permettant de voir l’état du Pool de serveur. On peut aller dans “Status” puis dans “Load Balancer :LBpfsense09

Ici on verra l’état des serveurs du pools ainsi que leur disponibilité actuelle et cumulée. Le pourcentage présent représente le temps global de disponibilité de chacun des serveurs par rapport au protocole de vérification indiqué.

LBpfsense10

Nous verrons plus globalement dans l’onglet “Virtual Servers” l’état actuelle du ou des serveurs virtuels :LBpfsense11

On peut également aller “Status” puis “System Logs” et aller dans l’onglet “Load Balancer” pour voir les logs concernant le Load balancing :

LBpfsense12

Enfin pour tester notre serveur virtuel et notre load-balancing, il suffit d’aller plusieurs fois sur l’IP WAN de notre serveur Pfsense (celle configurée dans notre serveur web virtuel) et voir que l’on arrive parfois sur un serveur, parfois sur un autre. Il faut bien sûr pour cela avoir mis en place une différence sur les pages web des deux serveurs pour pouvoir s’en apercevoir, ce qui n’est pas forcément le but final.

Comme test final, on pourra tout simple arrêter un serveur ou le service monitoré par Pfsense (ici le service web) et voir que cela ne cause aucune perturbation car tout le flux va sur l’autre serveur toujours opérationnel.

VI. Aller plus loin : Fail-Over des frontaux Pfsense

Dans cette architecture, nous pouvons identifier un SPOF (Single Point of Failure), c’est à dire un point unique et donc critique qui pourrait mettre à mal nos efforts pour la haute disponibilité. Il s’agit de l’unique serveur Pfsense, en effet, celui-ci étant l’unique passage pour aller vers les serveurs web qui sont eux redondés. Pour cela, je vous invite à mettre en place une redondance Pfsense en amont de vos serveurs web, ceux-ci partageront une IP coté “WAN” et permettra la mise en place d’une redondance des serveurs web mais également des serveurs Pfsense. Je vous invite à suivre ce tutoriel pour apprendre à mettre deux serveurs Pfsense en redondance .

On pourra alors avoir quelque chose qui ressemble à ce schéma au niveau fonctionnel :

LBpfsense13

 Ici on voit bien les deux couches (Pfsense & Web) qui sont chacune redondées pour prévoir la panne d’un des éléments des deux blocs de façon simultanée.