(本文講述如何在WebLogic Server 9.2上配置集羣,以及通過Http代理方式Proxy Server來訪問集羣)
預備知識
什麼是Domain和Server
Domain
Domain是WebLogic Server實例的基本管理單元。所謂Domain就是,由配置爲Administrator Server的WebLogic Server實例管理的邏輯單元,這個單元是有所有相關資源的集合。
Server
Server是一個相對獨立的,爲實現某些特定功能而結合在一起的單元,該服務用於部署應用程序,其中代理服務還在該Server下建立。
Domain and Server的關係
一個Domain 可以包含一個或多個WebLogic Server實例,甚至是Server集羣。一個Domain中有一個且只能有一個Server 擔任管理Server的功能,其它的Server具體實現一個特定的邏輯功能。
負載均衡集羣
高擴展型集羣,即負載均衡集羣技術,就是帶均衡策略(算法)的服務器集羣。負載均衡集羣在多節點之間按照一定的策略(算法)分發網絡或計算處理負載。負載均衡建立在現有網絡結構之上,它提供了一種廉價有效的方法來擴展服務器帶寬,增加吞吐量,提高數據處理能力,同時又可以避免單點故障。以Web訪問爲例,後臺的多個Web服務器上面有相同的Web內容,Internet客戶端的訪問請求首先進入一臺服務器,由它根據負載均衡策略(算法)合理地分配給某個服務器,其中服務器可以是同一臺機器,也可不同機器。
WebLogic 集羣的工作機制
每一個Clustered service,在每一個server上都會有一個instance,即一個replica,這些replicas集合在一起形成一個replica-aware stub。這些stubs負責客戶端與相關的服務器段對象的通信,當客戶端請求該service時,實際上是向stub發出請求,stub根據不同的算法調用集合中某一replica,如果調用失敗,stub會檢測到錯誤並重新調用其它的replica。Cluster支持多種算法:隨機、輪循、基於性能的負載均衡的輪循(Weight-based round-robin)、根據參數值調用(Parameter-based routing)。WebLogic Cluster通過負載均衡和容錯最大程度的實現了它的可伸縮性和可用性。爲了提高Cluster的可伸縮性,必須保證充分利用每一個Server。WebLogic可以在不同平臺、不同性能的機器上安裝Server並進行Cluster,然後採用Weight-based round-robin算法達到負載均衡,從而使每一個Server都得到充分的利用。
本文環境
Ø 平臺:Windows 2003
Ø 軟件:WebLogic Server 9.2
配置WebLogic Server集羣
WebLogic集羣的體系結構
單層混合型的集羣架構(Cluster)
這種架構將所有的Web應用以及相關的服務應用全部置於集羣中的單一WLS實例中,這種架構的優勢在於:
Ø 易於管理
Ø 靈活的負載平衡機制
Ø 更強的安全控制
多層結構的集羣架構(Cluster)
這種架構使用兩個WLS集羣,一個放置表靜態內容和集羣Servlet,另一個放置集羣EJB。一般應用於下面這些情況:
Ø 在負載平衡機制需要調用集羣EJB中的方法時;
Ø 在提供內容與提供對象的服務之間需要更大的機動性時;
Ø 在需要更高的系統穩定性時;
根據東方資產的要求採用單層混合型的集羣架構可以滿足要求。
配置集羣應用的必要條件
Ø 集羣中的所有Server必須位於同一網段,並且必須是IP廣播(UDP)可到達的
Ø 集羣中的所有Server必須使用相同的版本,包括Service Pack
Ø 集羣中的Server必須使用永久的靜態IP地址。動態IP地址分配不能用於集羣環境。如果服務器位於防火牆後面,而客戶機位於防火牆外面,那麼服務器必須有公共的靜態IP地址,只有這樣,客戶端才能訪問服務器
Ø 要以CLUSTER方式運行,必須有包含CLUSTER許可的LICENSE才行(從Bea網站上下載的試用版本就可以進行Cluster配置)
配置前的準備工作
在配置集羣應用前要對集羣的配置信息有一個良好的設計,下面就是我們這次配置的集羣信息:
在同一網段內的不同機器上配置集羣
機器類型 |
操作系統 |
硬件配置 |
角色 |
備註 |
PC |
Win2003 Server |
IP:90.0.12.20 PORT:7001 |
Administrator Server |
管理服務 |
PC |
Win2003 Server |
IP:90.0.12.20 PORT:8080 |
Proxy Server |
代理服務 |
PC |
Win2003 Server |
IP:90.0.12.20 PORT:7082 |
Managed Server |
受管理服務 |
PC |
Win2003 Server |
IP:90.0.12.112 PORT:7084 |
Managed Server |
受管理服務 |
硬件配置中90.0.12.20,與90.0.12.112分別是兩臺不同的機器,集羣也可以配置在同一臺機器中。
Weblogic安裝以及集羣配置的操作
使用Domain Configuration Wizard進行配置
創建新的Domain
選擇“Toolà Configuration Wizard”,單擊“下一步”按鈕
選擇安裝域源
選擇安裝“WebLogic Server”,單擊“下一步”按鈕
配置管理員用戶名和密碼
輸入Weblogic管理員管理服務器(AdminServer)的用戶名和密碼,在此以“weblogic”作用登錄管理服務器的用戶名和密碼,單擊“下一步”按鈕
配置域啓動模式和JDK
選擇“生產模式”和“JRockt SDK”後,單擊“下一步”按鈕
選擇是否自定義環境和服務設置
選擇“是”後,單擊“下一步”按鈕
配置管理服務器
輸入Administrator Server的名稱,監聽地址,監聽端口,如果需要SSL支持的話可以在“SSL enabled”後面的複選取框上打勾,配置SSL監聽端口,單擊“下一步”按鈕
配置受管理服務器(代理服務器實際上也是一個受管理服務器)
輸入Managed Server的名稱,監聽地址,監聽端口,如果需要SSL支持的話,可以在“SSL enabled”複選框上打勾,配置SSL監聽端口。可以配置多個Managed Server。單擊“下一步”按鈕
(注:我這臺機的IP是:90.0.12.20,另一臺機上要安裝受管理服務器的IP地址是:90.0.12.112)
配置羣集信息
單擊“切換顯示”,再單擊“添加”,輸入Cluster的名稱,Multicast address組播地址(這個做什麼用暫不明白),Cluster的組播地址和端口,Cluster地址可輸可不輸。單擊“下一步”按鈕
將“受管理服務器”添加到“集羣”中
選擇左面列表中的Managed Server,將其添加到右面的列表中,這裏代理服務器不要添加到右邊,單擊“下一步”按鈕
創建HTTP代理應用程序
選中“爲羣集創建Http代理”,myCluster代理服務器選擇前面沒有加入myCluster的ProxyServer,單擊“下一步”按鈕
配置計算機
在此不對計算機進行配置,單擊“下一步”按鈕
檢查Weblogic域
在此檢查前面所做的配置,如果沒有問題單擊“下一步”按鈕
創建Weblogic域
輸入要創建的域名和位置,此處域名可輸入爲Clust_domain,輸入完成後單擊“創建”按鈕
正在創建域
創建無誤後,單擊“完成”按鈕
編輯啓動WebLogic服務文件
Ø 編輯口令文件
在剛纔創建的域目錄下建立boot.properties文件,內容爲:
username=weblogic
password=weblogic
如果不創建CMD啓動服務時,都需要手動輸入用戶名和密碼
Ø 編輯啓動管理服務器的文件
在剛纔創建的域目錄下的bin目錄中創建startAdminServer.cmd,內容爲:
@ECHO OFF
@REM 啓動管理服務器.
start .\startWebLogic
Ø 編輯啓動代理服務器的文件
在剛纔創建的域目錄下的bin目錄中創建startProxyServer.cmd,內容爲:
@ECHO OFF
@REM 啓動代理服務器.
@REM 使用startManagedWeblogic命令啓動Managed Server,它的命令格式是:
@REM startManagedWeblogic.cmd Managed Server的名稱 Administrator Server地址
@REM startManagedWeblogic 受管理服務器名稱 管理服務器URL
start .\startManagedWebLogic ProxyServer http://90.0.12.20:7001
Ø 編輯啓動受管理服務器(ManagedServer_1)的文件
在剛纔創建的域目錄下的bin目錄中創建startManagedServer_1.cmd,內容爲:
@ECHO OFF
@REM 啓動受管理服務器ManagedServer_1.
@REM 啓動Managed Server
@REM 使用startManagedWeblogic命令啓動Managed Server,它的命令格式是:
@REM startManagedWeblogic.cmd Managed Server的名稱 Administrator Server地址
@REM startManagedWeblogic 受管理服務器名稱 管理服務器URL
start .\startManagedWebLogic ManagedServer_1 http://90.0.12.20:7001
(注:使用startManagedWeblogic命令啓動Managed Server,它的命令格式是:
startManagedWeblogic.cmd Managed Server的名稱 Administrator Server地址)
在其它機器上配置受管理服務器
一. 按默認情況安裝Weblogic 9.2
二. 點擊“開始à所有程序à BEA ProductsàToolsà Configuration Wizard”啓動Weblogic域配置嚮導,按默認選擇,直接單擊“下一步”
三. 選擇域源
按默認選擇,單擊“下一步”
四. 配置管理員用戶名和密碼
輸入管理員的用戶名和密碼,這裏爲:用戶名-weblogic,密碼-weblogic,完成後單擊“下一步”
五. 配置服務器啓動模式和JDK
這裏選擇“生產模式”,JDK選擇“JRockit JDK”,完成後單擊“下一步”。
六. 生定義環境和服務設置
這裏選擇“是”,完成後單擊“下一步”。
七. 配置管理服務器
輸入本機的管理服務器名稱和地址以及端口號,完成後單擊“下一步”。
八. 配置受管理服務器
這是一是重點,在這裏設置的受管理服務器名稱和IP地址以及端口號要與羣集服務器上設置的一致,完成後單擊“下一步”。
九. 配置集羣
這裏也與羣集服務器配置不同,在這裏不做任何處理直接單擊“下一步”。
因爲當前pc上的受管理服務器已被前面集羣受管理
一〇. 配置計算機
這一步我們也不做處理,直接單擊“下一步”。
一一. 檢查Weblogic域
檢查你做的配置是否正確,完成後單擊“下一步”。
一二. 創建Weblogic域
輸入要創建的Weblogic域名稱,這裏使用MultiIP_domain,完成後單擊“創建”。
一三. 正在創建域
稍等待創建完成後單擊“完成”。
一四. 編輯啓動文件
在剛纔創建的域目錄下的bin目錄中創建startManagedServer_2.cmd,內容爲:
@ECHO OFF
@REM 啓動受管理服務器ManagedServer_2.
@REM 啓動Managed Server
@REM 使用startManagedWeblogic命令啓動Managed Server,它的命令格式是:
@REM startManagedWeblogic.cmd Managed Server的名稱 Administrator Server地址
@REM startManagedWeblogic 受管理服務器名稱 管理服務器URL
start .\startManagedWebLogic ManagedServer_2 http://90.0.12.20:7001
啓動WebLogic服務
在集羣服務器上所創建的域的bin中做如下操作。
Ø 雙擊“startAdminServer.cmd”啓動管理服務器
Ø 雙擊“startProxyServer.cmd”啓動代理服務器
Ø 雙擊“startManagedServer_1.cmd”啓動管理服務器1
在其它受管理服務器的bin目錄下做如下操作。
Ø 雙擊“startManagedServer_2.cmd”啓動受管理服務器2(注意:中間會要你輸入管理域的用戶名和密碼),啓動完成後會看到如下屏幕
部署WEB應用
進入Console控制檯(http://90.0.12.7001/console)。
進入console控制檯後,在左邊域結構樹中點擊“環境”前的“+”,
在展開的菜單中點擊“服務器”,在右邊的列表中可以看到各服務器是否正常啓動。
如果正常啓動則單擊“部署”,再單擊“鎖定編輯”, 再單擊“安裝”,選擇要部署的WEB應用程序
完成後,單擊“下一步”,再單擊“下一步”,
選擇羣集“myCluster”,再選擇“羣集中的所有服務器”,之後單擊“下一步”,再單擊“下一步”,再單擊“完成”。再單擊左上角的“激活更改”。
啓動WEB應用
進入Console控制檯(http://90.0.12.7001/console)。
進入console控制檯後,點擊“部署”
選中列表中的應用,然後選擇“爲所有請求提供服務”,再單擊“是”。
看到狀態是“活動”就表示WEB應用啓動完成。
注意BEAProxy4_myCluster_ProxyServer ,代理服務web應用是weblogic自帶的程序,需要修改web.xml,和weblogic.xml。
Web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>HttpClusterServlet</servlet-name>
<servlet-class>
weblogic.servlet.proxy.HttpClusterServlet
</servlet-class>
<init-param>
<param-name>WebLogicCluster</param-name>
<param-value>
90.0.12.20 :7082|90.0.12.112:7084
</param-value>
</init-param>
<init-param>
<param-name>DebugConfigInfo</param-name>
<param-value>ON</param-value>
</init-param>
<init-param>
<param-name>verbose</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
注意<param-value>元素的值是對應受管理服務的IP和port 如果多個IP必須用“|”分隔。千萬不要把90.0.12.20 :7001也配置進去。
測試集羣的分發功能
編寫測試WEB應用並部署
我們來編寫一個簡單的WEB應用,它會在控制檯和瀏覽器上同時打印出“OK”字樣,然後將這個WEB應用部署到集羣中所有Managed Server上面。(代碼見附件)
在這裏我們將通過Apache中所帶的ab包來進行併發訪問的模擬測試,使用如下的命令就可以完成壓力測試。
ab –n 100 –c 10 http://90.0.12.20:8080/index.jsp
ab是測試程序的名稱
參數n代表請求的總數量
參數c代表併發的請求數
url爲要測試壓力的頁面
注:使用這個命令時,一定要在系統路徑中能夠找到該程序,否則不能執行。
壓力測試完成後,我們從Managed Server的控制檯上可以看到,ManagedServer_1,ManagedServer_2都打印出了“OK”字樣,這說明,在併發請求的情況下,集羣能夠將請求進行分發,以達到負載平衡的目的。
Session共享問題測試
一. 編輯Weblogic.xml配置文件放到WEB應用程序的WEB-INF目錄下,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<session-descriptor>
<persistent-store-type>replicated</persistent-store-type>
<sharing-enabled>true</sharing-enabled>
</session-descriptor>
<wls:context-root>/</wls:context-root>
</wls:weblogic-web-app>
注意 如果replicated發部不成功換成memory,因爲在9.2的版本中replicated無效。8.1版本可以用。
二. 在IE地址欄中輸入http://90.0.12.20:8080/main.jsp並回車,可以看到只有一個weblogic受管理服務器上打出了“OK”,前且可以看到頁面上是顯示是未登錄狀態。這時不要並閉IE,再在地址欄中輸入http://90.0.12.20:8080/login.htm,以用戶名:kxq,密碼:kxq,登錄,這裏頁面上你會看到已是登錄狀態,這時你可以隨便關閉或打開ManagedServer_1或ManagedServer_2測試,只要保持有一個ManagedServer是啓動狀態,你的頁面都會是登錄狀態。
三. Session保持測試 在main,jsp中代碼 如果session.set 一個屬性爲空,那麼設置一個值,否則輸出該值。
測試結果:如果http://90.0.12.20:8080/main.jsp, 通過代理連接到20的7082上,那麼session爲空,該屬性設置一個值,這時再把20 7082關閉,那次連接http://90.0.12.20:8080/main.jsp, 這時頁面結果顯示在20 7082上屬性的值那麼session保持測試成功。
集羣配置中要注意的問題
Ø Admin Server只用於集羣的管理,而不能參與集羣事務。
Ø Web應用應該部署到集羣上,文件的同步是由WebLogic來完成的