J2EE叢集開發部署實戰
概述
一個叢集系統是一群鬆散結合的伺服器組,形成一個虛擬伺服器,為用戶端使用者提供統一的服務。對於這個用戶端來說,通常在訪問叢集系統時不會意識到它的服務是由具體的哪一台伺服器提供。叢集系統一般應具高可用性、延展性、負載平衡、故障恢複和可維護性等特殊效能。越來越多的關鍵任務和大型應用正運行在J2EE平台上,象銀行之類的應用要求很高的可用性(HA),大型系統比如大型網站則要求更好的伸縮性。J2EE叢集是最常用的技術,用來提供高可用性和伸縮性的容錯服務,單機部署和多機叢集化部署差別很大,網上的資料大多語焉不詳,即使文檔圖文並茂,也是到了關鍵處就部署成功,其實後面還要做些工作才行,且多以單機部署多個server來類比叢集化部署,其實和真正多機部署還是有比較大的差別。本文僅以weblogic應用伺服器為例說明叢集化部署。 叢集層次說明
Web級叢集,是J2EE叢集中最重要和基礎的功能。web層叢集技術包括:Web負載平衡和HTTPSession失效轉移。web負載平衡,基本的是在瀏覽器和web伺服器之間放置負載平衡器。
應用級叢集,是ejb叢集,EJB是J2EE應用平台的核心,EJB是用於開發和部署具多層結構的、分布式的、物件導向的Java應用系統跨平台的構件體繫結構。主要是業務應用,部署在EJB容器上。
資料庫級叢集,是oracle資料庫設定多個資料庫執行個體,全部映射到資料庫。 Weblogic叢集概念
Ø Domain:由配置為Administrator Server的WebLogic Server執行個體管理的邏輯單元,這個單元是有所有相關資源的集合。
Ø Server: 一個相對獨立的,為實現某些特定功能而結合在一起的單元。按功能可分為domain server 和managed server。一個Domain 可以包含一個或多個WebLogic Server執行個體,甚至是Server叢集。一個Domain中有一個且只能有一個Server 擔任管理Server的功能,其它的Server具體實現一個特定的邏輯功能。
Ø Domain Server:在一個叢集中,有且僅有一個domain server,即管理server,該server只負責管理多個Managed server(被管理server),即domain server僅僅是行政領導,考勤之類的活動,如某個managed Sever的狀態,是未知(unKnown),還是運行(run),還是停止(shutdown),遠程啟動等等,不負責具體業務。因此部署時domain server上不要部署具體任務,畢竟人家是當官的嗎。
Ø Managed Server:真正的實幹家,部署具體的應用。應用及商務邏輯組件被分發在多個受管伺服器(Managed Server)。
Weblogic叢集要求
Ø 叢集中的所有Server必須位於同一網段,並且必須是IP廣播(UDP)可到達的
Ø 叢集中的所有Server必須使用相同的版本,包括Service Pack
Ø 叢集中的Server必須使用永久的靜態IP地址。動態IP地址分配不能用於叢集環境。如果伺服器位於防火牆後面,而客戶機位於防火牆外面,那麼伺服器必須有公用的靜態IP地址,只有這樣,用戶端才能訪問伺服器
Ø 使用weblogic的支援叢集的licence
項目實戰 項目概況
我們的項目是struts—ejb—hibernate—spring,因為hibernate和spring都必須進行初始化且初始化都依賴於servlet,在系統啟動時就初始化資料,並且我們在web層和ejb層分別部署為web叢集和ejb叢集,而hibernate和spring都部署在應用伺服器上。為此,我們打了兩個部署套件,一個是cnlife.war, cnlife_app.ear,其中cnlife.war包部署在web叢集上,cnlife
_app.ear部署在ejb叢集上,cnlife_app.ear包括兩個包,其中一個是cnlifeejb.jar(ejb包),
另外一個是backgroudinit.war,backgroudinit.war用來初始化spring,hibernate的初始化資料。
cnlife.war (部署在Web Server)
_backgroudinit.war
|
cnlife_app.ear-| (部署在 Application Server)
|_cnlifeejb.jar
Ejb是stateless Session bean,使用ejb的目的就是應用伺服器叢集,部署示意圖如下:
Web級叢集
Web叢集中使用記憶體複製策略
weblogic.xml 如下
使用JNDI串連EJB叢集
書寫規則是:
Managed server使用相同連接埠號碼,“t3://acme1,acme2,acme3:7001”
Managed server使用不同連接埠號碼,“t3://node1:7001,node2:7002,node3:7003”
Weblogic Proxy
EJB級叢集
設定叢集地址
設定叢集地址,其中的ip地址為managed server的地址和連接埠號碼,多個managed server使用“,”隔開。
Hibernate設定檔設定資料來源
使用weblogic串連池配置hibernate設定檔:(片斷),其中mypool是資料來源的JNDI
<property name="