为什么更改后HAproxy不维护cookie会话持久性?



tl;dr我修改了配置,将所有的权重转移到新服务器(alice)上,希望cookie持久化能够在现有服务器(bob)上维护会话,但事实并非如此。修改后的所有请求都转到bob。

我的稳定后端配置是

backend tl2010
server srv_tl2010a ${alice}:8040 check weight 100
server srv_tl2010b ${bob}:8040 check weight 000
balance source
cookie JSESSIONID prefix nocache
http-response set-header X-Server %s

如果我想对alice执行维护,我将权重更改为alice=0, bob=100并重新加载(SIGUSR2)。我所期望的是新的会话将在bob上开始,但是JSESSIONID cookie将把现有会话粘到alice上。但是,重载之后,所有的请求都立即转到bob.

我的配置是否错误?我是否误解了会话持久性的工作原理?重新加载的行为是否以某种方式清除内部cookie关联表?

解决方案

有两个问题。

  1. 除了cookie命令之外,还需要在每个服务器上设置cookie值,因此,server srv_tl2010a ${alice}:8040 check cookie a weight 100
  2. 我的应用服务器(Tomcat jsf)在注销时不删除客户端JSESSIONID cookie。它只是在服务器上使其无效,并重定向到设置新cookie的登录页面。Haproxy没有注意到cookie已经改变,因此继续持久会话。

最新更新