1. 程式人生 > >Jboss7集群配置說明

Jboss7集群配置說明

請求 doc tar.gz dex 檢驗 soc stand keep 2-0

Jboss7集群配置說明

第一節 前言

JBOSS7具有獨立模式(standalone)和域模式(domain)兩種運行方式。獨立模式(standalone)是單機器單進程方式,配置布署簡單,適用於一般單服務器項目。域模式(domain)是多機器多進程方式,配置稍復雜,適用於大型分布式項目。如果要集群布署項目,最簡單的方式就是使用域模式(domain)。

當使用域模式(domain)時,一臺機器上的一個JBOSS7應用(host)可以開啟多個Web Server,將一個JBOSS7應用(host)作為主控制服務器,就能控制管理其它機器上的JBOSS7應用(host),這樣理論上通過增加機器,我們就可以獲得無限個Web Server。把我們的Java項目通過主控制服務器布署到這些Web Server上,再通過httpd+mod_cluster,就能獲得集群功能。

mod_cluster是JBOSS開發的專門用於集群的httpd模塊,JBOSS7應該已內置有mod_cluster模塊並已配置好,JBOSS官網也提供了配置好mod_cluster的httpd項目,我們只需下載使用即可。

註意:JBOSS中文文檔很少,項目本身的版本更新又頻繁,因此初學者不易掌握,容易走入誤區。請根據本文的寫作順序,並下載指定的程序版本,確保程序版本匹配。調試環境除httpd+mod_cluster和jboss7獨立模式(standalone)可以在windows系統下以外,jboss7域模式(domain)一定要用Linux環境,否則無法調試通過

第二節 httpd+ mod_cluster安裝、配置、運行

作為初學者,最好先把httpd+mod_cluster調試成功後再往後進行,網上的資料多是針對熟悉linux、jboss、httpd的讀者,因此有不同程度的內容缺失,請按本文的介紹操作。

一 下載、安裝、運行httpd+mod_cluster

訪問http://www.jboss.org/mod_cluster/downloads/1-2-0-Final下載mod_cluster-1.2.0.Final-linux2-x64-ssl.tar.gz(windows下是mod_cluster-1.2.0.Final-windows-x86-ssl)。註意版本是1.2.0.Final,因為我們後面用的是jboss-as-7.1.1.Final,它內置的是mod_cluster-1.2.0.Final版本。還要註意這裏下載的是httpd+mod_cluster,也就是包含了httpd的程序,所以文件大小應該是8-9M,而不是只有幾百K,只包含幾個so文件的程序。網上一般介紹的是下載只包含幾個so文件的程序,然後修改linux自帶的httpd配置,但是根據測試發現linux自帶的httpd版本和我們需要的mod_cluster不匹配,無法配置成功。所以我們要下載包含完全httpd程序的mod_cluster文件。

在linux命令行下輸入tar –zxvf mod_cluster-1.2.0.Final-windows-x86-ssl解壓文件包,解壓後第一件事就是進入opt/jboss/httpd/sbin目錄輸入./installhome.sh(windows下是httpd-2.2\bin\installconf.bat),生成默認配置。註意這一步不能缺,如果不先生成默認配置,我們後面就沒法根據需要修改配置文件。

接著修改opt/jboss/httpd/httpd/conf/httpd.conf文件內容(可以用SSH Secure File Transfer Client把文件下載下來修改保存後再上傳上去):

Listen 8000改成

Listen 192.168.1.204:80

#ServerName localhost:8000 改成

ServerName 192.168.1.204:80

文件最下面的

<IfModule manager_module>

Listen 127.0.0.1:6666

ManagerBalancerName mycluster

<VirtualHost 127.0.0.1:6666>

<Location />

Order deny,allow

Deny from all

Allow from 127.0.0.1

</Location>

KeepAliveTimeout 300

MaxKeepAliveRequests 0

#ServerAdvertise on http://127.0.0.1:6666

AdvertiseFrequency 5

#AdvertiseSecurityKey secret

#AdvertiseGroup 224.0.1.105:23364

EnableMCPMReceive

<Location /mod_cluster_manager>

SetHandler mod_cluster-manager

Order deny,allow

Deny from all

Allow from 127.0.0

</Location>

</VirtualHost>

</IfModule>

改成

<IfModule manager_module>

Listen 192.168.1.204:6666

ManagerBalancerName mycluster

<VirtualHost *:6666>

<Location />

Order deny,allow

Deny from all

Allow from all

</Location>

KeepAliveTimeout 300

MaxKeepAliveRequests 0

#ServerAdvertise on http://127.0.0.1:6666

AdvertiseFrequency 5

AdvertiseSecurityKey 1234567890

#AdvertiseGroup 224.0.1.105:23364

EnableMCPMReceive

AllowDisplay On

<Location /mod_cluster_manager>

SetHandler mod_cluster-manager

Order deny,allow

Deny from all

Allow from all

</Location>

</VirtualHost>

</IfModule>

基本上改動的就是把127.0.0.1換成本機局域網IP,Listen192.168.1.204:80是監聽IP和端口,這樣httpd才會處理訪問訪問這個IP端口的請求,ServerName 192.168.1.204:80是對外的訪問地址,當服務器有DNS功能時,可以改成ServerName www.example.com:80,由DNS來解析域名的IP。註意,本機必須處在一個局域網內並分配有IP,否則可能調試不過。必須啟用AdvertiseSecurityKey並設置好密碼,沒有密碼jboss7.1.1.Final無法連接mod_cluster,這是網上多數資料沒有講到的。AllowDisplayOn是顯示詳細內容,開啟後才能看出有沒有連接成功的消息。

進入opt/jboss/httpd目錄運行./sbin/apachectl start(windows直接運行bin/httpd),註意不要直接進入sbin目錄再運行./apachectl start,因為這會運行linux自帶的httpd程序,而不是我們這裏的httpd(很奇怪的問題)。命令功能運行後應該沒有任何輸出就直接結束,如果有輸入信息,就可能表示有問題。成功啟動後,通過瀏覽器訪問http://192.168.1.204,正常情況下頁面上會顯示It works!文字,如果顯示的是apache的介紹頁面,則說明你啟動的可能是紅帽linux自帶的apache程序,而不是我們這裏使用的httpd程序。再訪問http://192.168.1.204:6666/mod_cluster_manager,註意是mod_cluster_manager而不是mod_cluster-manager,“_”和“-”的區別。出現這個畫面表示運行正常:

技術分享

二 用jboss7獨立模式(standalone)來檢驗mod_cluster的配置結果

訪問https://www.jboss.org/jbossas/downloads.html下載jboss-as-7.1.1.Final,

解壓縮後進入standalone\configuration目錄,刪除standalone.xml文件,將standalone-full-ha.xml重命名為standalone.xml文件,因為mod_cluster缺省配置都在standalone-full-ha.xml中,現在我們要使用standalone-full-ha.xml內的配置來運行jboss7。修改文件內容:

<serverxmlns="urn:jboss:domain:1.2">

改為

<server name="standalone-node1"xmlns="urn:jboss:domain:1.2">

<mod-cluster-configadvertise-socket="modcluster">

改為

<mod-cluster-configadvertise-socket="modcluster" advertise-security-key="1234567890">

<subsystemxmlns="urn:jboss:domain:web:1.1"default-virtual-server="default-host" native="false">

改為

<subsystemxmlns="urn:jboss:domain:web:1.1"default-virtual-server="default-host" native="false"instance-id="${jboss.node.name}">

<interfaces>

<interfacename="management">

<inet-addressvalue="${jboss.bind.address.management:127.0.0.1}"/>

</interface>

<interfacename="public">

<inet-addressvalue="${jboss.bind.address:127.0.0.1}"/>

</interface>

<interfacename="unsecure">

<inet-addressvalue="${jboss.bind.address.unsecure: 127.0.0.1}"/>

</interface>

</interfaces>

改為

<interfaces>

<interfacename="management">

<inet-addressvalue="${jboss.bind.address.management:192.168.1.204}"/>

</interface>

<interfacename="public">

<inet-addressvalue="${jboss.bind.address:192.168.1.204}"/>

</interface>

<interfacename="unsecure">

<inet-addressvalue="${jboss.bind.address.unsecure:192.168.1.204}"/>

</interface>

</interfaces>

name="standalone-node1"是添加Server名稱,advertise-security-key="1234567890"是在httpd配置中定義的AdvertiseSecurityKey,沒有這個則連接不上httpd+mod_cluster,instance-id="${jboss.node.name}"是JBOSS7.1.1.Final的bug,如果不添加此項,則mod_cluster無法找到Node節點名稱。

配置完成後,進入bin目錄,運行./ standalone.sh, 啟動後通過瀏覽器訪問http://192.168.1.204:6666/mod_cluster_manager,依然和剛才一樣並無變化。接下來要在服務器上布署項目才能看得出變化。先停止jboss7。

https://github.com/liweinan/cluster-demo下載cluster-demo-master.zip,解壓後將裏面的內容手工打包為cluster.war文件,cluster.war文件是一個很簡單的web項目,唯一不同的是項目內的web.xml文件中多了一行<distributable/>,這個標記會開啟jboss cluster功能。將cluster.war拷貝到standalone\deployments目錄中,再啟動./ standalone.sh。

註意觀察命令行,如果jboss7正常啟動mod_cluster功能,會出現如下信息:

18:58:34,855 INFO [org.jboss.modcluster.ModClusterService] (MSC service thread 1-1)Initializing mod_cluster 1.2.0.Final

這裏可以看出啟動了mod_cluster,且版本是1.2.0.Finals

18:58:36,449 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876:Starting deployment of "cluster.war"

18:58:36,949 INFO [stdout](pool-14-thread-1)

18:58:36,964 INFO [stdout](pool-14-thread-1)-------------------------------------------------------------------

18:58:36,964 INFO [stdout](pool-14-thread-1) GMS: address=standalone-node1/web, cluster=web, physicaladdress=192.168.1.204:55200

18:58:36,964 INFO [stdout](pool-14-thread-1)-------------------------------------------------------------------

這裏可以看出web server啟動mod_cluster功能,如果沒有,說明mod_cluster沒啟動。

上述信息只會在有java應用程序布署到jboss7後才會出現,也只有jboss7中的web server節點布署了java應用程序後才能促使jboss7啟動mod_cluster功能。

布署後再次訪問http://192.168.1.204:6666/mod_cluster_manager,應該會在原來的內容下有如下顯示:

技術分享

如果有,則表示httpd+mod_cluster配置無誤,可以接著往下進入域模式的配置管理了。如果沒有,說明httpd+mod_cluster或jboss配置有誤,二者沒能成功建立起聯系,需要檢查配置並修改重試,直到有上述顯示為止,才能說明httpd+mod_cluster是配置成功的。

第三節 JBOSS7域模式的配置、布署、運行

一 準備

1) 兩臺具有不同IP的linux服務器:主機master,IP:192.168.1.204,從機slave,IP:192.168.1.206,確保在一個局域網內可互相訪問

2) 下載jboss-as-7.1.1.Final.zip,分別解下縮布署到主機和從機上,命名為master和slave

二 賬號權限設置

1) master服務器端

i. 進入bin目錄,運行./add-user.sh,添加admin賬號

ii. 再次運行bin/add-user.bat,添加slave賬號

請註意,用戶名必須等於slave的host的名字。這意味著對於每個額外的host需要一個用戶。

三 修改master服務器缺省配置

1) 修改domain/configuration/host.xml

2) 修改domain/configuration/domain.xml

四 修改slave服務器缺省配置

1) 修改domain/configuration/host.xml

添加server-identities到security-realm,用於從機嘗試連接到主機時的身份驗證。因為slave服務名設置為‘slave‘,所以我們應該用‘slave‘用戶的密碼。加密值屬性中的‘MTIzMTIz =‘,是‘123123’的Base64編碼。可以通過使用base64計算器來獲得http://www.webutils.pl/index.php?idx=base64。在域控制器部分中<domain-controller>,我們還需要添加安全領域屬性security-realm="ManagementRealm"

五 試運行

現在一切都是為兩個主機設置在域模式下運行。試著在兩個主機上分別運行./domain.sh。如果一切都好,我們可以看到master上的日誌顯示:

這表明master和slave都啟動成功,且相互已經建立了聯系。

六 布署測試程序

1) 通過瀏覽器訪問http://192.168.1.204:9990,使用前名創建的賬號:admin,密碼:123123。192.168.1.204是主控制端host所在地址,我們用這個host來控制其他的host。進入後可以看到master和slave都有三個server,分別是

技術分享

我們要把cluster.war布署在server-three上,因為這個server屬於other-server-group,在domain.xml中可以看到other-server-group用的profile是“full-ha”,是專用於mod_cluster的配置。

進入“Manage Deployments”頁面,點擊“Add Content”在右上角。然後我們應該選擇cluster.war文件,遵循指令將其添加到我們的內容庫。現在我們可以看到cluster.war已經添加。接下來,我們點擊“添加組”按鈕,並添加cluster.war到“other-server-group”,然後單擊“保存”。

技術分享

註意,在Server Active啟動的狀態下,是無法布署war項目的,因此布署前確保server-three處於關閉狀態。

接下來,啟動master和slave的server-three,觀察命令行,會出現如下信息:

18:58:34,855 INFO [org.jboss.modcluster.ModClusterService](MSC service thread 1-1) Initializing mod_cluster 1.2.0.Final

……

18:58:36,449 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876:Starting deployment of "cluster.war"

18:58:36,949 INFO [stdout](pool-14-thread-1)

18:58:36,964 INFO [stdout](pool-14-thread-1)-------------------------------------------------------------------

18:58:36,964 INFO [stdout] (pool-14-thread-1)GMS: address=master /web, cluster=web, physical address=192.168.1.204:55200

18:58:36,964 INFO [stdout](pool-14-thread-1)-------------------------------------------------------------------

這裏可以看出web server啟動mod_cluster功能,如果沒有,說明mod_cluster沒啟動。

啟動後再訪問http://192.168.1.204:6666/mod_cluster_manager,應該會在原來的內容下有類似如下內容

技術分享

這表明httpd+cluster和master,slave成功建產了聯系,再訪問http://192.168.1.204/cluster/,應該會看到httpd+mod_cluster自動將請求轉發至master或slave其中一臺服務器上,會顯示如下內容

技術分享

一切順利的話,我們可以測試一下,把master或slave不管哪一個host停掉,http://192.168.1.204/cluster/依然會繼續運行,httpd+mod_cluster會自動將請求轉發至仍然運行的host服務器上,並能轉移session會話(我試過slave斷了,session能轉發到master,但master斷了,session無法轉發到slave,仍有待解決)。

最後,可以修改host.xml文件,將<servername="server-three" group="other-server-group"auto-start="false">

改為

<server name="server-three"group="other-server-group" auto-start="true">

使server-three自動啟動。

Jboss7集群配置說明