====== HA Proxy ====== ===== Principes ===== Pour assurer la continuité de service d'un serveur Web, il faut disposer d'au moins deux serveurs. Ceux-ci peuvent fonctionner en mode actif/passif avec l'outil [[ha|Heartbeat]] où un seul serveur est actif à un instant donné, et l'autre prend le relais en cas de panne du premier. Pour assurer une performance supplémentaire, on peut aussi choisir un fonctionnement en mode actif/actif avec l'outil HA Proxy. Dans cette configuration, les deux (ou plus) serveurs fonctionnent en simultané : on doit donc mettre en place un répartiteur de charge qui va renvoyer les demandes vers les différents serveurs selon différents critères : chacun son tour (round robin, en fonction de la puissance des machines, etc. ===== Mise en place ===== Pour installer HA Proxy : apt update apt install haproxy Pour vérifier la version installée : haproxy -v Juste après l'installation, le démon ne démarre pas car le fichier de configuration par défaut ne contient pas toutes les directives nécessaires. Il est nécessaire de procéder à une configuration minimale. ===== Configuration de base ===== HA Proxy fonctionne sur deux parties : * la partie au contact des utilisateurs : **Front end** * la partie au contact des serveurs Web : **Back end** La configuration complète du fichier est décrite ici [[https://cbonte.github.io/haproxy-dconv/2.6/configuration.html]]. Le fichier de configuration est **// /etc/haproxy/haproxy.cfg //**. Dans ses options de base, on trouvera : frontend bind : default_backend backend balance server : server : * bind : définit la façon dont le serveur est joignable par les utilisateurs * defautlt_backend : renvoi vers la section suivante * balance : mode de répartition entre les serveurs Web * server : décrit chaque serveur Web === Exemple === frontend proxypublic bind 10.22.30.210:80 default_backend fermeweb backend fermeweb balance roundrobin server web1 192.168.100.212:80 server web2 192.168.100.215:80 ==== Vérification de la configuration ==== haproxy -c -f /etc/haproxy/haproxy.cfg * -c pour vérifier (check) le fichier * -f pour spécifier le fichier de configuration ===== Options avancées ===== Le fonctionnement de base, sur l'algorithme roundrobin (ou tourniquet : chacun son tour) peut être optimisé de plusieurs manières **cumulables**. - en assurant un **//poids//** différent selon les capacités et la puissance des serveurs avec l'option //**weight**// - en vérifiant la disponibilité d'un serveur Web avant de lui adresser des demandes avec l'option **//check//** - en utilisant un mode de répartition moins classique que le roundrobin ==== Affectation d'un poids ==== server web1 10.22.100.212:80 weight 100 server web2 10.22.100.212:80 weight 50 Le premier serveur recevra 2 fois plus de requêtes que le second ==== Vérification de la disponibilité ==== server web1 10.22.100.212:80 check server web2 10.22.100.212:80 check Chaque serveur sera vérifié avant de lui adresser une requête. ==== Limitation du nombre d'utilisateurs instantanée ==== server web1 10.22.100.212:80 maxconn 20 server web2 10.22.100.212:80 maxconn 20 Chaque serveur sera limité à 20 utilisateurs simultanément ==== Modes de répartition ==== les modes possibles : * roundrobin : tourniquet passant circulairement vers chacune des serveurs * leastconn: le serveur sélectionné sera celui ayant précédemment reçu le moins de connexions ; * source : le serveur est sélectionné en fonction de l’IP source du client ; * uri : le choix du serveur est fonction du début de l’URI demandée ; * url_param : le choix du serveur est fonction de paramètres présents dans l’URL demandée ; * hdr : le choix du serveur est fonction d’un champ présent dans l’en-tête HTTP (Host, User-Agent, ...). ===== Sécurisation SSL ===== Le fichier de configuration est **// haproxy.cfg //**. Dans ses options on devra mettre les ports en 443 et ajouter mode tcp : frontend mode tcp bind :443 default_backend backend balance mode tcp server :443 server :443 === Exemple === frontend proxypublic mode tcp bind 10.22.30.210:443 default_backend fermeweb backend fermeweb mode tcp balance roundrobin server web1 192.168.100.212:443 server web2 192.168.100.215:443