【问题标题】:Configuration of Apache and Tomcat for load balancing配置 Apache 和 Tomcat 以实现负载平衡
【发布时间】:2013-08-23 06:12:16
【问题描述】:

我正在尝试将 Apache 设置为具有会话关联性的 2 个 Tomcat 实例的负载平衡器。

目标是让会话坚持到一个服务器,但让下一个会话(当它被后端服务器更改时)转到下一个可用的服务器(假设使用循环算法更容易实现)。当在 Tomcat 中使用“jvmRoute”和在 Apache 中使用等效的“路由”时,执行路由的实际值是不会更改的路由名称,并且所有请求始终路由到单个客户端的同一后端服务器。

到目前为止,我发现仅使用 JSESSIONID cookie 时存在鸡/蛋问题。让我们考虑以下设置:

2 Tomcat 服务器侦听端口 8009 和 8010 (AJP13) 1 个具有以下配置的 Apache 服务器

<Proxy balancer://hello-cluster>
    BalancerMember ajp://127.0.0.1:8009/hello
    BalancerMember ajp://127.0.0.1:8010/hello
</Proxy>

ProxyPass /hello balancer://hello-cluster stickysession=JSESSIONID

这是场景:

  1. 第一个请求没有 cookie,因此 Apache 选择负载平衡器中的下一个可用服务器来处理请求。
  2. 后端 Tomcat 服务器设置 JSESSIONID 但不记录返回的实际值。
  3. 下一个请求进来,Apache 注意到没有为给定的 JSESSIONID 记录后端服务器,因此它选择下一个可用的,在这种情况下,另一个作为第一个请求的服务
  4. Tomcat 注意到 JSESSIONID 的值无效,因此它创建了一个新值。
  5. Apache 没有注意到 JSESSIONID 已更改以将其固定到该后端服务器。
  6. 回到pt。 3

有没有办法让 Apache 注意到 Tomcat 返回的值?

【问题讨论】:

    标签: apache tomcat load-balancing


    【解决方案1】:

    如果您尝试使用 tomcat 会话复制,也许可以。我发现了这个有趣的帖子:

    。 你也可以尝试使用 redis:

    请告诉我你的经验。

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 2016-04-15
      • 1970-01-01
      • 2011-04-15
      • 2023-03-09
      • 2012-03-12
      • 2016-09-30
      • 2011-03-11
      • 1970-01-01
      相关资源
      最近更新 更多