Mise en place d un équilibrage de charge Introduction HAProxy est une solution libre, fiable et très performante de répartition de charge de niveaux (4) et (7) Pour le TP nous allons mettre en place 3 serveurs (Debian) et un client (Windows) Topologie : VM HAProxy : hostname : HaProxy 2 cartes réseaux (les 2 en interne) et une 3 e avec accès par pont Eth1 : 10.1.0.1/24 doit appartenir au même segment (réseau interne) utilisé par les 2 serveurs web (srvweb1 et srvweb2) Eth0 :192.168.2.100/24 doit appartenir à un autre segment auquel appartiendra le client Windows Eth2 : en nat pr telecharger les paquets VM srvweb1 : Hostname : srvweb1 Eth0 : 10.1.0.21/24 (réseau interne) VM srvweb2clear Hostname : srvweb2 Eth0 :10.1.0.22/24 (réseau interne) VM Windows 192.168.2.200/24 Validation de l infrastructure Depuis la machine HAProxy : Ping 10.1.0.21 => OK Ping 10.1.0.22 => ok Ping 192.168.2.200 => ok (attention au pare-feu Windows) Installation : HAProxy n est pas dans les dépôts principaux de debian /etc/apt/sources.list On doit utiliser les dépôts backports pour l installer Il faut ajouter la ligne : Deb http://ftp.debian.org/debian/ wheezy-backports main Soit on édite le fichier : Nano /etc/apt/sources.list pour saisir manuellement la ligne Soit on redirige la ligne à l aide de la commande
Echo «Deb http://ftp.debian.org/debian/ wheezy-backports main» >> /etc/apt/sources.list Puis apt-get update && apt-get upgrade Apt-get install haproxy I) Configuration La configuration d HAProxy es assez simple et se fait dans un seul fichier de configuration, ce fichier se trouve dans : /etc/haproxy/haproxy.cfg Editer le fichier Nano /etc/haproxy/haproxy.cfg Ajouter les lignes suivantes : #configuration du balancement listen cluster_web 192.168.1.100 :80 mode http #mode de balancement Balance roundrobin #la méthode roundrobin est une répartition équitable de la charge entre les serveurs d un cluster mais cela nécessite d avoir des serveurs homogènes. La méthode source signifie qu un client sera en fonction de son adresse IP toujours redirigé vers le même serveur, cette méthode est nécessaire lorsque les sites web utilisent des sessions php. La méthode «Least connexion» renvoie vers le serveur le moins chargé. La méthode «First response» : les requêtes sont envoyées simultanément à tous les serveurs et le premier qui répond sera chargé de la connexion. Quelques options : Option httpclose Option forwardfor #les serveurs Web srvweb1 10.1.0.21 :80 check srvweb2 10.1.0.22 :80 check
#statistiques Stats enable Stats hide-version Stats refresh 30s Stats show-node Stats auth admin:admin Stats uri / stats Enregistrer le fichier et service haproxy restart RDV dans le navigateur web depuis la machine Windows avec l url : 192.168.1.100/stats on doit avoir accès après l authentification, à la page web d haproxy Validation : A l aide de l @IP uniquement 192.168.2.100 vérifier le balancement en actualisant la page web (bienvenue sur srvweb1 & 2) En cas d erreur : bind socket Service apache2 stop Service haproxy restart FIN DE LA PREMIERE PARTIE Suite : Télécharger Putty sur le client Windows, pour cela installer une deuxième interface en NAT ou en accès par pont Installer le paquet openssh-server sur les 3 serveurs : apt-get install openssh-server Lancer putty, tester la connexion à haproxy à l aide de son adresse ip (192.168.1.100) On va mettre en place l IP forwarding sur le serveur haproxy pour que les serveurs web est accès à internet en passant par haproxy et aussi quelques règles iptables pour mettre en placedu NAT (metwork address translator) afin de pouvoir accéder aux serveurs web via ssh (secure shell) On va créer un script «firewall» qu on va enregistrer dans le dossier /etc/init.d : Sur haproxy Touch /etc/init.d/firewall Nano /etc/init.d/firewall
Configuration de la translation d adresses et de port (NAT/PAT) touch /etc/init.d/firewall Nano /etc/init.d/firewall Ajouter les lignes suivantes : #! /bin/bash Start() { Echo n «application des règles iptabes : # suppression des anciennes règles iptables iptables F iptables X iptables t nat F # Activation de l ip forwarding (routage) Echo 1 > /proc/sys/net/ipv4/ip_forward #Activation de la mascarade iptables t nat A POSTROUTING o eth0 -j MASQUERADE #NAT/PAT pour SSH sur les serveurs web iptables t nat A PREROUTING p tcp d 192.168.2.100 --dport 2221 j DNAT --todestination 10.1.0.21 :22 iptables t nat A PREROUTING p tcp d 192.168.2.100 --dport 2222 j DNAT todestination 10.1.0.22 :22 echo «[terminé]» echo } Stop() { Echo n «flush des règles iptabes : # suppression des anciennes règles iptables iptables F iptables X
iptables t nat F echo «[terminé]» echo } Case $1 in Start) Start Stop) Stop Restart) Stop Start Status) #affiche le contenu d iptables /sbin/iptables L /sbin/iptables t nat L *) Echo «usage : firewall start stop restart status» Esac Exit Pour lancer un script, on tape la commande un script bash, on tape la commande :./nomduscript Attention : un script doit avoir un droit d exécution : chmod +x firewall Ls l firewall./firewall Tester./firewall start./firewall stop./firewall restart
./firewall status Rendre le fichier exécutable au démarrage du système à l aide de la commande : Update rc.d firewall defaults Lancer le script : /etc/init.d/firewall start Tester avec putty : 192.168.2.100 port :2221 -> srvweb1 192.168.2.100 port : 2222 -> srvweb2 Test : Depuis la machine Windows : CMD : ping 192.168.2.100=> ok Depuis HAPROXY -> terminal => ping 10.1.0.21 -> ok Ping 10.1.0.22 ->ok Lancer le script firewall : /etc/init.d/firewall start Depuis la machine Windows : - Ping 10.1.0.21 - Ping 10.1.0.22 Au niveau de la machine Windows
Ouvrir le centre réseau et partage pour renseigner l @ip de la passerelle par défaut entre autre 192.168.2.100 Vérifier la passerelle à l aide de la commande ipconfig/all ou route print (voir la première ligne d acheminement par défaut 0.0.0.0) Au niveau de la machine HAPROXY Route -n Route del -net 10.1.0.0 netmask 255.255.255.0 Route -n Route del -net 192.168.2.0 netmask 255.255.255.0 Route n Route add net 10.1.0.0 netmask 255.255.255.0 gw 10.1.0.1 Route n Route add net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.100 Machine srvweb21 et 22 Route n route del net 0.0.0.0 netmask 0.0.0.0 Route add net 0.0.0.0 netmask 0.0.0.0 gw 10.1.0.1