GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Équilibrage de la charge du serveur Web avec HAProxy sur Ubuntu 14.04

Qu'est-ce que HAProxy ?

HAProxy (High Availability Proxy) est un équilibreur de charge open source qui peut équilibrer la charge de n'importe quel service TCP. HAProxy est une solution gratuite, très rapide et fiable qui offre un équilibrage de charge, une haute disponibilité et un proxy pour les applications basées sur TCP et HTTP. Il est particulièrement bien adapté aux sites Web à très fort trafic et alimente bon nombre des sites les plus visités au monde.

Depuis son existence, il est devenu de facto l'équilibreur de charge open source standard. Bien qu'il ne se fasse pas de publicité, il est largement utilisé. Vous trouverez ci-dessous un schéma de base de l'apparence de la configuration :

Installer HAProxy

J'utilise Ubuntu 14.04 et je l'installe en :

apt-get install haproxy

Vous pouvez vérifier la version en :

haproxy -v


Nous devons permettre à HAProxy d'être démarré par le script d'initialisation /etc/default/haproxy. Définissez l'option ENABLED sur 1 comme :

ENABLED=1

Pour vérifier si cette modification est effectuée correctement, exécutez le script d'initialisation de HAProxy sans aucun paramètre. Vous devriez voir ce qui suit :

$ service haproxy <press_tab_key>
reload   restart  start    status   stop

HAProxy est maintenant installé. Créons maintenant une configuration dans laquelle nous avons 2 (deux) instances de serveur Web Apache et 1 (une) instance HAProxy. Vous trouverez ci-dessous les informations de configuration :

Nous utiliserons trois systèmes, générés virtuellement via VirtualBox :

Instance 1 - Équilibreur de charge

Nom d'hôte :haproxy
Système d'exploitation :Ubuntu
IP privée :192.168.205.15

Instance 2 - Serveur Web 1

Nom d'hôte :webser01
SE :Ubuntu avec LAMP
IP privée :192.168.205.16

Instance 2 - Web Server 2

Nom d'hôte :webserver02
OS :Ubuntu avec LAMP
IP privée :192.168.205.17

Voici le schéma de la configuration :

Configurons maintenant HAProxy.

Configurer HAProxy

Sauvegardez le fichier d'origine en le renommant :

mv /etc/haproxy/haproxy.cfg{,.original}

Nous allons créer notre propre fichier haproxy.cfg. À l'aide de votre éditeur de texte préféré, créez le fichier /etc/haproxy/haproxy.cfg en tant que :

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

Explication :

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

La directive log mentionne un serveur syslog auquel les messages de log seront envoyés.
La directive maxconn spécifie le nombre de connexions simultanées sur le front-end. La valeur par défaut est 2000 et doit être ajustée en fonction de la configuration de votre système.
Les directives utilisateur et groupe modifient le processus HAProxy pour l'utilisateur/groupe spécifié. Ceux-ci ne doivent pas être modifiés.

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

La section ci-dessus contient les valeurs par défaut. L'option redispatch permet la redistribution de session en cas d'échec de connexion. Ainsi, la permanence de la session est annulée si une instance de serveur Web tombe en panne.
La directive retries définit le nombre de tentatives à effectuer sur une instance de serveur Web après un échec de connexion.
Les valeurs à modifier sont les différentes directives de timeout. L'option contimeout spécifie le temps d'attente maximal pour qu'une tentative de connexion à une instance de serveur Web aboutisse.
Les paramètres clitimeout et srvtimeout s'appliquent lorsque le client ou le serveur doit accuser réception ou envoyer des données pendant le processus TCP. HAProxy recommande de définir les délais d'expiration du client et du serveur sur la même valeur.


listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check

Le bloc ci-dessus contient la configuration pour le frontend et le backend. Nous configurons HAProxy pour écouter sur le port 80 pour webfarm qui est juste un nom pour identifier une application.
Les directives stats activent la page des statistiques de connexion. Cette page peut être consultée avec l'URL mentionnée dans l'uri des statistiques. Dans ce cas, il s'agit de http://192.168.205.15/haproxy?stats une démo de cette page peut être consultée ici.
La directive balance spécifie l'équilibrage de charge algorithme à utiliser. Les options d'algorithme disponibles sont :

  • Round Robin (roundrobin),
  • Tourniquet statique (static-rr),
  • Moins de connexions (leastconn),
  • Source (source),
  • URI (uri) et
  • Paramètre d'URL (url_param).

Des informations sur chaque algorithme peuvent être obtenues à partir de la documentation officielle.

La directive server déclare un serveur backend, la syntaxe est :

server <server_name> <server_address>[:port] [param*]
    

Le nom que nous mentionnons ici apparaîtra dans les journaux et les alertes. Il existe d'autres paramètres pris en charge par cette directive et nous utiliserons le paramètre de vérification dans cet article. L'option de vérification active les vérifications de l'état de l'instance du serveur Web. Dans le cas contraire, l'instance du serveur Web est « toujours considérée comme disponible ».

Une fois la configuration terminée, démarrez le service HAProxy :

sudo service haproxy start

Tester l'équilibrage de charge et le basculement

Nous ajouterons le nom du serveur dans le fichier index.html par défaut situé par défaut à /var/www/index.html

Sur l'instance 2 - Web Server 1 (webserver01 avec IP-192.168.205.16), ajoutez la ligne ci-dessous comme :

sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"

Sur l'instance 3 - Web Server 2 (webserver02 avec IP-192.168.205.17), ajoutez la ligne ci-dessous comme :

sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"

Ouvrez maintenant le navigateur Web sur la machine locale et parcourez l'adresse IP haproxy, c'est-à-dire http://192.168.205.15

Chaque fois que vous actualisez l'onglet, vous verrez que la charge est distribuée à chaque serveur Web. Ci-dessous, une capture d'écran de mon navigateur :

Pour la première fois lorsque je visite http://192.168.205.15 , j'obtiens :

Et pour la deuxième fois, c'est-à-dire lorsque je rafraichis la page, j'obtiens :

Vous pouvez également consulter les statistiques d'haproxy en visitant http://192.168.205.15/haproxy?stats

Vous pouvez faire plus pour cette configuration. Voici quelques idées :

  • mettez un ou les deux serveurs Web hors ligne pour tester ce qui se passe lorsque vous accédez à HAProxy
  • configurer HAProxy pour servir une page de maintenance personnalisée
  • configurer l'interface Web afin de pouvoir surveiller visuellement les statistiques HAProxy
  • modifier le planificateur à autre chose qu'à tour de rôle
  • configurer la hiérarchisation/les pondérations pour des serveurs particuliers

C'est tout !


Ubuntu
  1. Configuration initiale du serveur avec Ubuntu 14.04

  2. Comment configurer HAProxy sur le serveur Debian 9 / Ubuntu 16.04

  3. Comment installer Cherokee Web Server avec PHP5 et MySQL sur Ubuntu 11.04

  4. Installer le serveur Web Apache sur Ubuntu 12.10

  5. Configurer le serveur Web Ubuntu ?

Comment installer le serveur Web Apache sur Ubuntu 18.04

Comment installer Jetty Web Server sur Ubuntu 14.04

Comment installer le serveur Web Cherokee sur Ubuntu 14.04

Comment installer le serveur Web Hiawatha sur Ubuntu 14.04

Comment installer le serveur Web Hiawatha sur Ubuntu 16.04

Serveur Web sur Ubuntu 16.04 ??