03
Dans cet article nous allons voir comment apporter très facilement une solution de haute disponibilité à une application avec HAProxy.
Haute disponibilité (cf. wikipedia)
La haute disponibilité est un terme souvent utilisé en informatique, à propos d’architecture de système ou d’un service pour désigner le fait que cette architecture ou ce service a un taux de disponibilité convenable.
La disponibilité est aujourd’hui un enjeu important des infrastructures informatiques. On estime aujourd’hui que la non-disponibilité d’un service informatique peut avoir des coûts se chiffrant en millions, particulièrement dans le domaine de l’industrie où l’arrêt d’une chaîne de production peut avoir un effet dévastateur.
HAProxy (cf.wikipedia)
HAProxy est un logiciel libre de répartition de charge écrit par Willy Tarreau. Il est disponible sous Unix (on trouve très facilement des binaires précompilés pour LinuxSolaris). et
HAProxy peut aider à mettre en place des solutions de hautes disponibilités, de répartition de charge et de proxy pour tous les types de protocole (TCP ou HTTP). Il est particulièrement bien adapté pour la gestion des très fortes charges sur un site Web tout en gérant la notion de persistance ou la manipulation des données de la couche 7 du Modèle OSI.
Pour l’exemple, nous allons developper le classique HelloWorld, un WS-* dont le rôle va être de saluer l’internaute qui aura indiqué son nom en paramètre.
Voici la PI:
MyService
|
Endpoint address: http://localhost:8080/backend/MyService WSDL : {http://backend.opensides.fr/}MyServiceImplService Target namespace: http://backend.opensides.fr/ |
-> ajoutons une petite spécificité au service de façon à ce qu’il renvoie le port de l’instance qui va traiter la demande de façon à déterminer facilement quel serveur aura traité la requête lorsque nous ferons un déploiement sur plusieurs instances.
ex: « (8080) – Hello John »
Voila le service est maintenant opérationnel. A ce stade, il fonctionne mais si le serveur tombe le service ne fonctionne plus. C’est là que HAProxy va intervenir. Nous allons deployer ce service sur plusieurs serveur et le rôle de HAProxy va être de jouer un peu le chef d’orchestre en:
- assurant une distribution des requêtes sur les différents serveurs (LOADBALANCING)
- Évincer une instance DOWN en transférant la charge sur les serveurs UP (FAILOVER)
Installation sur Mac
sudo port install haproxy
Installation sur Ubuntu
sudo apt-get install haproxy
Récupérer un exemple de fichier de configuration basic
wget http://layer1.rack911.com/haproxy/haproxy-standard.cfg haproxy.cfg
Editer le fichier de config:
global maxconn    4096 # Total Max Connections. This is dependent on ulimit daemon nbproc     4 # Number of processing cores. Dual Dual-core Opteron is 4 cores for example. defaults mode       http clitimeout 60000 srvtimeout 30000 contimeout 4000 option     httpclose # Disable Keepalivelisten http_proxy 127.0.0.1:9999 balance roundrobin # Load Balancing algorithm option httpchk option forwardfor # This sets X-Forwarded-For## Define your servers to balance server server1 127.0.0.1:8080 weight 1 maxconn 512 check server server2 127.0.0.1:8181 weight 1 maxconn 512 check
Démarrer HaProxy
haproxy -f haproxy.cfg
Maintenant HAProxy est démarré. Il écoute les requetes sur le port 9999 et les redirige sur les 2 instances Tomcat 8080 et 81818.
Il suffit maintenant de lancer des requêtes sur les le port 9999 et observons que HAProxy redispacth bien les requêtes sur les 2 instances:
(8080) - Hello John (#287)
1 oct. 2010 10:28:33 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://pi.opensides.fr/}MyServiceService from class fr.opensides.pi.MyService
(8080) - Hello John (#288)
1 oct. 2010 10:28:33 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://pi.opensides.fr/}MyServiceService from class fr.opensides.pi.MyService
(8181) - Hello John (#252)
1 oct. 2010 10:28:33 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://pi.opensides.fr/}MyServiceService from class fr.opensides.pi.MyService
1 oct. 2010 10:28:33 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://pi.opensides.fr/}MyServiceService from class fr.opensides.pi.MyService
(8181) - Hello John (#253)
(8181) - Hello John (#254)
1 oct. 2010 10:28:33 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://pi.opensides.fr/}MyServiceService from class fr.opensides.pi.MyService
(8080) - Hello John (#289)
1 oct. 2010 10:28:33 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://pi.opensides.fr/}MyServiceService from class fr.opensides.pi.MyService
(8181) - Hello John (#255)
Nous pouvons observer les stats de l’interface d’amin HAProxy:
Nous avons vu comment installer et configurer HAProxy pour assurer Loadbalacong et failover sur un WS-*. Nous pouvons observer la puissance et la simplicité de l’outil.
Pour plus d’informations rendez-vous sur le site de l’éditeur http://haproxy.1wt.eu/