我在使用 HAproxy 的粘性会话时遇到了一些问题。
Haproxy 将每个请求都算作一个新会话。我有一个 Java servlet,它创建了 cookie JSESSIONID。
如果我刷新该页面 5 次。servlet 将其计为 1 个会话和来自该 sessionid 的 5 个请求。但 HAproxy 统计页面将其显示为 5 个不同的会话。并且当前会话为 0 个。Haproxy 为 cookie 添加了正确的前缀,cookie:“JSESSIONID=test1~3fjp6734ys78grhk50ler16r”,并且是持久的。我每次都访问同一个服务器。
这是我的配置文件:
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:3333
acl Testrule path -m beg /test
use_backend Test if Testrule
backend Test
option httpchk GET /test
cookie JSESSIONID prefix
appsession JSESSIONID len 52 timeout 20m prefix
server test2 vm-stapp-146:9003 check cookie test2
server test1 vm-stapp-145:9003 check cookie test1
listen stats *:3334
mode http
stats enable
stats uri /proxy-stats
stats admin if TRUE
为什么统计页面将每个请求都显示为一个新会话?并且它始终显示 0 个当前会话。
谢谢。
答案1
HAProxy 会话计数指的是 tcpip 会话,而不是浏览器会话。计数为 0 是因为在您请求统计信息时,没有任何正在进行的会话。这对于非繁忙的负载均衡器来说很典型。
如果来自同一会话的请求到达同一后端服务器,则听起来粘性会话正在起作用。
答案2
stats
测试会话持久性时要查找的列是lbtot
,每当客户端发出没有可识别会话 cookie 的请求时,该列就会增加。