Weblogic Apache插件和会话粘性

时间:2009-12-09 01:35:37

标签: apache session weblogic

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

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

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

5 个答案:

答案 0 :(得分:8)

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

  

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

     

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

     

图3-1连接故障转移

     

alt text

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

更新:从OP

回复以下评论
  

我认为这个文档只适用于一个apache服务器。在我的情况下,我有两个,负载均衡器以50:50的方式将请求转发给两个服务器。我测试了这个,而且weblogic插件没有保持粘性。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

上图适用于连接到同一WL群集的2台Apache服务器。 cookie会话信息包含有关要连接到哪个WLS以及插件将遵守的详细信息。如果主服务器(它最初连接到的服务器)WL服务器不可用,则该请求将被发送到辅助服务器(在第一次请求时根据选择“{{3 }}“)。此辅助服务器维护与主WLS服务器相同的会话状态,并且应该能够处理该请求。

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

答案 4 :(得分:-1)

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

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