为 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/

如果仍然不起作用,请尝试通过添加以下代码将会话 &lt;id&gt; 直接指定到 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 负载平衡启用粘性会话模式的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡器的粘性会话

Kubernetes 集群上的粘性会话

跨 TCP 443 连接的 Amazon ELB 会话粘性?

如果我们将 App Engine 配置为自动缩放,它会自动进行负载平衡吗?

apache + tomcat 负载均衡分布式集群配置

apache+tomcat 负载均衡