1. 程式人生 > >jboss-as-7.1.0.CR1b域集群和會話復制環境部署

jboss-as-7.1.0.CR1b域集群和會話復制環境部署

導致 security head process 現在 窗口 不同的 int 模式

前言:

我想向您展示如何在域模式下設置JBoss AS7並啟用群集,以便我們可以在節點之間獲得HA(高可用性)和會話復制
我們需要準備兩個主機(或虛擬主機)來進行實驗。我們將使用以下兩個主機:

在它們上安裝centos6.5(另外的linux版本也可以使用,但我將在本文中使用centos6.5)
確保主機位於同一本地網絡中
確保它們可以通過不同的TCP / UDP端口相互訪問(最好在實驗期間關閉防火墻並禁用SELinux,否則會導致網絡問題)。
主節點和從節點都將運行AS7,master將作為域控制器運行,slave將在master的域管理下運行。
master
IP:192.168.98.129
domain controller

mod_cluster+httpd

slave
IP:192.168.98.128
技術分享圖片

目的:

1.將一個演示項目部署到域中,並驗證項目是否由域控制器部署到主服務器和從服務器。因此,我們可以確認域管理為我們提供了單點管理單個域中多個主機的部署
2.我們將訪問群集URL並驗證httpd是否已將請求分發給as7主機之一。這有助於我們確認群集正常運行。
3.我們將嘗試向集群發出請求,如果請求被轉發到master as7,我們就會在master上終止as7進程。之後,我們將繼續請求群集,我們應該看到請求已轉發到slave,但會話尚未丟失。我們的目標是驗證HA是否正常運行並且會話被復制。

整個拓撲圖:

技術分享圖片

好了,前面這些是我們要準備的環境和要達成的目的,現在我們將一步一步的搭建起這個環境

首先我們應該從網站下載AS7:

http://www.jboss.org/jbossas/downloads/

我下載的版本是7.1.0.CR1b,請不要使用此版本之前的版本,否則在群集模式下運行時您將遇到此錯誤:

https://issues.jboss.org/browse/AS7-2738

下載完成後

jboss-as-7.1.0.CR1b.tar.gz

然後我將包解壓縮到master並運行:

tar -zxvf jboss-as-7.1.0.CR1b.tar.gz
cd jboss-as-7.1.0.CR1b/bin
./domain.sh

如果一切正常,我們應該看到AS7在域模式下成功啟動:

jboss-as-7.1.0.CR1b/bin$ ./domain.sh

JBoss Bootstrap Environment

JBOSS_HOME: /Users/weli/Downloads/jboss-as-7.1.0.CR1b

JAVA: /Library/Java/Home/bin/java

JAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

=========================================================================
...

[Server:server-two] 16:59:55,870 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS 7.1.0.CR1b "Flux Capacitor" started in 2499ms - Started 148 of 214 services (64 services are passive or on-demand)

現在退出as7,讓我們在slave主機上重復相同的步驟。最後我們在主服務器和從服務器上運行AS7,然後我們可以進入下一步。

域配置:

master:

進入到AS7目錄

vi domain/configuration/host.xml
此文件中接口的默認設置如下:

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
    </interface>
    <interface name="public">
       <inet-address value="${jboss.bind.address:127.0.0.1}"/>
    </interface>
</interfaces>

我們需要將地址更改為管理接口,以便slave可以連接到master。公共接口允許應用程序通過非本地HTTP訪問,而不安全的接口允許遠程RMI訪問。我的主人的IP地址是192.168.98.129,所以我將配置更改為:

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:192.168.98.129}"/>
    </interface>
    <interface name="public">
       <inet-address value="${jboss.bind.address:192.168.98.129}"/>
    </interface>    
    <interface name="unsecured">
       <inet-address value="192.168.98.129" />    
    </interface>
</interfaces> 

從節點Slave:

現在我們將在slave上設置接口。首先,我們需要從slave中刪除domain.xml,因為slave不會充當域控制器並且在master的管理下。我只是重命名domain.xml,因此它不會被as7處理:

mv domain/configuration/domain.xml domain/configuration/domain.xml.move

然後讓我們編輯host.xml。與master上的步驟類似,首先打開host.xml:

vi domain/configuration/host.xml

我們將在slave上使用的配置有點不同,因為我們需要讓slave as7連接到master as7。首先,我們需要設置主機名。我們從以下位置更改name屬性:

<host name="master" xmlns="urn:jboss:domain:1.1">

改變成

<host name="slave" xmlns="urn:jboss:domain:1.1">

然後我們需要修改域控制器部分,以便slave as7可以連接到master的管理端口:


<domain-controller>
   <remote host="10.211.55.7" port="9999"/>
</domain-controller>

最後,我們還需要配置interfaces部分並將管理端口公開到公共地址:


<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:192.168.98.128}"/>
    </interface>
    <interface name="public">
       <inet-address value="${jboss.bind.address:192.168.98.128}"/>
    </interface>
    ~~<interface name="unsecured">       
       <inet-address value="10.211.55.2" />    
    </interface>~~
</interfaces>

如果現在在主服務器和從服務器上都啟動as7,您將看到無法啟動從服務器as7,並顯示以下錯誤:

[Host Controller] 20:31:24,575 ERROR [org.jboss.remoting.remote] (Remoting "endpoint" read-1) JBREM000200: Remote connection failed: javax.security.sasl.SaslException: Authentication failed: all available authentication mechanisms failed
[Host Controller] 20:31:24,579 WARN [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010900: Could not connect to remote domain controller 10.211.55.7:9999
[Host Controller] 20:31:24,582 ERROR [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010901: Could not connect to master. Aborting. Error was: java.lang.IllegalStateException: JBAS010942: Unable to connect due to authentication failure.

因為我們沒有在主設備和從設備之間正確設置認證。現在讓我們繼續吧:

主節點master:

在bin目錄中有一個名為add-user.sh的腳本,我們將使用它將新用戶添加到用於域管理身份驗證的屬性文件中:

./add-user.sh

Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : admin
Password : 123123
Re-enter Password : 123123
The username ‘admin‘ is easy to guess
Are you sure you want to add user ‘admin‘ yes/no? yes
About to add user ‘admin‘ for realm ‘ManagementRealm‘
Is this correct yes/no? yes
Added user ‘admin‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/standalone/configuration/mgmt-users.properties‘
Added user ‘admin‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/domain/configuration/mgmt-users.properties‘

如上所示,我們創建了一個名為“admin”的用戶,其密碼為“123123”。然後我們添加另一個名為‘slave‘的用戶:

./add-user.sh

Enter the details of the new user to add.
Realm (ManagementRealm) :
Username : slave
Password : 123123
Re-enter Password : 123123
About to add user ‘slave‘ for realm ‘ManagementRealm‘
Is this correct yes/no? yes
Added user ‘slave‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/standalone/configuration/mgmt-users.properties‘
Added user ‘slave‘ to file ‘/home/weli/projs/jboss-as-7.1.0.CR1b/domain/configuration/mgmt-users.properties‘

從節點Slave

在slave中,我們需要配置host.xml進行身份驗證。我們應該更改security-realms部分如下:

<security-realms>
   <security-realm name="ManagementRealm">
       <server-identities>
           <secret value="MTIzMTIz="/>
       </server-identities>
       <authentication>
           <properties path="mgmt-users.properties" relative-to="jboss.domain.config.dir"/>
       </authentication>
   </security-realm>
</security-realms>

我們已將服務器標識添加到security-realm中,當slave嘗試連接到master時,它用於主機身份驗證。因為slave的主機名設置為‘slave‘,所以我們應該在master上使用‘slave‘用戶的密碼。在secret value屬性中,我們有‘MTIzMTIz =‘,它是‘123123‘的base64代碼。您可以使用base64計算器生成此值,例如http://www.webutils.pl/index.php?idx=base64中的計算器 。
然後在域控制器部分我們還需要添加security-realm屬性:


<domain-controller>
   <remote host="192.168.98.129" port="9999" security-realm="ManagementRealm"/>
</domain-controller>

試運行

現在一切都設置為兩個主機在域模式下運行。讓我們通過在兩臺主機上運行domain.sh來啟動它們。如果一切順利,我們應該在登錄master中看到以下內容:

[Host Controller] 21:30:52,042 INFO [org.jboss.as.domain] (management-handler-threads - 1) JBAS010918: Registered remote slave host slave

部署測試war

測試包我已經打好存放在百度雲盤中,也可以自行打包,需要的給我留言即可。

git clone git://github.com/liweinan/cluster-demo.git

mvn package

它將生成cluster-demo.war。然後我們需要將戰爭部署到域中。首先,我們應該訪問master上的http管理控制臺(因為master充當域控制器):

http://192.168.98.129:9990

它會彈出一個窗口,提示您輸入帳戶名和密碼; 我們可以使用我們剛剛添加的“管理員”帳戶。登錄後,我們將看到“服務器實例”窗口。默認情況下,列出了三個服務器,它們是:

服務器一
服務器三
服務器二
我們可以看到server-one和server-two處於運行狀態,它們屬於main-server-group; server-three處於空閑狀態,屬於other-server-group。

所有這些服務器和服務器組都在master as7上的domain.xml中設置。我們需要更改的是domain.xml中的“other-server-group”:
我們只需要點擊選擇server-three,再點擊右下角的start就可以啟動這個服務器

技術分享圖片

從服務器節點也是一樣需要啟動server-three
技術分享圖片

然後開始部署war包,點擊界面左下角的部署項目欄:
技術分享圖片

請註意我們有兩個主機參與此服務器組,因此項目現在應該同時部署在主服務器和從服務器中 - 這就是域管理的強大功能。

現在讓我們通過嘗試從主服務器和從服務器訪問集群演示來驗證這一點。他們現在都應該工作:
叢節點:
技術分享圖片

主節點:
技術分享圖片

現在我們已完成項目部署並查看域控制器的用法,然後我們將繼續使用這兩個主機來建立集群

為什麽端口號是8330而不是8080?請檢查master和slave上host.xml中的設置:

<server name="server-three" group="other-server-group" auto-start="false">
    <!-- server-three avoids port conflicts by incrementing the ports in
         the default socket-group declared in the server-group -->
    <socket-bindings port-offset="250"/>
</server>

端口偏移量設置為250,因此8080 + 250 = 8330

現在我們退出master和slave上的as7進程。我們在host.xml配置上還有一些工作要做。打開master的host.xml,並對服務器部分進行以下修改:

<server name="server-three" group="other-server-group" auto-start="false">
    <!-- server-three avoids port conflicts by incrementing the ports in
         the default socket-group declared in the server-group -->
    <socket-bindings port-offset="250"/>
</server>

修改為

<server name="server-three" group="other-server-group" auto-start="true">
    <!-- server-three avoids port conflicts by incrementing the ports in
         the default socket-group declared in the server-group -->
    <socket-bindings port-offset="250"/>
</server>

我們已將auto-start設置為true,因此我們不需要在每次重啟時都在管理控制臺中啟用它。現在打開slave的host.xml,並修改server-three部分:


<server name="server-three-slave" group="other-server-group" auto-start="true">
    <!-- server-three avoids port conflicts by incrementing the ports in
         the default socket-group declared in the server-group -->
    <socket-bindings port-offset="250"/>
</server>

除了將auto-start設置為true之外,我們還將‘server-three‘重命名為‘server-three-slave‘。我們需要這樣做,因為mod_cluster將無法在單個服務器組中註冊具有相同名稱的主機。這會導致名稱沖突。

完成上述配置後,讓我們重新啟動兩個as7主機並繼續進行群集配置。
集群配置:
們將在master上使用mod_cluster + apache httpd作為我們的集群控制器。因為AS7已配置為支持mod_cluster開箱即用,所以這是最簡單的方法。
首先,我們需要確保安裝了httpd:

yum install httpd -y

然後我們需要從其網站下載更新版本的mod_cluster:

http://www.jboss.org/mod_cluster/downloads

我下載的版本是(這裏要註意自己的系統是64位還是32位):
我這裏的系統版本是x64位所以下載這個

http://downloads.jboss.org/mod_cluster/1.1.3.Final/mod_cluster-1.1.3.Final-linux2-x64-so.tar.gz

x86

http://downloads.jboss.org/mod_cluster/1.1.3.Final/mod_cluster-1.1.3.Final-linux2-x86-so.tar.gz

然後我們將其提取到:

/etc/httpd/modules 目錄中

然後我們編輯httpd.conf:

註釋以下三行

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so

新增以下四行

LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

然後我們在httpd.conf的底部進行必要的配置:

# This Listen port is for the mod_cluster-manager, where you can see the status of mod_cluster.
# Port 10001 is not a reserved port, so this prevents problems with SELinux.
Listen 192.168.98.129:10001
# This directive only applies to Red Hat Enterprise Linux. It prevents the temmporary
# files from being written to /etc/httpd/logs/ which is not an appropriate location.
MemManagerFile /var/cache/httpd

<VirtualHost  192.168.98.129:10001>

  <Directory />
    Order deny,allow
    Deny from all
    Allow from 192.168.98.
  </Directory>

  # This directive allows you to view mod_cluster status at URL http://10.211.55.4:10001/mod_cluster-manager
  <Location /mod_cluster-manager>
   SetHandler mod_cluster-manager
   Order deny,allow
   Deny from all
   Allow from 192.168.98.
  </Location>

  KeepAliveTimeout 60
  MaxKeepAliveRequests 0

  ManagerBalancerName other-server-group
  AdvertiseFrequency 5

</VirtualHost>

有關mod_cluster配置的更多詳細信息,請參閱此文檔:

http://docs.jboss.org/mod_cluster/1.1.0/html/Quick_Start_Guide.html

測試:

service httpd start

訪問集群

http://10.211.55.7/cluster-demo/put.jsp

技術分享圖片

我們應該看到請求從as7日誌分發到其中一個主機(主機或從機).

[Server:server-three-slave] 09:42:43,454 INFO [stdout] (http-192.168.98.128-192.168.98.128-8330-3) Putting date now
現在我使用管理界面斷開master as7。在上角選擇“運行時”和服務器“主”。

選擇“server-three”並按下停止按鈕,活動圖標應該更改。

使用系統命令殺死服務器會導致Host-Controller立即重啟實例!

然後等待幾秒鐘並訪問集群:

http://192.168.98.129/cluster-demo/get.jsp

技術分享圖片

[Server:server-three-slave] 09:43:14,692 INFO [stdout] (http-192.168.98.128-192.168.98.128-8330-6) Getting date now

從get.jsp我們應該看到,我們得到的時間與‘put.jsp‘相同。因此,事實證明會話已正確復制到slave。

到此整個jboss域集群和回話復制環境搭建完成,感謝大家瀏覽。有問題請指正,謝謝!

jboss-as-7.1.0.CR1b域集群和會話復制環境部署