Weblogic 如何解决群集或负载平衡引起的问题?

Weblogic 如何解决群集或负载平衡引起的问题?,weblogic,weblogic-10.x,Weblogic,Weblogic 10.x,您好,我有一个应用程序部署在两个weblogic应用程序服务器上 最近我们发现,在某些情况下,返回的用户会话为空。开发人员反馈说,这可能是由于会话未复制到其他服务器造成的 我们如何证明这是真的?您是否使用两个应用程序服务器都可以通过某种通信协议访问的单个会话存储?如果不是,那么肯定是这样。试想一下,如果您的weblogic服务器将会话存储在内存中的任何位置,并且让用户通过cookie传递会话id,那么另一台服务器就无法访问另一台机器上的内存。除非您使用的是粘性负载平衡。是吗?这里有2个概念要考虑

您好,我有一个应用程序部署在两个weblogic应用程序服务器上

最近我们发现,在某些情况下,返回的用户会话为空。开发人员反馈说,这可能是由于会话未复制到其他服务器造成的


我们如何证明这是真的?

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

这里有2个概念要考虑:会话粘性和会话复制。

会话粘性是一种机制,其中weblogic server确保如果来自会话a用户的请求转到服务器1,则来自会话a用户的下一个请求将仅转到服务器1

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

第一次请求到达WLS托管服务器时,它会使用会话id进行响应,并向其附加服务器的JVM id(这是主id),如果托管服务器是群集的一部分,它还会附加辅助服务器JVM id(辅助服务器是复制会话的服务器)

代理维护一个包含托管服务器的所有JVM id和相应IP的表,它还定期检查服务器是否已启动并正在运行

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

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

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

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

所以为了证明为什么会话会丢失, 1) 检查服务器日志,查看会话是否因超时而无效,
2) 如果使用wlproxy,请启用调试,下次出现问题时,请在代理日志中检查请求是否发送到其他服务器,以及该服务器是否不是辅助服务器。

如何知道负载平衡是否存在会话粘性?您使用的是基于软件或硬件的负载平衡器吗?谁设的?他们应该知道它是粘性的还是不粘性的。一种快速而肮脏的方法是让服务器用一个包含机器名的头响应所有请求。然后通过http代理发出大约60个请求,并检查这些头。如果总是同一台机器,那么负载平衡就很棘手。如果它改变了机器,它就不是。似乎是硬件平衡器。我告诉过你,这个会话是粘性的,你很多人想用我上面描述的方法来测试,看看它们是否准确。如果它确实看起来有粘性,那么我将从开发人员那里获得更多信息,了解哪些操作会导致返回空用户会话,即使对他们来说是随机的。