1. 程式人生 > >關於WebLogic叢集多播地址方面的問題解決

關於WebLogic叢集多播地址方面的問題解決

WebLogic叢集依靠多播地址來探測叢集節點的“心跳”,多播地址預設一般是239.139.0.0,埠7001。那不同叢集的多播地址能否重複呢?答案是:一定不能重複,必須保證“多播地址+埠”的唯一性。下面列舉實際應用中多播地址重複的幾個問題:

假定場景:有A、B兩個WebLogic叢集,並且多播地址+埠設定相同。A叢集中有a1、a2兩個被管server;B叢集中有b1、b2兩個被管server。A、B叢集各通過Apache轉發。
案例1:
訪問叢集A的應用時,不時出現會話丟失現象,分析後是request所帶的jsessionid找不到對應的JVM。 這個用httpWatch工具可以跟蹤到jsessionid,也可以開啟weblogic的apache外掛日誌,能夠看到相應的錯誤。
原因:由於多播地址重複,叢集A收到了叢集B中節點的心跳資訊,干擾了叢集A的動態服務列表更新,丟失了a1或者a2的資訊,使得本來轉發到a1或a2節點的請求找不到相應的JVM,其實後臺Session是在的。
案例2:
假定叢集A和叢集B的叢集名稱都為myCluster,本來兩個叢集,名稱是可以相同的。但在多播地址重複的情況下,假定B叢集已啟動,此時啟動A,可能會報出叢集myCluster名稱重複的ERROR資訊。

下面簡單說明一下,在WebLogic叢集環境下,如何利用多播來檢測叢集環境各節點都是正常的。如下:
java -cp [color=red].:/……/server/lib/[/color]weblogic.jar weblogic.cluster.MulticastMonitor <UdpAddress> <UdpPort> <domainName> <clusterName>

說明:
<XXX>代表引數,實際輸入不要寫 <> 。
(1)UdpAddress:多播地址
(2)UdpPort:多播埠
(3)domainName:WebLogic domain的名稱
(4)clusterName:WebLogic叢集名稱
(5)標註的紅色字型部分根據weblogic.jar的實際路徑填寫。

執行:
在WebLogic叢集的每臺機器上都執行一下,如果正常的話,每個機器上都能收到各節點的反饋資訊。

(1)假設有2臺機器,每臺機器上部署了2個叢集節點,那在每臺機器上執行都能夠收到4條UDP訊息(分別對應4個節點)
(2)如果收到了叢集外部的UDP訊息,說明和其他叢集多播配置有重複,需要更改多播地址。