lundi 7 décembre 2015

Load-Balancing et Fail-Over Web avec Pfsense

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 leLoad-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 :

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” :

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 :
On arrivera sur un formulaire sur lequel on pourra créer notre pool de serveur :
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 Pfsensedoit faire ses vérifications, attention le choix est limité  :

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 :
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” :
On voit ici donc trois métriques :
  • timeout : Permet de fixer en milliseconde le délai toléré pour la réponse à une vérification. Cela signifie qu’un service qui répond en plus de XX milliseconde sera considéré comme hors-service après un nombre défini auparavant de réponse “négative”. Par défaut ce délai est de 1000ms, soit 1 seconde.
  • interval : Permet de fixer le délai entre chaque vérification d’hôte, on indique le délai en seconde et il est par défaut de 10 secondes.
  • prefork : Permet de fixer le nombre de processus utilisé par relayd, l’agent de load balancing. Par défaut, 5 processus lui sont dédiés.

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 :
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 :
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 :

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é.

Nous verrons plus globalement dans l’onglet “Virtual Servers” l’état actuelle du ou des serveurs virtuels :
On peut également aller “Status” puis “System Logs” et aller dans l’onglet “Load Balancer” pour voir les logs concernant le Load balancing :
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 :

 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.

Aucun commentaire:

Enregistrer un commentaire