天天看點

通向架構師的道路(第十七天)IBM Websphere叢集探秘-WASND 一、IBMWebsphere叢集一、基本概念二、安裝WASND 一、使普通的應用程式伺服器與Dmgr聯合 一、在WASND中布署JDBC 一、在WebSphere叢集環境中布署企業級應用 一、整合IBMHTTPServer與WASND

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

Server1

叢集節點1

AppSrv01

server1

Server2

AppSrv02

為了測試友善,我們三個單元全部啟用“安全性管理”,使用者名與密碼均為“admin/password_1”。

我們在此使用的是WASND7.0。

解壓後進入相關目錄輕按兩下launch.exe來啟動WASND的安裝界面。

開始安裝。

下一步

填入相應的安裝目錄(簡單明了,不要裝在什麼c:\program files這樣的目錄名下),不要有空格,不要有特殊字元,JAVA很忌諱這個的。

我們不要讓安裝程式替我們做任何節點的配置,我們将在安裝完成後自己來手動配置,是以這邊選“無”。

在彈出對話框中選[是]

一直下一步,直到安裝開始。

裝完後,把“使用概要管理工具建立新的WebSphere Application概要檔案”選項前的勾去掉,并點選[完成]按鈕。

裝完WASND後我們在系統菜單中會得到如下的菜單項

我們選“概要管理工具”來建立我們的dmgr吧。

啟動概要管理工具

點[啟動概要管理工具]

點[建立]按鈕

選擇“管理”點[下一步]

選擇“Deployment Manager”選[下一步]

我們這邊選擇“進階概要檔案建立”。

[下一步]

我們建立一個概要名即profileName為:Dmgr的概要檔案,該概要檔案包含一個Deployment Manager Server, server名為dmgr。

下一步,然後輸入我們的admin console的使用者名與密碼,我們使用:

admin/password_1。

我們不希望這些建立後的單元随着我們系統的啟動而啟動,我們将在随後的教程中使用指令行來啟動這些單元節點。

我們最後review一下我們的dmgr的配置,下一步開始[建立]這個管理單元的節點吧

建立完成成後不要勾選“啟動第一步控制台”這個選項點[完成]按鈕即可。

回到“根據管理工具”主界面,我們可以看到我們剛才的步驟已經建立了一個管理單元節點了。

使用以下指令啟動我們的管理單元

看到“程序辨別為4980”的字樣後代表我們的管理單元已經啟動成功了。

接下來我們就要開始建立我們的叢集節點:AppSrv01與AppSrv02了。

依舊使用這個“管理概要工具”,點[建立]按鈕。

這次我們要選“應用程式伺服器”這個模闆來建立我們的叢集節點了。

在此我們建立我們的第一個叢集節點即:profileName為AppSrv01,server名為server1。

填入server名,我們這邊填server1

此處的使用者名與密碼還是用admin/password_1。

我們review一下我們的配置後下一步

和管理單元的建立一樣,我們不把AppSrv01設為随着作業系統的啟動而啟動,我們将手工啟動AppSrv01與AppSrv02。

最後确認一下,我們開始建立我們這個節點。

建立完了AppSrv01後我們依照AppSrv01的步驟再建立一個:

profileName為AppSrv02;

Server Name:為server1(這邊也是server1哦,看仔細了);

的“應用程式伺服器”

全部節點建立完成後對照着我們回過頭來,再來對照着上面的那個表格,來看下面這個清單。

我們依次啟動AppSrv01與AppSrv02來測試我們剛才的建立是否成功。

兩個server的節點起來後我們在IE位址欄分别用:

接下去我們就要開始我們的“叢集”了,即“聯合集點”的工作了。

進入: 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,依次類推。

當有任意一個“應用程式伺服器”被聯合入Dmgr後,該Dmgr即不再以server的形式運作了,而是以manager的形式來運作了,是以再關閉和啟動該Dmgr時不能用startServer指令了,而是要用startManager,

stopManager這對指令來控制該Dmgr的啟動與關閉了。

因為已經有任意一個“應用程式伺服器”被聯合入Dmgr後,該Dmgr即不再以server的形式運作了,而是以manager的形式來運作了,是以再關閉和啟動該Dmgr時不能用startServer指令了,而是要用startManager,

是以我們使用stopManager而不再是stopServer指令了。

使用:D:\IBM\WebSphere\AppServer\profiles\Dmgr\bin\startManager–username admin –password password_1來啟動我們的Dmgr。

AppSrv01與AppSrv02的啟動沒有先後順序,可以任意。

Dmgr, AppSrv01, AppSrv02都以叢集的方式啟動起來後我們還需要使用我們的admin console來把這些個節點真正組成我們想要的叢集。

一旦叢集組成後,我們就可以在admin console中start, stop我們的叢集了。

注:

要在admin console中使用GUI的方式start stop我們的叢集必須先以startMangaer的方試啟動我們的Dmgr,再以startNode的形式把各個節點啟動起來後才能利用admin

console中的GUI方式來控制叢集。

我們選擇左邊的伺服器類型->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吧。

在建立JDBC前我們先作一個小操作。

因為我們現在是叢集了,在一個單元的任何資源釋出都會被同步到另一個相同的叢集中的另一個節點,但是WASND預設是不會進行這個“節點間的同步”的,需要我們人工設定一下,按照下圖:

系統管理->控制台首選項中,勾選這個“與節點同步更改”的選項,并點選[應用]。

以後,無論什麼資源釋出,企業級應用程式釋出,節點間的應用就都會自動“同步”了。

這個和我們在(第十五天)IBM Websphere的安裝與優化中的5.2小節中的介紹一樣,沒有什麼特殊的,隻是在建立JDBC Provider時的作用域要選“mycluster”,而不能再是普通的Node了。

建立完我們的JDBC Provider後,我們還要建立我們的資料源,對吧?

别忘了給該資料源指定一個JAAS-J2C認證資料-見(第十五天)IBM Websphere的安裝與優化中的資料源的建立部分。

好,此時請不要急着點測試。

WASND7中有個BUG,即有時釋出完一個資源,并且同步到各個節點後并未馬上生效,而是需要實體上重新開機各個“同步的節點”才會生效。

是以,我們打開一個指令行:

第一步:依次stopAppSrv01與AppSrv02

第二步:依次startAppSrv01與AppSrv02

回到我們的admin console界面中。

1)  使用左邊的菜單項中的“WebSphere Application Server叢集”。

2)  勾選”mycluster”這個叢集

3)  點[啟動]按鈕

我們可以不斷的通過“狀态”旁的重新整理按鈕來監控這個叢集啟動狀态

正在啟動狀态

啟動成功狀态

啟動成功後該叢集mycluster中的各個節點的狀态都應該為“綠色箭頭”。

回到資料源主視窗,此時我們可以測試這個資料源的連接配接是否正常了。

如果資料源測試成功因該顯示如下資訊

我們将使用在(第十五天)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分别使用:

通過伺服器->伺服器類型->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"

  <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>

<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>

我們看:

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內建成功,結束今天的教程。