Wie Tausende von backends in haproxy? Ist die neue map-Funktion nützlich für diese?
Will ich mit haproxy als proxy und load-balancer für Tausende von backends. So ein Antrag muss per Proxyfunktion an den richtigen backend je nach hostname und dann ein Lastenausgleich innerhalb des backend. Ich bin mit haproxy-1.5dev21.
Die config-Datei sieht wie folgt aus :
frontend public
bind :80
mode http
acl host1 hdr_reg(host) host1.com
use_backend be_host1 if host1
acl host4000 hdr_reg(host) host4000.com
use_backend be_host4000 if host4000
backend be_host[n]
server hostn_1
server hostn_2
Problem ist, dass ich eine Latenz von 30ms pro Anfrage, wenn es 5000 hosts. Und für 20k backends, haproxy dauert lange zu laden, ganz zu schweigen vom desaster Wartezeit pro Anfrage.
Kann ich etwas tun, besser als sequentielle acl-Regeln?
Ich habe nicht gefunden, ein Beispiel für die neue map-Funktion - die release-notes sagen: es kann verwendet werden für eine massive Umleitung Regeln.
Ich versuchte dies :
use_backend %[hdr(host), map(host_to_backend_map.file)]
Offensichtlich etwas dumm vor mit Landkarte, aber jede Beratung hilfreich wäre.
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Mängel beseitigt wurden aus der config-Datei nach Experten-input, und ich Liste Sie hier im Fall, jemand anders kann es ganz nützlich sein.
Verwenden hdr(Host) statt hdr_reg(). Dies verbessert erheblich die Zeit verbraucht zu bewerten, die ACLs. Noch besser, vermeiden Sie die acl, und verwenden Sie die inline-Bewertung z.B.
use_backend host1 if { req.fhdr(host,1) -m str host1.domain.com }
Verwenden nbproc>1. Im Falle der gleichzeitigen verbindungen, das hilft. Aber es macht es schwierig zu Debuggen.
Für die backends verwenden Sie die IP-Adresse direkt anstelle von "server hostn_1 dns_of_server:Portnummer'
Put 'fullconn 1000' im Abschnitt defaults. Dies erhöht die Ladezeit enorm.
Schließlich, verwenden Sie die neueste haproxy git checkout und beachten Sie die Verbesserung in der Ladezeit. Sie hat deutlich. Seine nun um Sekunden im Vergleich zu Minuten vor.
Auch, in Bezug auf die "Karte" - Funktion, einem neuen, dynamischen use_backend Schema ist in den Werken, so sollen entfernen die Notwendigkeit, zu schreiben, wie viele ACLs.
use_backend bk_%[hdr(host),map(host_to_backend_map.file)] if TRUE
Ich hatte das gleiche problem. Ich bin derzeit am Experimentieren mit Nginx + Lua mit allen backends gespeichert auf Redis.
Anfrage flow sieht aus wie unten.
Motivation für diese ist von http://openresty.org/#DynamicRoutingBasedOnRedis
Hoffe, das hilft.