Verwenden von URL-Parametern für den Lastausgleich mit HAProxy

9

Ich habe ein System, das den Lastenausgleich über ein Cookie ausführt, möchte aber alternativ einen URL-Parameter verwenden. (Insbesondere habe ich eine Front-End-App, die keine Cookies unterstützt). Mein Setup ist etwas komplex - ich habe ein Multiplayer-System und verwende einen Stick-Tisch mit diesem Cookie, um sicherzustellen, dass verschiedene Personen, die dasselbe Spiel spielen, auf denselben Server gehen. Dies funktioniert hervorragend, außer dass die URL-Parameter nichts zu tun scheinen. Dies ist alles mit Haproxy 1.5dev17

Mein relevantes Backend ist:

defaults
   log            global
   mode           http
   option         httplog
   option         dontlognull
   retries        3
   option         redispatch
   option         http-server-close

   maxconn        2000
   contimeout     5000
   clitimeout     50000
   srvtimeout     50000

backend simulate
    option httpchk OPTIONS /simulate/api/status
    stick-table type string len 40 size 5M expire 30m
    stick store-response set-cookie(SIMULATE_STICKY_SESSION) table simulate
    stick on cookie(SIMULATE_STICKY_SESSION) table simulate
    stick on url_param(SIMULATE_STICKY_SESSION) table simulate

    server app1 10.0.2.11:8080  cookie app1 check inter 10000
    server app2 10.0.3.11:8080  cookie app2 check inter 10000

Beachten Sie, dass SIMULATE_STICKY_SESSION von meiner App generiert wird (basierend auf dem Spielerteam).

Wenn ich die URL aufrufe, muss ich eine jsessionid übergeben (damit Tomcat die richtige Sitzung findet). Also mache ich

http://my.domain.com/myapp/url;SIMULATE_STICKY_SESSION=1918C909D3F30DB09C2F96B75C57D015.app1+jsessionid;jsessionid=1918C909D3F30DB09C2F96B75C57D015.app1

Dies scheint den Sticky-Session-Parameter nicht zu erfassen, da er in 50% der Fälle an den falschen Server gesendet wird. Ich habe versucht, den Parameter als Abfragezeichenfolge zu verwenden (nach einem? -Markenzeichen), aber das hat auch nicht funktioniert. Was mache ich falsch?

Will Glass
quelle

Antworten:

3

Eine Antwort wurde hier auf der Haproxy-Mailingliste bereitgestellt

Auszug

Aktualisieren Sie einfach die folgende Zeile in Ihrer Konfiguration auf:

 stick on url_param(SIMULATE_STICKY_SESSION,;) table simulate

Standardmäßig sucht url_param nach einem Parameter nach dem Fragezeichen (?). Die obige Konfiguration überschreibt dies, indem Sie im Semikolon (;) nach Ihrem Cookie suchen.

Hinweis: Sie müssen einen aktuellen 1,5-Dev-Haproxy ausführen, vorzugsweise den Dev 18.

Willy Tarreau
quelle
Wie auf der Benutzerliste vermerkt, besteht die Antwort darin, die Zeile zu ändern: auf url_param (SIMULATE_STICKY_SESSION,;) Tabelle simulieren
Will Glass