关键在于验证jsessionid是否携带稳定路由后缀(如.tomcata)且所有请求均被同一tomcat节点处理;需检查cookie响应、后端日志、/balancer-manager负载分布,并测试故障时nofailover行为。
直接验证 apache 集群下的会话保持是否生效,关键不是看配置有没有写对,而是观察请求中 jsessionid 的路由标识是否稳定、后端 tomcat 是否始终由同一节点响应。以下是可落地的实测方法:
检查 JSESSIONID Cookie 是否携带路由后缀
用浏览器或 curl 访问应用首页(如 /login),抓取响应头中的 Set-Cookie:
- 正常粘性会话下,应看到类似:
Set-Cookie: JSESSIONID=ABC123.tomcatA; Path=/; HttpOnly
其中 .tomcatA 就是 Apache 配置中route=tomcatA的值; - 若只看到
JSESSIONID=ABC123(无点号后缀),说明 sticky 未生效,可能是stickysession=JSESSIONID没配,或 Tomcat 未在server.xml的Engine节点里设置jvmRoute="tomcatA"。
连续发起多次请求并比对后端 IP 或日志
使用 curl 带上首次获取的 Cookie,重复请求 5–10 次:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
curl -b "JSESSIONID=ABC123.tomcatA" http://your-domain.com/status- 在每台 Tomcat 的
logs/catalina.out或自定义 access 日志中,确认所有请求都只出现在tomcatA节点的日志里; - 也可在 Tomcat 的
webapps/ROOT/index.jsp中临时加一句:,直观看到每次返回的是哪个实例的地址。
模拟单节点故障,观察会话是否中断
这是检验 sticky 行为边界的关键步骤:
- 停掉当前处理请求的 Tomcat(比如
tomcatA); - 立刻再发带原 JSESSIONID 的请求;
- 如果返回 503 或连接拒绝,且没有自动切到
tomcatB,说明nofailover=Off(默认)已生效——sticky 严格绑定,不主动漂移; - 若希望故障时仍能继续服务(牺牲会话连续性),需在 ProxyPass 中显式加
nofailover=On,但此时就不再是“会话保持”,而是“尽力转发”了。
用 /balancer-manager 页面实时观察节点状态
确保 Apache 已启用 mod_proxy_balancer 并开放管理路径:
- 访问
http://apache-ip/balancer-manager; - 查看各
BalancerMember的状态列:应有OK、DISAB或ERR; - 刷新页面,同时发起用户请求,观察“Load”和“Busy”数值是否只在某一个节点持续增长——这是 sticky 正在起作用的直观证据。









