【问题标题】:Weblogic Apache plugin and session stickinessWeblogic Apache 插件和会话粘性
【发布时间】:2010-12-24 16:10:38
【问题描述】:

如果在负载均衡器和 weblogic 集群之间配置了两个 Web 服务器,这两个 Apache 服务器是否会保持会话粘性?

例如,负载均衡器将第一个请求转发给第一个 apache,然后第一个 apache 转发给第一个 WL 托管实例。即使来自同一用户的第二个请求由负载均衡器转发到第二个 apache,第二个 apache 是否能够将其转发到为第一个请求提供服务的第一个 WLManaged 实例,而不是不知道的第二个 WLManaged 实例会话信息。

weblogic apache 插件的理想行为应该是什么?问题是我不想在 wl 服务器集群上启用会话复制。

【问题讨论】:

    标签: apache session weblogic


    【解决方案1】:

    根据 Apache HTTP 服务器插件的“Failover, Cookies, and HTTP Sessions”部分:

    当请求包含存储在 cookie 或 POST 数据中或编码在 URL 中的会话信息时,会话 ID 包含对最初建立会话的特定服务器实例(称为主服务器)的引用,并且对复制原始会话的附加服务器(称为辅助服务器)的引用。包含 cookie 的请求尝试连接到主服务器。如果该尝试失败,请求将被路由到辅助服务器。如果主服务器和辅助服务器都发生故障,则会话将丢失,插件会尝试与动态集群列表中的另一台服务器建立新连接。见Figure 3-1 Connection Failover

    注意:如果POST数据大于64K,插件将不会解析POST数据获取会话ID。因此,如果将会话 ID 存储在 POST 数据中,插件将无法将请求路由到正确的主服务器或辅助服务器,从而可能导致会话数据丢失。

    图 3-1 连接故障转移

    换句话说,是的,两个 Apache 服务器都能够将传入请求转发到“正确的”WebLogic 实例,因为会话 ID 包含所有所需的信息。请注意,实际上没有必要通过测试来确认这一点,但这很容易。

    更新:回答 OP 的以下评论

    我认为该文档仅适用于一个 apache 服务器。在我的情况下,我有两个,负载均衡器以 50:50 的方式将请求转发到两个服务器。我确实对此进行了测试,并且 weblogic 插件没有保持粘性。

    我了解到您正在使用两个 apache fontend,但我不确定本文档是否仅适用于使用一个 apache 服务器的配置。如前所述,会话 ID 包含主服务器(以及辅助服务器)的引用,因此两个 apache 都应该能够处理它。至少,这是我的理解。实际上,我过去曾使用过类似的配置,但不记得事情是否按我认为的那样工作,或者负载均衡器是否也配置为处理粘性(即转发到给定的 Apache 服务器)。我现在有点怀疑……

    可以发布您的插件配置(如果它们不同,则为两个 apache 服务器)?当只有一个 apache 服务器启动时,您能否确认事情是否按预期工作(如果它们的配置不同,则使用两个 apache 进行测试,但情况不应该如此)?

    【讨论】:

      【解决方案2】:

      当您有 2 个 Apache 实例,前面有一个 TCP 负载均衡器时,状态流图不再适用,因为 Apache 实例不共享它们的状态。 我猜 WebLogic 插件使用方向映射 [IPAddress+Port -> JVMID] 维护状态。如果它接收到一个它还不知道 JVMID 的 cookie(例如,它还没有向这个服务器发送过请求),它无法知道它指的是哪个 IPAdress+Port,所以它不能重用这些 JVMID,它将重新分配新的主要/次要的,这对于 2 个实例(可能已交换)是相同的,如果严格来说超过 2 个实例,则可能会有所不同。 我没有通过运行特定测试来确认它,但在纸面上它似乎并非在所有情况下都有效。

      【讨论】:

        【解决方案3】:

        上图适用于连接到同一个 WL 集群的 2 台 Apache 服务器。 cookie 会话信息包含有关要连接的 WLS 的详细信息,插件将尊重这一点。如果主(它最初连接到的服务器)WL 服务器不可用,则请求将被发送到辅助服务器(在第一次请求时根据选择“Preferred Replication Group”中定义的规则指定”)。此辅助服务器与主 WLS 服务器保持相同的会话状态,并且应该能够处理请求。

        如果未设置会话复制(我认为默认情况下这是关闭的),则不会有会话复制到另一台服务器,如果原始/主要 WL 服务器出现故障,您将丢失会话。

        【讨论】:

          【解决方案4】:

          答案是否定的。由于您有 2 个 Apache 网络服务器,因此您需要在硬件和软件负载均衡器级别实现粘性以达到您的要求。

          意味着您已经在 Apache 级别的 Weblogic 插件中实现了粘性会话,但您还需要在硬件负载均衡器级别基于源 IP 的粘性。这将允许您的硬件负载均衡器将来自同一用户的后续请求发送到同一高速网络服务器。

          【讨论】:

            【解决方案5】:

            答案是肯定的。我们在博客http://blog.c2b2.co.uk/2012/10/basic-clustering-with-weblogic-12c-and.html 上对此进行了撰写,其中提供了有关在集群中设置 Web 会话故障转移的分步说明。

            本质上,jsessionid cookie 对主要和次要 weblogic 服务器进行编码。 Mod-wl 解析 cookie 并将请求路由到主服务器。在您的情况下,托管服务器 1。如果它关闭,它将自动将请求路由到备份服务器托管服务器 2。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-05-16
              • 2011-09-16
              • 2012-05-29
              • 2019-09-24
              • 2016-07-25
              • 1970-01-01
              • 2012-03-12
              相关资源
              最近更新 更多