Utilisation des paramètres d'URL pour l'équilibrage de charge avec HAProxy

9

J'ai un système qui équilibre la charge via un cookie, mais je souhaite utiliser un paramètre URL comme alternative. (Plus précisément, j'ai une application frontale qui ne prend pas en charge les cookies). Ma configuration est un peu complexe - j'ai un système multijoueur et j'utilise une table de lecture avec ce cookie pour m'assurer que différentes personnes jouant au même jeu vont sur le même serveur. Cela fonctionne très bien, sauf que les paramètres d'URL ne semblent rien faire. Tout cela avec haproxy 1.5dev17

Mon backend pertinent est:

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

Notez que SIMULATE_STICKY_SESSION est généré par mon application (basé sur l'équipe de joueurs).

Lorsque j'appelle l'URL, je dois passer un jsessionid (pour que Tomcat trouve la bonne session). Donc je fais

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

Cela ne semble pas ramasser le paramètre de session collante car 50% du temps il va au mauvais serveur. J'ai essayé d'utiliser le param comme chaîne de requête (après une marque?) Mais cela n'a pas fonctionné non plus. Qu'est-ce que je fais mal?

Will Glass
la source

Réponses:

3

Une réponse a été fournie ici sur la liste de diffusion haproxy

extrait

mettez simplement à jour la ligne ci-dessous dans votre configuration pour:

 stick on url_param(SIMULATE_STICKY_SESSION,;) table simulate

Par défaut, url_param recherche un paramètre après le point d'interrogation (?). La configuration ci-dessus écrase cela en recherchant votre cookie dans le point-virgule (;).

Remarque: vous devez exécuter un haproxy 1.5dev récent, de préférence le dev 18.

Willy Tarreau
la source
Comme indiqué sur la liste des utilisateurs, la réponse est de changer la ligne pour: coller sur url_param (SIMULATE_STICKY_SESSION ,;) simuler la table
Will Glass