2010-11-20 115 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,啓用調試,並在下一次問題發生支票在代理記錄請求是否發送到不同的服務器,以及該服務器是否不是輔助服務器。