为 Apache/Tomcat 负载平衡启用粘性会话模式
Posted
技术标签:
【中文标题】为 Apache/Tomcat 负载平衡启用粘性会话模式【英文标题】:Enabling sticky session mode for Apache/Tomcat load balancing 【发布时间】:2016-02-17 08:18:18 【问题描述】:我正在尝试在 Apache 中启用粘性会话,但它不起作用。以下是我所做的更改。我错过了什么吗?
我在访问日志中没有看到任何错误,但是来自一个用户的请求仍会发送到另一台服务器。
第一步:在server1 & server2的负载均衡器的httpd.conf下面添加
<Proxy balancer://marsBalancer>
BalancerMember http://server1fullname:8080 route=server1
BalancerMember http://server2fullname:8080 route=server2
ProxySet lbmethod=bytraffic
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass /marsWAR/ balancer://marsBalancer/marsWAR/
第 2 步:在 server.xml 中更新如下
a) server1 中的 server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">
b) server2 中的 server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">
【问题讨论】:
【参考方案1】:尝试从 ProxyPass 指令中删除 marsWAR
部分:
ProxyPass /marsWAR/ balancer://marsBalancer/
如果仍然不起作用,请尝试通过添加以下代码将会话 <id>
直接指定到 ProxyPass 指令:
ProxyPass /marsWAR/ balancer://marsBalancer/ stickysession=JSESSIONID
【讨论】:
我不知道有两个人回复了,但操作仍然没有标记任何答案。他们显示奖励 +100 或 +50,但大多时间到期,他们有很多答案但没有标记 您好 Ghayal,我将在星期一 IST 检查此选项,如果它正常工作,我将标记为已回答。这个问题发生在我们的开发服务器中,对于开发服务器中的任何部署/更改,我必须通过。变更请求流程需要 1 天的前置时间以及变更管理团队的批准。 我想,这应该可行。如果不工作,会将其标记为未答复。【参考方案2】:-
所有版本号 = ?
它必须是
stickysession=JSESSIONID|jsessionid
,因为 Cookie 名称是大写的,但路径参数名称是小写的。支持路径参数还需要scolonpathdelim=On
[1] 另请参阅该文档页面上的“解决负载均衡器粘性问题”。
[1]http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html#stickyness_implementation
【讨论】:
以上是关于为 Apache/Tomcat 负载平衡启用粘性会话模式的主要内容,如果未能解决你的问题,请参考以下文章
跨 TCP 443 连接的 Amazon ELB 会话粘性?