一、IBMWebsphere集羣
IBM WebSphere的發行版分爲單機版和NetworkDeployment版,我們把Network Deployment稱爲ND即可作集羣的版本。
WAS的集羣和Weblogic的集羣一樣,它也可以作垂直和橫向兩種集羣。
而WASND的集羣是在所有的集羣中最強大的,因爲它可以:
通過各個node組成一個個cell,又可以把這一個個cell組成一個個新的cluster,而cluter與cluster還可以通過共屬一個manager node來組成新的一個集羣,以此可以通過WASND來組集超大規模集羣。
同時,IBM的新一代產品如:網格計算(回頭我們說完了WASND就來說這個),雲計算一些企業級虛擬應用都是建立在WASND的基礎之上的。
一、基本概念
使用WASND作集羣的步驟很多,下面的教程有幾十頁之多,都是步驟,只要記住下面幾個步驟就能抓住關鍵點了。
1. 先裝WASND,廢話,但你也必須要有WASND而不是一般的WAS,一般的WAS作不了集羣。
2. 建立一個Deployment Manager節點,我們稱它爲DMGR。
3. 建立“應用單元”。
4. 將“應用單元”與DMGR進行“聯合”,這邊的官方文檔上寫的是”Federate”,我們可以把它理解成“把應用單元”加入DMGR的管理之下。
5. 用startManager啓動dmgr。
6. 用startNode啓動各個node。
7. 進入dmgr的admin console可以啓動和停止集羣下的各個成員。
下面我們就來造一個集羣,在本案例內我們裝1個dmgr,兩個node,然後把兩個node加入該dmgr,然後使用IBM HttpServer(IHS)來做HTTP請求派發(請見下面的表格-大小寫嚴格區分)
邏輯名稱 |
單元功能 |
profileName |
server |
Dmgr |
集羣管理單元 |
Dmgr |
dmgr |
Server1 |
集羣節點1 |
AppSrv01 |
server1 |
Server2 |
集羣節點1 |
AppSrv02 |
server1 |
爲了測試方便,我們三個單元全部啓用“安全性管理”,用戶名與密碼均爲“admin/password_1”。
二、安裝WASND
3.1 WASND軟件的安裝
我們在此使用的是WASND7.0。
解壓後進入相關目錄雙擊launch.exe來啓動WASND的安裝界面。
開始安裝。
下一步
下一步
填入相應的安裝目錄(簡單明瞭,不要裝在什麼c:\program files這樣的目錄名下),不要有空格,不要有特殊字符,JAVA很忌諱這個的。
下一步
我們不要讓安裝程序替我們做任何節點的配置,我們將在安裝完成後自己來手動配置,因此這邊選“無”。
下一步
在彈出對話框中選[是]
一直下一步,直到安裝開始。
裝完後,把“使用概要管理工具創建新的WebSphere Application概要文件”選項前的勾去掉,並點擊[完成]按鈕。
裝完WASND後我們在系統菜單中會得到如下的菜單項
我們選“概要管理工具”來創建我們的dmgr吧。
3.2 創建DMGR(管理單元)
啓動概要管理工具
點[啓動概要管理工具]
點[創建]按鈕
選擇“管理”點[下一步]
選擇“Deployment Manager”選[下一步]
我們這邊選擇“高級概要文件創建”。
[下一步]
我們創建一個概要名即profileName爲:Dmgr的概要文件,該概要文件包含一個Deployment Manager Server, server名爲dmgr。
下一步,然後輸入我們的admin console的用戶名與密碼,我們使用:
admin/password_1。
下一步
我們不希望這些創建後的單元隨着我們系統的啓動而啓動,我們將在隨後的教程中使用命令行來啓動這些單元節點。
下一步
我們最後review一下我們的dmgr的配置,下一步開始[創建]這個管理單元的節點吧
創建完成成後不要勾選“啓動第一步控制檯”這個選項點[完成]按鈕即可。
回到“根據管理工具”主界面,我們可以看到我們剛纔的步驟已經創建了一個管理單元節點了。
使用以下命令啓動我們的管理單元
看到“進程標識爲4980”的字樣後代表我們的管理單元已經啓動成功了。
我們在IE地址欄中輸入http://localhost:9060/ibm/console後使用admin/password_1登錄後看到管理控制檯後代表我們的管理單元已經創建成功了。
接下來我們就要開始創建我們的集羣節點:AppSrv01與AppSrv02了。
3.3 創建AppSrv01與02(集羣節點)
依舊使用這個“管理概要工具”,點[創建]按鈕。
這次我們要選“應用程序服務器”這個模板來創建我們的集羣節點了。
下一步
下一步
在此我們創建我們的第一個集羣節點即:profileName爲AppSrv01,server名爲server1。
下一步
填入server名,我們這邊填server1
下一步
此處的用戶名與密碼還是用admin/password_1。
下一步
我們review一下我們的配置後下一步
和管理單元的創建一樣,我們不把AppSrv01設爲隨着操作系統的啓動而啓動,我們將手工啓動AppSrv01與AppSrv02。
下一步
最後確認一下,我們開始創建我們這個節點。
創建完了AppSrv01後我們依照AppSrv01的步驟再創建一個:
profileName爲AppSrv02;
Server Name:爲server1(這邊也是server1哦,看仔細了);
的“應用程序服務器”
全部節點創建完成後對照着我們回過頭來,再來對照着上面的那個表格,來看下面這個列表。
邏輯名稱 |
單元功能 |
profileName |
server |
Dmgr |
集羣管理單元 |
Dmgr |
dmgr |
Server1 |
集羣節點1 |
AppSrv01 |
server1 |
Server2 |
集羣節點1 |
AppSrv02 |
server1 |
我們依次啓動AppSrv01與AppSrv02來測試我們剛纔的創建是否成功。
兩個server的節點起來後我們在IE地址欄分別用:
http://localhost:9061/ibm/console與http://localhost:9062/ibm/console進行登錄,如果都能登錄成功,代表剛纔我們的創建一切無誤。
接下去我們就要開始我們的“集羣”了,即“聯合集點”的工作了。
一、使普通的應用程序服務器與Dmgr聯合
4.1 聯合AppSrv01節點入Dmgr
進入: d:\IBM\WebSphere\AppServer\profiles\AppSrv01\bin目錄
鍵入:addNode.bat localhost 8879 –username admin –password password_1進行節點聯合
此處的localhost8879即爲你的Dmgr所在的ip與dmgr的soap連接端口。
注意:
WAS內的soap連接端口默認從8879開始計數,所以Dmgr的soap端口是8879,AppSrv01的soap端口就是8880,AppSrv02的soap端口就爲8881,依次類推。
4.2 聯合AppSrv02節點入Dmgr
當有任意一個“應用程序服務器”被聯合入Dmgr後,該Dmgr即不再以server的形式運行了,而是以manager的形式來運行了,因此再關閉和啓動該Dmgr時不能用startServer命令了,而是要用startManager, stopManager這對命令來控制該Dmgr的啓動與關閉了。
4.3 重新用集羣的方式啓動Dmgr,AppSrv01,AppSrv02
4.3.1 先依次關閉AppSrv02, AppSrv01, Dmgr
關閉AppSrv02
關閉AppSrv01
關閉Dmgr
因爲已經有任意一個“應用程序服務器”被聯合入Dmgr後,該Dmgr即不再以server的形式運行了,而是以manager的形式來運行了,因此再關閉和啓動該Dmgr時不能用startServer命令了,而是要用startManager, stopManager這對命令來控制該Dmgr的啓動與關閉了。
所以我們使用stopManager而不再是stopServer命令了。
4.3.2 依次啓動集羣各節點Dmgr, AppSrv01, AppSrv02
先啓動Dmgr
使用:D:\IBM\WebSphere\AppServer\profiles\Dmgr\bin\startManager–username admin –password password_1來啓動我們的Dmgr。
再啓動AppSrv01
AppSrv01與AppSrv02的啓動沒有先後順序,可以任意。
再啓動AppSrv02
4.4 利用WAS自帶的adminconsole組建集羣
Dmgr, AppSrv01, AppSrv02都以集羣的方式啓動起來後我們還需要使用我們的admin console來把這些個節點真正組成我們想要的集羣。
一旦集羣組成後,我們就可以在admin console中start, stop我們的集羣了。
注:
要在admin console中使用GUI的方式start stop我們的集羣必須先以startMangaer的方試啓動我們的Dmgr,再以startNode的形式把各個節點啓動起來後才能利用admin console中的GUI方式來控制集羣。
我們登錄dmgr的admin console即使用:http://localhost:9060/ibm/console登錄後
我們選擇左邊的服務器類型->WebSphere Application Server,在右邊如下圖我們可以看到現在列出2個server,全部選中後,點[刪除]按鈕(對,你沒看錯,我們要的是集羣不要單獨運行的server)。
全刪空後的效果如下圖
此時,我們選擇左邊菜單的“WebSphere Application Server集羣”,然後在右邊的操作面板中點[新建]按鈕。
我們把我們這個集羣名叫“mycluster”吧,按照下面的截圖填選
下一步
此處,我們把AppSrv01這個profile所帶的server1加入這個cluster中去。
下一步
這步要注意了,很重要
剛纔我們將位於shnlap93Node01即AppSrv01中的server1加入了mycluster,現在我們要將AppSrv02中的server1也加入mycluster中。
記住在選擇節點出選擇“shnlap93Node02”,成員名還是添server1(不是server2哦)這邊有點搞。
然後不是點[下一步],而是點那個[添加成員]這個按鈕。
點了這個[添加成員]按鈕後我們會發覺在下方的成員列表中多了一項了,如下圖所示。
此時,再點[下一步]
我們確認信息後點[完成],開始創建“mycluster”集羣。
創建完後千萬不要忘記點“保存”這個連接啊,要不然前功盡棄。
點完“保存”這個連接後系統將顯示如下這樣的消息輸出界面
等到所有的消息輸出完成後,再點[確定]按鈕。
集羣mycluster創建完成後將顯示如下,此時,它的狀態爲不可用。
我們點這個“mycluster”,點進去,看到下面這樣的界面。
可以看到這個集羣包括兩個節點以及節點的相關信息,並且這兩個節點雖然都已經startNode了,但實質上相關的服務沒有啓動起來。
我們先不急着啓動我們的集羣,我們先來佈署我們的JDBC吧。
一、在WASND中佈署JDBC
在創建JDBC前我們先作一個小操作。
因爲我們現在是集羣了,在一個單元的任何資源發佈都會被同步到另一個相同的集羣中的另一個節點,但是WASND默認是不會進行這個“節點間的同步”的,需要我們人工設置一下,按照下圖:
系統管理->控制檯首選項中,勾選這個“與節點同步更改”的選項,並點擊[應用]。
以後,無論什麼資源發佈,企業級應用程序發佈,節點間的應用就都會自動“同步”了。
5.1 創建JDBC Provider
這個和我們在(第十五天)IBM Websphere的安裝與優化中的5.2小節中的介紹一樣,沒有什麼特殊的,只是在創建JDBC Provider時的作用域要選“mycluster”,而不能再是普通的Node了。
5.2 數據源
創建完我們的JDBC Provider後,我們還要創建我們的數據源,對吧?
別忘了給該數據源指定一個JAAS-J2C認證數據-見(第十五天)IBM Websphere的安裝與優化中的數據源的創建部分。
好,此時請不要急着點測試。
WASND7中有個BUG,即有時發佈完一個資源,並且同步到各個節點後並未馬上生效,而是需要物理上重啓各個“同步的節點”纔會生效。
因此,我們打開一個命令行:
第一步:依次stopAppSrv01與AppSrv02
第二步:依次startAppSrv01與AppSrv02
回到我們的admin console界面中。
1) 使用左邊的菜單項中的“WebSphere Application Server集羣”。
2) 勾選”mycluster”這個集羣
3) 點[啓動]按鈕
我們可以不斷的通過“狀態”旁的刷新按鈕來監控這個集羣啓動狀態
正在啓動狀態
啓動成功狀態
啓動成功後該集羣mycluster中的各個節點的狀態都應該爲“綠色箭頭”。
回到數據源主窗口,此時我們可以測試這個數據源的連接是否正常了。
如果數據源測試成功因該顯示如下信息
一、在WebSphere集羣環境中佈署企業級應用
我們將使用在(第十五天)IBM Websphere的安裝與優化中的第5.3小節的通過Ant腳本打包出來的EAR包來進行佈署。
應用程序->新建應用程序
下一步
下一步
這邊的作用域一定要按照如下圖所選啊。
同時要確保“服務器”(即Target)這欄中顯示的內容即有包含cell又有包含cluster。
如果只包含cell那麼:
1) 請勾選這個“選擇”前的checkbox
2) 然後在上部的“集羣和服務器”中選擇正確的即有cell又有cluster的下拉項,然後點應用,使得服務器(即Target)所顯示的內容即有cell又有cluster
下一步
綁定工程中的數據源與WASND中剛纔設置的數據源。
下一步
下一步下一步一直到出現最後確認信息的對話框,對[完成]按鈕
別忘了點“保存”啊,再提醒一下
消息輸出完成後點[確定]
一個企業級應用即ear包剛被佈署到集羣環境中,它的狀態是不可用的,請按照如下圖操作,使得該應用能夠被啓用。
一個企業級應用啓動成功後的顯示界面
此時我們來看:
D:\IBM\WebSphere\AppServer\profiles\AppSrv01\installedApps\shnlap93Cell01目錄下
看到沒有,自動已經佈署了這個ear。
那麼集羣間的節點是同步的,好!
我們再來看D:\IBM\WebSphere\AppServer\profiles\AppSrv02\installedApps\shnlap93Cell01目錄下
看到沒有,也已經被自動佈署了這個ear文件了。
集羣上發佈應用,節點間自動同步!!YEAH!!
我們可以試着使用一個IE,一個FireFox分別使用:
http://localhost:9080/cbbs與http://localhost:9081/cbbs 這兩個地址分別來試着登錄我們的應用,如果兩個地址的應用都能夠被成功登錄,那就說明我們的應用已經在集羣環境中發佈成功了。
一、整合IBMHTTPServer與WASND
我們應用已經在集羣環境中發佈成功了,下面我們來使用我們的IHS來集成我們的WASND吧,必盡在實際應用中我們對外只有一個網址即:http://localhost/cbbs,至於它背後有幾個AppServer對用戶來說應該是“透明”的。
通過服務器->服務器類型->web服務器,我們在右邊的操作面板中點[新建]
我們把我們這個web server命名爲demoweb。
把它安裝在節點:shnlap93Node01上吧(沒關係,隨便裝哪個節點都可以,它會同步另一個節點的配置的)。
下一步
下一步下一步直到完成,別忘了點“保存”。
然後我們得到下面這個Web Server,請啓動這個Web Server,怎麼啓動還記麼?系統菜單欄中去啓動它吧!!!
這是我們剛纔建立的一個Web Server。
確保我們的企業級應用程序佈署的作用域即Target正確。
應用程序->應用程序類型->WebSphere企業應用程序
用鼠標單擊我們剛纔佈署的這個應用
進入這個“管理模塊”
確保我們的作用域中含有集羣,在此我們這個集羣爲mycluster,要不然,你後一步生成的IHS的plugin的作用域只能夠用來連接單個WebSphere節點與IHS,而不是整個集羣+IHS的配置。
然後我們選中這個demoweb點[生成插件],點一下這個[傳播插件]我們可以看到在D:\deployment\HTTPServer\Plugins\config目錄下多了一個目錄叫demoweb目錄。
把這個demoweb目錄拷貝到我們的IBMHTTPServer的安裝目錄下去,如果有提示覆蓋請選擇“是,全部”。
如:
我們的HTTPServer是裝在D:\IBM\HTTPServer\
那麼我們就把:
D:\deployment\HTTPServer\Plugins\config\下的內容全部覆蓋式拷貝到
D:\IBM\HTTPServer\Plugins\config目錄內。
然後我們用純文本編輯器打開D:\IBM\HTTPServer\Plugins\config\demoweb\plugin-cfg.xml文件。
第一步:
把所有的d:\deployment\HTTPServer的字樣換成我們的真實的HTTPServer安裝的目錄,因爲我們的HTTPServer可能與我們的WAS是安裝在兩臺不同的機器上的。
如果你在生成plugins時使用的IHS的路徑和我們的HTTPServer所在的路徑是一致的,那麼你大可跳過這一步。
如我們這邊就需要:
把所有的d:\ deployment\HTTPServe替換成D:\IBM\HTTPServer。
第二步:
在D:\IBM\HTTPServer\Plugins\config\demoweb\plugin-cfg.xml文件內找到下面這一行:
<UriGroup Name="default_host_mycluster_URIs"> |
往下看,我們可以看到如下這些行:
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/*"/> </UriGroup> |
我們把先把下面這段註釋掉,因爲我們想讓所有的/cbbs下動態的內容給我們的WebSphere去解釋,所有的靜態html內容給我們的IHS解析,而不是像它默認這樣,所有的動態靜態全交給了WebSphere去解析,這不是我們想要的。因此我們把這一行註釋掉。
<!-- <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/*"/> --> |
然後我們在這一行下再增加如下幾行:
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/WEB-INF/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/*.action"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/servlet/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/*.jsp"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/*fckeditor/editor/filemanager/connectors/*.*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/cbbs/fckeditor/editor/filemanager/connectors/*"/> |
這個plugin.xml很像“(第十六天)IBM Websphere與IBM HttpServer的集成”中的那個plugin文件,對吧?
區別在於這邊的幾行語句,這個就是IBM HttpServer與WASND結合時的plugin描述語句。
<ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="mycluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60"> <Server CloneID="1756mq3p8" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="2" MaxConnections="-1" Name="shnlap93Node01_server1" ServerIOTimeout="60" WaitForContinue="false"> <Transport Hostname="shnlap93" Port="9080" Protocol="http"/> <Transport Hostname="shnlap93" Port="9443" Protocol="https"> <Property Name="keyring" Value="D:\IBM\HTTPServer\Plugins\config\demoweb\plugin-key.kdb"/> <Property Name="stashfile" Value="D:\IBM\HTTPServer\Plugins\config\demoweb\plugin-key.sth"/> </Transport> </Server> <Server CloneID="1756mq6cs" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="2" MaxConnections="-1" Name="shnlap93Node02_server1" ServerIOTimeout="60" WaitForContinue="false"> <Transport Hostname="shnlap93" Port="9081" Protocol="http"/> <Transport Hostname="shnlap93" Port="9444" Protocol="https"> <Property Name="keyring" Value="D:\IBM\HTTPServer\Plugins\config\demoweb\plugin-key.kdb"/> <Property Name="stashfile" Value="D:\IBM\HTTPServer\Plugins\config\demoweb\plugin-key.sth"/> </Transport> </Server> <PrimaryServers> <Server Name="shnlap93Node01_server1"/> <Server Name="shnlap93Node02_server1"/> </PrimaryServers> </ServerCluster> |
第三步:
打開D:\IBM\HTTPServer\conf目錄下的httpd.conf文件,最後幾行確保是以下內容:
LoadModule was_ap20_module "d:\IBM\HTTPServer\Plugins\bin\mod_was_ap20_http.dll" WebSpherePluginConfig "d:\IBM\HTTPServer\Plugins\config\demoweb\plugin-cfg.xml" <VirtualHost *:80> ServerName shnlap93 ServerAlias shnlap93 ServerAdmin admin@shnlap93 DocumentRoot d:/www DirectoryIndex index.htm index.html index.jsp <Directory "D:/www/cbbs"> Options None AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> |
第四步:
保存我們修改的httpd.conf文件,保存我們修改的plugins文件,重啓我們的IBM HTTPServer。
如果一切無誤,那麼我們先來書寫一個index.htm文件,並把它放在我們的d:\www\cbbs目錄下,其內容如下:
<html> <head> <META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://shnlap93/cbbs/index.jsp"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>loading</title> <body> Loading… </body> </html> |
然後我們打開一個IE,輸入: http://localhost/cbbs/,得到我們的應用的登錄界面,輸入相關的用戶名與密碼登錄後,進行一些操作,一切無誤:
然後我們再打開一個firefox,輸入: http://localhost/cbbs/,得到我們的應用的登錄界面,輸入另一個用戶名與密碼登錄後,進行一些操作,一切無誤:
我們看:
D:\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\server1目錄下的SystemOut.log文件
再看:
D:\IBM\WebSphere\AppServer\profiles\AppSrv02\logs\server1目錄下的SystemOut.log文件
這說明我們我們通過兩個不同的瀏覽器使用兩個用戶在訪問集羣環境時:
一個用戶名被分流到的AppSrv01中去;
另一個用戶在登錄時則被分流到了AppSrv02中去;
WebSphere的集羣+IBM HTTPServer集成成功,結束今天的教程。