2010-11-20 85 views
0

嗨我有一个应用程序部署在两个weblogic应用程序服务器上如何解决集群或负载平衡导致的问题?

最近我们有问题,对于某些情况下返回的用户会话为空。开发人员的反馈是,它可能是由于会话未复制到其他服务器而导致的。

我们如何证明这是真的吗?

回答

1

您是否使用单个会话存储,这两个应用程序服务器都可以通过某种通信协议访问?如果不是,那肯定是这样。想想看,如果你的weblogic服务器将会话存储在任何地方的内存中,并让用户通过cookie传递会话ID,那么其他服务器就无法访问另一台机器上的内存。除非您使用粘性负载平衡。你是?

+0

我们如何知道负载平衡是否是会话粘滞? – Ggf 2010-11-20 08:34:31

+0

您使用基于软件或硬件的负载平衡器吗?谁设定的?他们应该知道它是否粘性或不粘性。 – 2010-11-20 08:35:24

+0

一种快速而肮脏的告知方式是让服务器用一个包含机器名称的头部响应所有请求。然后通过http代理发出60个请求并检查这些头。如果它始终是同一台机器,那么负载平衡是粘性的。如果它改变机器,那不是。 – 2010-11-20 08:36:35

0

这里有两个概念要考虑 - 会话粘度和会话复制。

会话粘滞是一种机制,weblogic服务器确保如果来自会话A的用户的请求发送到服务器1,则来自具有会话A的用户的下一个请求将仅发送到服务器1。

这是通过配置能够提供会话粘性的硬件负载均衡器(如F5)来实现的。或者配置安装在apache/iis/weblogic上的weblogic代理。

第一次请求到达WLS托管服务器时,它会以会话标识作出响应并附加服务器的JVM标识(这是主标识),如果托管服务器是集群的一部分,它也是附加辅助服务器jvm id(辅助服务器是正在复制会话的服务器)

代理维护一个包含所有JVM ID和受管服务器的相应IP的表,它还定期检查服务器是否启动以及是否运行。

下一次当另一个请求通过具有现有会话ID和主jvm ID的代理时,代理会解析该请求并尝试将该请求发送到该服务器,如果它在一段时间内无法发送到辅助服务器。

会话复制 - 当您使用2台或更多受管服务器配置WLS群集时,会默认启用该功能。每次任何数据更新到会话时,其数据都将在辅助服务器中进行复制。

因此,在您的情况下,如果您的应用程序用户正在丢失会话或在正常使用情况下重定向到登录页面,请检查会话是否因超时而失效,如果您已定义群集并使用WLS代理检查代理调试输出以确保主服务器和辅助服务器被附加到会话标识。

最后在示例应用程序部署wls中有一个简单示例,您可以使用它来测试会话复制和故障转移功能。

所以要证明为什么会迷路, 1)检查服务器日志,看看是否会得到因为超时而失效, 2)如果使用wlproxy,启用调试,并在下一次问题发生支票在代理记录请求是否发送到不同的服务器,以及该服务器是否不是辅助服务器。