我真的不知道…
我有一个Java Web应用程序,它将会话ID存储在URL中,而不是使用Cookie。 我想在两个tomcat服务器上运行应用程序,并使用Apache服务器将它们作为负载均衡的前端。
__ tomcat1 Apache ----/ \__ tomcat2
通过在Tomcat server.xml文件中将jvmRoute设置为tomcat1 ,url将变成http://url;jsessionid=id.tomcat1 。 所以可以通过查看URL来实现会话粘性,并将其路由到相应的服务器。
我知道mod_proxy和mod_jk ,并进行负载平衡,但他们的粘性会话只有在会话ID存储在cookie中时才起作用。 就我而言,会话ID是在URL中编码的。 我怎样才能做负载平衡?
也许你的configuration是错误的。 没有指定文档粘滞会话只处理cookie。
stickysession – 平衡器粘滞会话名称。 该值通常设置为类似于JSESSIONID或PHPSESSIONID的值,并且取决于支持会话的后端应用程序服务器。 如果后端应用程序服务器为cookie和url编码的id使用不同的名称(如servlet容器),请使用| 去分开他们。 第一部分是cookie的第二个path。
所以你可以像下面那样指定sessionid。
ProxyPass / balancer://mycluster/ stickysession=|jsessionid
希望这可以帮助。
为了创build粘性,我们需要在你的configuration中添加以下行(mod_proxy)
Header add Set-Cookie "BALANCEID=hej.%{BALANCER_WORKER_ROUTE}e; path=/;" env=BALANCER_ROUTE_CHANGED
然后在configuration中指定路由名称
<Proxy balancer://mycluster> BalancerMember http://tomcat sever1.ip:8080 route=AcZxv BalancerMember http://tomcat server2.ip:8080 route=AcXxv lbmethod=byrequests stickysession=BALANCEID </Proxy>
并将这些路由名添加到tomcat服务器的catalina.properties中的tcserver.node
tcserver.node=AcZxv (tomcat 1st server) tcserver.node=AcXxv (tomcat 2nd server)