2016-11-30 1 views
1

Ich bin sehr neu zu HAProxy. Ich habe ein paar Stunden damit verbracht, herauszufinden, wie es geht, konnte aber keine Hinweise bekommen. Meine Anforderung ist dies:Konfigurieren von HAProxy zum Routen von Verkehr basierend auf url_param

Wenn Endpunkt der Anfrage ist/spezielle dann muss ich URL_PARAM überprüfen.

Zum Beispiel: localhost/special id = 10

basierend auf ID, muß ich es den Weg zu einem der drei Server. If id <=3 server1, if id > 3 and id <=6 server2 else server3.

Wenn Endpunkt ist nicht/spezielle Round-Robin zwischen allen 3 Servern.

Wie erreiche ich dieses 2-Level-Balancing?

Antwort

2

Sie können urlp und urlp_val verwenden, um die ID zu extrahieren. Verwenden Sie dann acl match the integer:

acl is_special  path_beg /special 
acl small_id   urlp_val(id) le 3 
acl medium_id  urlp_val(id) 4:6 
acl high_id   urlp_val(id) gt 6 

use_backend bck1  if is_special small_id 
use_backend bck2  if is_special medium_id 
use_backend bck3  if is_special high_id 
default_backend  bck_all 

Dann erstellen 3-Backends: eine für jeden Fall.

Edit:

Wenn Sie regex auf der Abfrage param verwenden möchten, verwenden Sie urlp_reg:

acl small_id  urlp_reg(id) ^[0-3] 
acl medium_id  urlp_reg(id) ^[4-6] 
acl high_id  urlp_reg(id) ^[7-9] 

Auch stick überprüfen, je nachdem, was Sie zu tun versuchen.

+0

Vielen Dank! Aber was ist, wenn die Integer-ID wirklich groß ist? Wenn es nur als Zeichenfolge betrachtet werden kann. Entschuldigung dafür, dass es im Beispiel nicht klar ist. Kann ich eine Art Regex Range Match verwenden? – Maxsteel

+0

Entschuldigung, ich habe gerade aus meiner Datenprobe erkannt, dass die IDs von grundsätzlich UIDs sind. – Maxsteel

+0

'urlp_reg' wird funktionieren (siehe meine Bearbeitung). –

Verwandte Themen