2013-12-16 6 views
29

Ich bin neu bei HAProxy und habe eine Frage zur HAProxy-Konfiguration, die mir hilft, die richtige Entscheidung zu treffen. Dies wird mir sehr dabei helfen, die Architektur zu bestimmen.HAProxy - URL-basiertes Routing mit Lastenausgleich

Ich habe 3 Apps. Sagen wir app1, app2, app3.

Jede App durch die Urls wie folgt unterschieden:

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

Ich sehe zwei Methoden, um dies zu konfigurieren:

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

I 2 Instanzen jeder App in zwei verschiedenen Regionen zu haben, bin der Planung aber ich bin nicht sicher, welches ist die beste Praxis hier:

  • Methode 1: Lassen Sie HAProxy1 zuerst die Anfragen anhand der URL-Muster unterscheiden. Anforderungen von HAProxy1 werden an einen anderen HAProxy-Server weitergeleitet, um einzelne Anwendungen (in diesem Fall 3 HAProxy-Server) für den Lastausgleich einzurichten.

  • Methode 2: Habe einen großen HAProxy Server, der die beiden tut wie in Methode 1 angegeben Das heißt, haben Konfiguration die Anforderungen je nach der URL zu trennen und dann jede Anfrage durch den einzelnen Filter wie Dinge passieren einrichten für jede App zum Lastenausgleich.

Ich bin mir nicht sicher, ob Methode 2 in Haproxy unterstützt wird. Irgendwelche Ideen oder Vorschläge werden sehr geschätzt. Bitte mach etwas Licht.

Antwort

46

Sie können Anfragen basierend auf URL und Lastverteilung mit einem einzelnen HAProxy-Server trennen. Ihre Konfiguration wird so etwas wie dieses:

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 

Weitere Informationen finden Sie auf der homepage finden.

+7

Vergessen Sie nicht, auch Ihre Loadbalancer auszubalancieren. Wenn der Proxy fehlschlägt, sind Ihre Apps nicht verfügbar. Überprüfen Sie keepalived, kann diesen Job für Sie mit ganz einfach konfigurieren –

+0

Ich habe eine typische Situation, viele Konten mit meinem Load Balancer verbinden. Wie kann ich die Gesamtzahl der monatlichen und täglichen Anfragen beschränken, die von einem bestimmten Konto landen.Wenn ich 200 als täglichen Schwellenwert für ein Konto festgelegt habe, sage ABC Bank, ich möchte alle Anfragen über 200 hinaus fallen lassen, idealerweise sollte ich auch senden eine Nachricht "Kontingent über" an den Anfragenden. Sollte ich dies am Lastenausgleich tun oder sollte dies bei der Anwendungsinstanz beachtet werden? –

+1

Es sieht so aus, als ob die Backends basierend auf der ersten Pfadkomponente unterschiedlich sind, 'path_beg' könnte in diesem Fall ein besserer Test als' path_end' sein –