Usando parâmetros de URL para balanceamento de carga com HAProxy

9

Eu tenho um sistema com balanceamento de carga por meio de um cookie, mas quero usar um parâmetro de URL como alternativa. (Especificamente, eu tenho um aplicativo front-end que não suporta cookies). Minha configuração é um pouco complexa - eu tenho um sistema multiplayer e uso uma mesa com esse cookie para garantir que pessoas diferentes jogando o mesmo jogo vão para o mesmo servidor. Isso funciona muito bem, exceto que os parâmetros de URL parecem não fazer nada. Isso é tudo com haproxy 1.5dev17

Meu back-end relevante é:

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

Observe que SIMULATE_STICKY_SESSION é gerado pelo meu aplicativo (com base na equipe do jogador).

Quando ligo para o URL, preciso passar um jsessionid (para que o Tomcat encontre a sessão correta). Então eu estou fazendo

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

Isso não parece estar captando o parâmetro de sessão persistente em 50% do tempo que ele vai para o servidor errado. Eu tentei usar o param como uma string de consulta (depois de uma marca?), Mas isso também não funcionou. O que estou fazendo errado?

Will Glass
fonte

Respostas:

3

Uma resposta foi fornecida aqui na lista de discussão haproxy

excerto

basta atualizar a linha abaixo na sua configuração para:

 stick on url_param(SIMULATE_STICKY_SESSION,;) table simulate

Por padrão, url_param procura um parâmetro após o ponto de interrogação (?). A configuração acima substitui isso procurando seu cookie a partir do ponto e vírgula (;).

Nota: você deve estar executando um haproxy recente de 1.5dev, de preferência o dev 18.

Willy Tarreau
fonte
Como observado na lista de usuários, a resposta é mudar a linha para: vara em simular url_param (SIMULATE_STICKY_SESSION ,;) mesa
Will vidro