
目錄(?)[-] 1.Weblogic的集群 2.創建Weblogic集群前的規划 3.開始創建我們的Weblogic集群 1.1 創建集群的總控制端aminserver 2.2 創建集群中的節點mycluster1 mycluster2 3.3 如何啟動集群 4.jdbc集群 5.把工程布署到集群環境中去 6.使用Apache與Weblogic集群整合 7.JMS集群
本文轉摘於;http://blog.csdn.net/liuqiwen0512/article/details/7739421
一、Weblogic的集群
還記得我們在第五天教程中講到的關於Tomcat的集群嗎?
兩個tomcat做node即tomcat1, tomcat2,使用Apache HttpServer做請求派發。
現在看看WebLogic的集群吧,其實也差不多。

區別在於:
- Tomcat的集群的實現為兩個物理上不同的tomcat,分別就是兩個node,沒有總控端,沒有任何控制台可言(只有通過比較簡陋的http://localhost:8080/manager/html,或者是http://localhost:9090/manager/html)來對每個tomcat節點進行監視(此處只有monitor沒有control);
如果我們要布署我們的Web應用,需要分別手工往每個Tomcat的webapp目錄里拷貝文件。
- Weblogic的集群必須設立一個總控端,可從上圖中看出,然后這個總控端我們把它稱為AdminServer,然后在其下可以掛weblogic的集群的node,這個node不是物理上不同的兩個weblogic,而是不同的domain,我們假設domain1, domain2為兩個weblogic的集群的節點。
如果我們要布署我們的Web應用,只需要在總控端布署一次,然后掛在這個總控端下的節點將會自動將我們的web應用發布到每一個節點。
因此,要實現weblogic的集群必須:
- 安裝Weblogic
- 創建一個AdminServer的domain
- 在AdminServer上建立集群總控端
- 分別創建每一個要加入此集群總控端的node,也是一個個的domain
二、創建Weblogic集群前的規划
根據第一節中的內容,我們將我們用於實驗的Weblogic規划成3個domain,每個domain都包含有下列的必不可少的屬性:
- AdminConsole(總控端)
邏輯名
物理名(domain的系統路徑)
端口號
計器名(IP)
登錄信息(username/password)
- Cluster node1(集群節點1)
邏輯名
物理名(domain的系統路徑)
端口號
計器名(IP)
登錄信息(username/password)
- Cluster node2(集群節點2)
邏輯名
物理名(domain的系統路徑)
端口號
計器名(IP)
登錄信息(username/password)
我們用表格列出我們將要創建的集群中總控端與每個節點的集息:
物理名 |
邏輯名 |
端口號 |
主機名(IP) |
登錄信息 |
\bea\user_projects\domains\adminserver |
AdminServer |
7001 |
localhost |
weblogic/password_1 |
\bea\user_projects\domains\server1 |
mycluster1 |
7011 |
localhost |
weblogic/password_1 |
bea\user_projects\domains\server2 |
mycluster2 |
7012 |
localhost |
weblogic/password_1 |
規划好了,就可以開始來創建我們的集群了。
三、開始創建我們的Weblogic集群
3.1 創建集群的總控制端(aminserver)
Windows:
Windows下通過菜單->OracleWeblogic->Weblogic Server 11gR1->Tools->Configuration Wizard來啟動創建domain的wizard。

Unix/Linux:
Unix/Linux下通過
cd /bea/wlserver/common/bin ./config.sh |
來啟動創建domain的wizard。

選擇“創建新的Weblogic域”,選下一步(下面全部跟着我的操作步驟與界面填選的參數走,所有的用戶名啦、密碼啦、端口號啦、IP啦,都請根據第一節中的那個表格里的參數填寫)

下一步后界面類似,但是是有區別的,注意了哦,不要下手太快了

上面這個配的就叫集群廣播地址的界面。
因為集群是通過廣播(有unicast和multicast兩種)來同步集群中的節點,並且把每個節點中的session通過這個廣播地址來進行復制和同步,即主控域不斷的時時刻刻的會和它下面的子節點間保持通訊、經常去詢問各個子節點的。
- 名稱:可以任意
- 集群信息傳送模式:有unitcast與multicast兩種,在11G版本前都是multicast10G后開始支持unicast協議。如果指定了multicast,就必須指定一個“多點傳送地址”,此地址和端口都可以采用weblogic默認的。
如果在域環境,還需要在防火牆中配置這個“多點傳送地址”與“多點傳送端口”,使其在防火牆中被打開,協議為both of tcp and udp。

Look, 右邊這塊我們把它稱為“集群的邏輯拓卜圖”。

此處是對每個集群里的節點指定相應的“計算機名/IP”,由於我們的實驗是建立在同一台機器上的即縱向集群,因此這步什么都不需要填,直接下一步。

完成后可以啟動adminserver

然后通過http://localhost:7001/console來查看我們的集群規划,如下圖:
這樣,我們就完成了創建一個新的domain並且將且擴展成為了集群的總控制端服務器,同時在這上面我們制作了一個“集群拓卜圖”,那么下面要做的就是:
- 創建該集群拓卜圖中的節點1
- 創建該集群拓卜圖中的節點2
3.2 創建集群中的節點(mycluster1, mycluster2)
啟動Weblogic的Configuration Wizard
按照普通的域,就是一個普通的域來創建(為了實驗方便我們的用戶名與密碼全部為weblogic/password_1):
- user_projects\domains\server1(邏輯名為:mycluster1,端口:7011)
- user_projects\domains\server2(邏輯名為:mycluster2,端口:7012)

下一步,下一步,創建,完成。
依上面的相同步驟可以自行創建server2(邏輯名為mycluster2,端口:7012)。

3.3 如何啟動集群
物理名 |
邏輯名 |
端口號 |
主機名(IP) |
登錄信息 |
\bea\user_projects\domains\adminserver |
AdminServer |
7001 |
localhost |
weblogic/password_1 |
\bea\user_projects\domains\server1 |
mycluster1 |
7011 |
localhost |
weblogic/password_1 |
bea\user_projects\domains\server2 |
mycluster2 |
7012 |
localhost |
weblogic/password_1 |
我們看着上面這個表格來輸入命令吧:
1. 啟動主控域(必須永遠先啟動主控域)

2. 啟動節點1(間點間的啟動順序無所謂)

3. 啟動節點2(間點間的啟動順序無所謂)

全部啟動完畢后就可以通過主控制域的admin console即http://localhost:7001/console來管理這個集群了。

四、jdbc集群
有了集群,我們就可以布署我們的JDBC了,只是這個JDBC的布署和以前單機版的JDBC布署稍稍有點不一樣,前面我們引用第八天中的建立JDBC的步驟:

好好好,停,到了這邊,不一樣的地方來了。
嘿嘿,千萬不要把這個JDBC連接池的“target”即作用域設錯了哈,我們現在是集群,要把這個JDBC連接池的作用域設在我們的集群上的哈!

我們來測試一下我們建立的數據源吧。

兩個cluster上的數據源全部部署成功。
這邊再提一句:
集群布署的話AdminServer只是一個控制器,通過它布署的war程序是自動同步到掛在它下面的所有的節點中去的,因此JDBC數據源,或者JMS或者是EJB都要在綁定是把target即作用域設成cluster而不是AdminServer本身,因為AdminServer本身不會布署任何任何東西的。
五、把工程布署到集群環境中去
- 確保我們將要布署的工程中的web.xml的最后一行含有:
<distributable/> |
- 在將要布署的工程的WEB-INF目錄下新建一個weblogic.xml的文件,其內容如下:
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"> <session-descriptor> <debug-enabled>true</debug-enabled> <persistent-store-type>replicated</persistent-store-type> <sharing-enabled>true</sharing-enabled> </session-descriptor> <context-root>/cbbs</context-root> </weblogic-web-app> |
該內容使得你的工程可以在Weblogic集群環境下進行Session復制。
然后就可以開始布署了

下面又來了,和在集群中布署JDBC是一樣的,請看:

下一步,下一步一直到[完成]按鈕亮起來后,點[完成]。

點[保存]並[激活更改]。
大家來看看兩個cluster即mycluster1與mycluster2下是否被布署了工程,即相當於我們手工要在兩個tomcat節點的webapps目錄里拷入我們的WAR工程,而weblogic只需要通過主控制域,自動將war工程布署在其下的所有子節點內。

是的,果然,它自動布署了。就算我下面有10幾個子節點,它也一樣只需要在AdminServer上布署一次,自動同步。
我們把這個工程啟動起來吧。

當你一點“為所有請求提供服務,再來看兩個字節點的后台console,都可以同步啟動了:

布署成功

打開兩個IE:
一個輸入: http://localhost:7011/cbbs
一個輸入: http://localhost:7012/cbbs

Weblogic集群布署成功,接下去就是在Apache里進行派發了
六、使用Apache與Weblogic集群整合
打開httpd.conf,把下面這段就是我們在“第九天”中加入的,去掉:
LoadModule weblogic_module modules/mod_wl_22.so <IfModule mod_weblogic.c> WebLogicHost localhost WebLogicPort 7001 MatchExpression /cbbs/WEB-INF MatchExpression /cbbs/*WEB-INF MatchExpression /cbbs/*.action MatchExpression /cbbs/servlet/* MatchExpression /cbbs/*.jsp MatchExpression /cbbs/*fckeditor/editor/filemanager/connectors/*.* MatchExpression /cbbs/fckeditor/editor/filemanager/connectors/* WLLogFile logs/wlproxy.log </IfModule> |
換成下面這一段
LoadModule weblogic_module modules/mod_wl_22.so <IfModule mod_weblogic.c> Include conf/weblogic.conf </IfModule> |
然后在apache安裝的conf目錄下手工建立weblogic.conf文件,其內容如下:
WeblogicCluster localhost:7011,localhost:7012
MatchExpression /cbbs/WEB-INF MatchExpression /cbbs/*WEB-INF MatchExpression /cbbs/*.action MatchExpression /cbbs/servlet/* MatchExpression /cbbs/*.jsp MatchExpression /cbbs/*fckeditor/editor/filemanager/connectors/*.* MatchExpression /cbbs/fckeditor/editor/filemanager/connectors/*
|
重啟你的Apache,輸入:http://localhost/cbbs/index.jsp

Apache加Weblogic集群,搞定!
七、JMS集群
這是我在用Weblogic集群布署PEGA Rulz的詳細步驟,供各為參考。因為網上關於JMS在Weblogic下如何作集群不是太多,因此把步驟記錄下來Share給大家。
JMS集群和JDBC集群不一樣,就是不能夠直接建立JMS源,然后把它target到我們的myclusterbroadcast上去。
- 而是需要分別為每個cluster單獨建一個jms的server如下圖。

- 然后建立jmsmodule

將module 的作用范圍即target到我們的cluster(myclusterbroadcast)上去。
建立完了module你就要建立topic, queue以及相應的topic connection factory或者是queue connectionfactory了是吧?因為我們這邊給PEGA Rulz做集群用的是topic方式來發布集群的,因此我們以topic為例,queue的建立也就一樣了。
- 單擊剛才我們建立的KTJmsModule

點[New]
先建connection factory

- 在新建connectionfactory的界面中有一個[高級定位]的按鈕

- 點[新建子部署]
填入完子布署的名稱后,按照如下圖來“target”

點完成后跳出如下的界面

此時我們可以開始真正建立我們的topic或者是queue了
前面說了不能夠直接建立JMS源,然后把它target到我們的myclusterbroadcast上去。那么我們要對JMS進行集群即對Topic或者是Queue進行集群,但是我們可以建立一個Distribute Topic,然后分別建兩個一邊的topic,一個topic連向jmsserver1一個topic連向jmsserver2,然后把這個Distribute Topic定位(Target)到這兩條topic上即是我們的“集群下的jms topic”。
在jmd module里點[新建]按鈕
選擇“主題”(不是分布式主題)

每個子部署(sub deployment)需要定位(target)到一個jms server上。
依此分別建立:
- topic1 subtop1->jmsserver1
- topic2 subtop2->jmsserver2
現在,我們的jms module里的內容因該如下圖所示:

- 建立 “分布式主題”(DistributeTopic)
在jms module里點新建按鈕,選“分布式主題”

一定要記得把“Destination Type”改成“Weighted”。
這邊的分布式Topic的JNDI Name: 就是我們真正的需要用來做集群的JMS的Topic或者是Queue的jndi名,比如說我的產品PEGA Rulz需要在集群環境下用到RamTopicJNDI,這個JNDI Name就必須填產品說明書上的那個Topic或者是Queue的名字哦。
點下一步后將剛才兩個新建的topic全部分配給這個distribute topic

點[完成]按鈕
這樣,一個集群環境下的JMS分布式主題(Topic)就全建完了,最后不要忘了點左邊菜單上方的“激活更改”,保存您剛才的所有的更改。
