使用URL参数与HAProxy进行负载平衡

我有一个通过cookie进行负载均衡的系统,但我想使用一个URL参数作为替代。 (具体来说,我有一个不支持cookie的前端应用程序)。 我的设置有点复杂 – 我有一个多人游戏系统,我用这个cookie来保证不同的人玩同一个游戏去同一个服务器。 这很好,除了URL参数似乎没有做任何事情。 这一切都与haproxy 1.5dev17

我的相关后端是:

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 

请注意,SIMULATE_STICKY_SESSION是由我的应用程序(基于玩家团队)生成的。

当我调用URL时,我需要传递一个jsessionid(这样Tomcat才能find正确的会话)。 所以我在做

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

这似乎没有拿起粘滞的会话参数为50%的时间去错误的服务器。 我尝试使用param作为查询string(之后?标记),但也没有工作。 我究竟做错了什么?

haproxy邮件列表中提供了一个响应

摘抄

只需在您的configuration中更新下面的行即可:

  stick on url_param(SIMULATE_STICKY_SESSION,;) table simulate 

默认情况下,url_param在问号(?)之后search参数。 上面的configuration通过从分号(;)查找cookie来覆盖此configuration。

注意:您必须运行最近的1.5dev haproxy,最好是dev 18。