2013-12-16 18 views
29

Sono nuovo di HAProxy e ho una domanda sulla configurazione HAProxy che mi aiuta a prendere una decisione chiave nell'approccio corretto. Questo mi aiuterà enormemente a decidere l'architettura.HAProxy - Routing basato su URL con bilanciamento del carico

Ho 3 app. Diciamo app1, app2, app3.

Ogni applicazione si differenzia per gli URL come segue:

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

sto progettando di avere 2 istanze di ogni app in 2 diverse regioni:

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

vedo 2 metodi per configurare questo ma non sono sicuro quale sia la migliore pratica qui:

  • Metodo 1: HAProxy1 deve prima distinguere le richieste utilizzando i modelli di URL. Le richieste da HAProxy1 verranno indirizzate a un altro server HAProxy configurando singole app (3 server HAProxy in questo caso) per il bilanciamento del carico.

  • Metodo 2: Avere un unico grande server di HAProxy che fa la sia come indicato nel metodo 1. Cioè, avere la configurazione di segregare le richieste a seconda del URL e quindi far passare ogni richiesta attraverso il filtro individuo come impostato le cose per ogni app per il bilanciamento del carico.

Non sono sicuro che il metodo 2 sia supportato in haproxy. Qualsiasi idea o suggerimento è molto apprezzata. Per favore, metti un po 'di luce

risposta

46

È possibile separare le richieste in base all'URL e al bilanciamento del carico con un singolo server HAProxy. La configurazione avrà qualcosa di simile:

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 

Maggiori informazioni possono essere trovate sul homepage.

+7

Non dimenticare di bilanciare anche i bilanciatori di carico. Se il proxy fallisce, le tue app non saranno disponibili. Controllare keepalived, può fare questo lavoro per voi con una configurazione abbastanza semplice –

+0

Ho una situazione tipica, molti account si collegano al mio servizio di bilanciamento del carico. Come posso limitare il numero totale di richieste mensili e giornaliere che provengono da un particolare account. Se ho impostato 200 come soglia giornaliera per un account, dire banca ABC, voglio eliminare tutte le richieste oltre tale 200, idealmente dovrei anche inviare un messaggio "quota sopra" al richiedente. Dovrei farlo al load balancer o questo dovrebbe essere preso in considerazione all'istanza dell'applicazione? –

+1

Sembra che i backend differiscano in base al primo componente del percorso, "path_beg" potrebbe essere un test migliore di "path_end" in questo caso –

Problemi correlati