Apache 2.2 负载平衡 Tomcat 7 问题

Apache 2.2 负载平衡 Tomcat 7 问题

这是我的问题:我有 3 个 Tomcat 7.0.x 服务器和 2 个 Apache 2.2.x HTTPd 服务器,请参见图片。(所有服务器都运行 Linux Redhat 6.2。)

在此处输入图片描述

因此,我在 Tomcat 1/2 之间设置了负载平衡,并在 Tomcat 3 上安置了一些小型微服务,但没有进行负载平衡。在 Apache 上,我使用带有粘性会话的循环机制,并使用 mod_proxy_ajp 来处理 Tomcat 节点。

<Virtual *:80>
   Header Add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

   <Proxy balancer://t-ha-cluster>
     ProxySet lbmethod=byrequest
     BalancerMember ajp://tomcat1:8109 route=jvm-tc-1 connectiontimeout=400ms retry=60 ping=5
     BalancerMember ajp://tomcat2:8109 route=jvm-tc-2 connectiontimeout=400ms retry=60 ping=5
     ProxySet stickysession=ROUTEID
   </Proxy>

   <Proxy balancer://t-micro-cluster>
     ProxySet lbmethod=byrequest
     BalancerMember ajp://tomcat3:8109 route=jvm-tc-3 connectiontimeout=400ms retry=60 ping=5
     ProxySet stickysession=ROUTEID
   </Proxy>

   <Location /app1>
     ProxyPass balancer://t-ha-cluster/myapp stickysession=ROUTEID
     ProxyPassReverse stickysession=ROUTEID
   </Location>

   <Location /app2>
     ProxyPass balancer://t-ha-cluster/myapp stickysession=ROUTEID
     ProxyPassReverse stickysession=ROUTEID
   </Location>

   <Location /search>
     ProxyPass balancer://t-micro-cluster/myapp stickysession=ROUTEID
     ProxyPassReverse stickysession=ROUTEID
   </Location>

</Virtual>

现在,当我转到 /app1 时,会创建一个 ROUTEID=.jvm-tc-2,并在 Tomcat 2 服务器上创建会话。在页面加载时,它会从 Tomcat 3 上的 /search 获取小型搜索小部件,这会更改我的 ROUTEID=.jvm-tc-3。然后下一个请求从 /app 获取资源,我得到 ROUTEID=.jvm-tc-1。因此,现在在 Tomcat 1 节点上创建了一个新会话。 有没有更好的方法来编写我的 Apache 配置,以便用户始终使用 Tomcat 2?当我们扩展应用程序堆栈时,有没有办法让它可重用于其他应用程序?

我宁愿不保留每个 /appx 上下文的 ROUTEID,因为这将成为维护的噩梦。

相关内容