web-dev-qa-db-fra.com

HAProxy - Routage basé sur URL avec équilibrage de charge

Je suis nouveau sur HAProxy et j'ai une question sur la configuration de HAProxy qui m'aide à prendre une décision clé en adoptant la bonne approche. Cela m'aidera grandement à décider de l'architecture.

J'ai 3 applications. Disons app1, app2, app3.

Chaque application est différenciée par les URL comme suit:

www.example.com/app1/123 -> app1
www.example.com/app2/123 -> app2
www.example.com/app3/123 -> app3

Je prévois d'avoir 2 instances de chaque application dans 2 régions différentes:

Region 1 - app1, app2, app3
Region 2 - app1, app2, app3

Je vois 2 méthodes pour configurer cela, mais je ne sais pas quelle est la meilleure pratique ici:

  • Méthode 1: Demandez à HAProxy1 de différencier d'abord les requêtes en utilisant les modèles d'URL. Les demandes de HAProxy1 seront acheminées vers un autre serveur HAProxy configuré des applications individuelles (3 serveurs HAProxy dans ce cas) pour l'équilibrage de charge.

  • Méthode 2: Avoir un excellent serveur HAProxy qui fait les deux comme indiqué dans la méthode 1. C'est-à-dire, avoir une configuration pour séparer les demandes en fonction de l'URL, puis passer chaque demande à travers un filtre individuel comme des choses configurées pour chaque application pour l'équilibrage de charge.

Je ne sais pas si la méthode 2 est prise en charge dans haproxy. Toutes les idées ou suggestions sont grandement appréciées. Veuillez mettre un peu de lumière.

35
rohit369

Vous pouvez séparer les demandes en fonction de l'URL et de l'équilibre de charge avec un seul serveur HAProxy. Votre configuration aura quelque chose comme ceci:

frontend http
acl app1 path_end -i /app1/123 #matches path ending with "/app/123"
acl app2 path_end -i /app2/123 
acl app3 path_end -i /app3/123 


use_backend srvs_app1    if app1
use_backend srvs_app2    if app2
use_backend srvs_app3    if app3

backend srvs_app1 #backend that lists your servers. Use a balancing algorithm as per your need.
   balance roundrobin 
   server Host1 REGION1_Host_FOR_APP1:PORT 
   server Host2 REGION2_Host_FOR_APP1:PORT

backend srvs_app2
   balance roundrobin
   server Host1 REGION1_Host_FOR_APP2:PORT 
   server Host2 REGION2_Host_FOR_APP2:PORT

backend srvs_app3
   balance roundrobin
   server Host1 REGION1_Host_FOR_APP3:PORT 
   server Host2 REGION2_Host_FOR_APP3:PORT

Plus d'informations peuvent être trouvées sur le page d'accueil .

55
Gooner