Configurer un HA Proxy sur Cloudstack

De Ikoula Wiki
Révision datée du 20 septembre 2021 à 15:23 par Cbrochot1072d (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Jump to navigation Jump to search

fr:Configurer un HA Proxy sur Cloudstack he:הגדר פרוקסי HA-Cloudstack ro:Configuraţi un Proxy HA pe Cloudstack ru:Настроить прокси на Cloudstack pl:Konfigurowanie serwera Proxy HA w Cloudstack ja:Cloudstack で HA プロキシを構成します。 ar:تكوين وكيل هكتار في كلودستاك zh:配置一个代理医管局对 Cloudstack de:Konfigurieren Sie einen Proxy HA auf Cloudstack nl:Configureer een Proxy HA op Cloudstack it:Configurare un Proxy HA Cloudstack pt:Configurar um Proxy HA em Cloudstack es:Configurar a un Proxy HA de Cloudstack en:Configure a Proxy HA on Cloudstack

Introduction

Vous souhaitez configurer un HAProxy sur la plateforme Cloudstack. Cet article vous expliquera la démarche à suivre au travers d'un exemple de configuration.

Mise en place

Voici la procédure à suivre afin de mettre en place un HA Proxy sur une instance Debian 8 "Jessie" sous Cloudstack.
Note:Cette démarche s'applique également dans le cadre d'une prestation dédiée.

Créer la nouvelle instance HAProxy

Vous trouverez les procédures de création d'une instance Cloudstack en direct-routing sur Deploiement d'une instance en zone direct-routing et en advance-routing sur Deploiement d'une instance en zone advanced-routing

Configurer la nouvelle instance HAProxy

Notre VM est maintenant démarrée

InfoVM.png

Nous pouvons nous connecter à partir de la console intégrée ou par ssh

ConnectVM.png

Pré-requis

L'un des pré-requis essentiel est de conserver son système le plus à jour possible.

 apt-get update
 apt-get upgrade 

Afin de conserver votre système Debian à jour, assurez-vous de posséder une liste des dépôts officiels. Vous pourrez trouver une liste des dépôts disponibles chez Ikoula et les instructions d'installation à cette adresse.

Avertissement: Avant toute modification de votre système prévoyez toujours une sauvegarde de vos fichiers en cas de mauvaise manipulation.
Sur un serveur de production, pensez à effectuer ces opérations pendant les heures creuses afin de minimiser l'impact de vos actions.

Pour l'installation de notre instance de Loadbalancing sous Cloudstack nous aurons besoin du service HA Proxy.

Installation d'HA Proxy

Pour installer HA Proxy en version 1.5, exécutez la commande suivante dans votre terminal
 apt-get install haproxy 
Si vous souhaitez la dernière version de HA Proxy, la version 1.6, exécutez les commandes suivantes
# Ajout du repo
echo deb http://httpredir.debian.org/debian jessie-backports main | tee /etc/apt/sources.list.d/backports.list
apt-get install debian-keyring
# Recuperation de la cle gpg
gpg --keyring /usr/share/keyrings/debian-keyring.gpg --export bernat@debian.org |  apt-key add -
# Mise a jour des depots
apt-get update
# Installation de haproxy
apt-get install haproxy -t jessie-backports-1.6

Activation d'HA Proxy

HA Proxy est maintenant installé, nous devons à présent l'activer en remplaçant la valeur ENABLED=0 par ENABLED=1 dans les deux fichiers /etc/default/haproxy et /etc/init.d/haproxy
# activation de HA Proxy dans /etc/default/haproxy
sed -i "s/ENABLED=0/ENABLED=1/g" /etc/default/haproxy
# activation de HA Proxy dans /etc/init.d/haproxy
sed -i "s/ENABLED=0/ENABLED=1/g" /etc/init.d/haproxy

Configuration d'HA Proxy

La configuration de HA Proxy est réalisée dans le fichier /etc/haproxy/haproxy.cfg .

Voici un exemple de configuration d'HAProxy
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        user haproxy
        group haproxy
        daemon
 
defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        contimeout 5000
        clitimeout 50000
        srvtimeout 50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http
 
listen cluster_web xxx.xxx.xxx.xxx:80

        mode http

        balance roundrobin
 

        option httpclose
        option forwardfor
 

        server web1 yyy.yyy.yyy.yyy:80 check
        server web2 zzz.zzz.zzz.zzz:80 check
 

        stats enable
        stats hide-version
        stats refresh 30s
        stats show-node
        stats auth ikoula:ikoula
        stats uri  /stats

L'adresse ip xxx.xxx.xxx.xxx étant l'adresse ip de notre serveur de répartition de charge, les adresses yyy.yyy.yyy.yyy et zzz.zzz.zzz.zzz sont nos serveurs web placés derrière le loadbalancer.

listen cluster_web L'adresse et le port sur lesquels le service HA Proxy devra écouter les connexions.
mode Le mode du balancement, dans notre exemple http pour du web
balance L'algorithme utilisé pour la répartition de charge, dans notre exemple RoundRobin
Les valeurs disponibles sont: RoundRobin, Source, Least connection, First Response
server Déclaration des différents serveurs placés derrière notre loadbalancer, dans notre exemple web1 et web2.
stats Permet de configurer l'accès à la page de statistiques du loadbalancer
Dans notre exemple la page sera accessible sur xxx.xxx.xxx.xxx/stats avec ikoula/ikoula comme login et mot de passe

Démarrage d'HA Proxy

Nous pouvons à présent démarrer HA Proxy
 service haproxy start 

ou

 etc/init.d/haproxy start 
En nous rendant sur notre ip xxx.xxx.xxx.xxx/stats et en utlisant notre login et mot de passe nous arrivons sur la page d'administration de HA Proxy.

HAProxyStats.png

Nous pouvons à présent nous connecter à nos serveurs en SSH en tapant
# Serveur web1
ssh root@yyy.yyy.yyy.yyy
# Serveur web2
ssh root@zzz.zzz.zzz.zzz

Configurer les serveurs web

Si les serveurs ne possèdent pas encore de service web il faut en installer un, par exemple
 apt-get install apache2 php5 
Une fois les services web installés, ou si le serveur en possédait déjà un, web1 et web2 apparaîtront en vert dans la page stats

HAProxyStat2.png

Si vous tentez d'accéder au serveur en utilisant l'adresse xxx.xxx.xxx vous tombez sur la page de test du serveur web1 ou web2 selon la répartition effectuée

HAProxSite.png

Configurer la persistance

La persistance par Source IP

Afin de configurer la persistance par Source IP il suffit de modifier le mode de balancement dans le fichier de configuration de HA Proxy en ajoutant des options sticky.

Activer la persistance par Source IP grâce à une stick-table, voici l'exemple avec notre configuration
listen cluster_web xxx.xxx.xxx.xxx:80

        mode http

       # Modifier le mode de balancement
       balance source
       hash-type consistent

       # Ajouter une stick-table afin de garder en mémoire les IP
       stick-table type ip size 1m expire 1h
       stick on src

        option httpclose
        option forwardfor

        server web1 yyy.yyy.yyy.yyy:80 check
        server web2 zzz.zzz.zzz.zzz:80 check

        stats enable
        stats hide-version
        stats refresh 30s
        stats show-node
        stats auth utilisateur:motdepasse
        stats uri  /stats

L'exemple ci-dessus permet de mettre en place une persistance du load-balancing basée sur l'IP de l'utilisateur. Cette persistance est assurée par le biais d'une stick-table qui garde en mémoire les adresses IP ayant contactées le serveur.
Cette stick-table possède une taille de 1Mo et expire toutes les heures. Lorsqu'un utilisateur est attaché à un serveur il reste sur ce même serveur jusqu'à expiration de la table ou en cas d'erreur du serveur.

Note: Le requis mémoire pour la stick-table est relativement bas, de l'ordre de 25.000 adresses pour 1Mo. Soit 40Mo pour 1.000.000 d'adresses IP.

La persistance par Cookie

Une autre méthode pour assurer la persistance du balancement consiste à utiliser un cookie. Un cookie est un petit fichier placé sur l'ordinateur de l'utilisateur afin de pouvoir stocker les informations du serveur.

Méthode du cookie-insert

Le premier exemple est la création d'un cookie supplémentaire destiné spécifiquement à HA Proxy.

Modifier le fichier de configuration d'HA Proxy et ajouter les lignes suivantes pour notre configuration
listen cluster_web xxx.xxx.xxx.xxx:80

        mode http

        # Modifier le mode de balancement
        balance roundrobin

        # option du cookie
        cookie SRVNAME insert indirect nocache

        option httpclose
        option forwardfor

        server web1 yyy.yyy.yyy.yyy:80 cookie WeB1 check
        server web2 zzz.zzz.zzz.zzz:80 cookie WeB2 check

        stats enable
        stats hide-version
        stats refresh 30s
        stats show-node
        stats auth utilisateur:motdepasse
        stats uri  /stats

L'exemple ci-dessus permet de mettre en place la persistance de nos sessions par le biais d'un cookie dédié. Lors d'une connexion le load-balancer va rediriger le client vers l'un des deux serveurs et ajouter un cookie nommé SRVNAME ayant pour valeur WeB1 ou WeB2 suivant la répartition effectuée.
L'option indirect permet d'éviter la génération d'un cookie si un autre cookie valide est déjà présent pour le visiteur et nocache permet d'éviter la mise en cache du cookie entre le visiteur et le load-balancer.
HACookieInsert.png

Méthode cookie-prefix

Le second exemple est le pré-fixage d'un cookie déjà existant, cette méthode peut être utile si l'on souhaite la persistance uniquement sur certains cookies ou que l'on ne souhaite pas créer un cookie dédié à HA Proxy.

Modifier le fichier de configuration d'HA Proxy et ajouter les lignes suivantes pour notre configuration
listen cluster_web xxx.xxx.xxx.xxx:80

        mode http

        # Modifier le mode de balancement
        balance roundrobin

        # option du cookie
        cookie PHPSESSID prefix indirect nocache

        option httpclose
        option forwardfor

        server web1 yyy.yyy.yyy.yyy:80 cookie WeB1 check
        server web2 zzz.zzz.zzz.zzz:80 cookie WeB2 check

        stats enable
        stats hide-version
        stats refresh 30s
        stats show-node
        stats auth utilisateur:motdepasse
        stats uri  /stats

L'exemple ci-dessus permet de mettre en place la persistance de nos sessions par le biais d'un préfixage d'un cookie existant. Lors d'une connexion le load-balancer va rediriger le client vers l'un des deux serveurs et ajouter un préfixe au cookie nommé PHPSESSID ayant pour valeur WeB1 ou WeB2 suivant la répartition effectuée.
L'option indirect permet d'éviter la génération d'un cookie si un autre cookie valide est déjà présent pour le visiteur et nocache permet d'éviter la mise en cache du cookie entre le visiteur et le load-balancer.
HACookiePrefix.png

Configurer le Keep-Alive

Selon votre configuration il peut être nécessaire d'activer le keep-alive.
Le keep-alive permet au load-balancer de réutiliser la connexion existante entre le serveur et l'utilisateur, plutôt que d'initier une nouvelle connexion à chaque requêtes.

Modifier le fichier de configuration d'HA Proxy et ajouter les lignes suivantes pour notre configuration
listen cluster_web xxx.xxx.xxx.xxx:80

        mode http

        balance roundrobin

        # Modifier la directive de fermeture
        option http-server-close
        # Ajouter un delai de 3000 secondes avant fermeture
        timeout http-keep-alive 3000

        option forwardfor

        server web1 yyy.yyy.yyy.yyy:80 check
        server web2 zzz.zzz.zzz.zzz:80 check

        stats enable
        stats hide-version
        stats refresh 30s
        stats show-node
        stats auth utilisateur:motdepasse
        stats uri  /stats

Mettre en place la gestion SSL

Il peut être utile de mettre en place la gestion de la redirection SSL sur votre site, par exemple dans le cas d'un site disposant d'un espace sécurisé.
Afin de mettre en place la redirection HTTP -> HTTPS sur son HA Proxy une documentation est disponible: Mettre en place une redirection SSL HA Proxy


Vous n'êtes pas autorisé à publier de commentaire.