我有一个通过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。