1. 程式人生 > >搭建高效能Jboss負載均衡叢集

搭建高效能Jboss負載均衡叢集

負載均衡叢集是由兩臺或者兩臺以上的伺服器組成。分為前端負載排程和後端服務兩個部分。負載排程部分負載把客戶端的請求按照不同的策略分配給後端服務節點,而後端節點是真正提供營養程式服務的部分。與雙機熱備不同的是,負載均衡叢集中,所有的後端節點都處於活動動態,它們都對外提供服務,分攤系統的工作負載。

負載均衡叢集可以把一個高負荷的應用分散到多個節點共同完成,適用於業務繁忙、大負荷訪問的應用系統。負載均衡叢集的一大優點除了將大負荷進行分攤解決效能問題之外,他還有極強的出錯互補機制,每一個提供服務的節點在出現問題之後宕機之後,排程系統都會自動將這臺宕機機器剔除,當該節點重新啟動恢復功能之後,排程系統又會將其加入到叢集中,而這一切,對使用者來說是完全透明的。下圖顯示的就是負載均衡叢集的基本結構。


說完叢集的基本原理和結構之後我們來搭建一個JBoss叢集,主要分為以下幾個步驟:

一、      準備所需元件:

a)    Apache伺服器。我選用的是apache_2.2.3-win32-x86-no_ssl.msi

b)    mod_jk-apache-2.2.3.so檔案。該檔案的作用是起分發作用

c)    JBoss伺服器。我用的JBoss伺服器是JBOSS 5.1.0GA

二、      安裝安裝伺服器。

a)    安裝Apache伺服器(建議選非系統盤)。安裝好後將下載好的mod_jk-apache-2.2.3.so檔案複製到%APACH_HOME%/modules資料夾下。

b)    安裝JBoss比較簡單,直接將壓縮包解壓至相應的安裝位置即可。

三、      修改相關配置檔案。

a)    在Apache安裝路徑下找到conf資料夾,在該資料夾中找到httpd.conf檔案,在該檔案的最後位置新增Include conf/mod_jk.conf。

b)    在conf資料夾下新建mod_jk.conf檔案,內容如下:

    LoadModule jk_module modules/mod_jk-apache-2.2.3.so
    # Where to find workers.properties
    JkWorkersFile conf/workers.properties

    # where to find the log file
    JkLogFile logs/mod_jk.log
    # set the log level  set the log level
    JkLogLevel info    
    # map to the status server
    JkMount /private/admin/mystatus mystatus
    # router the request to the right host
    JkMount /* balance

  (c)同樣是在conf資料夾中新建workers.properties檔案,檔案內容為:
    # define list of workers that will be used
    # for mapping requests
    worker.list=balance,mystatus

    # Define Node1
    worker.node1.port=11009
    worker.node1.host=192.168.24.246
    worker.node1.type=ajp13
    worker.node1.lbfactor=1
    worker.node1.socket_timeout=30
    worker.node1.socket_keepalive=1

    # Define Node2
    worker.node2.port=12009
    worker.node2.host=192.168.24.247
    worker.node2.type=ajp13
    worker.node2.lbfactor=1
    worker.node2.socket_timeout=30
    worker.node2.socket_keepalive=1

    # Define Node3
    worker.node3.port=13009
    worker.node3.host=192.168.24.245
    worker.node3.type=ajp13
    worker.node3.lbfactor=1
    worker.node3.socket_timeout=30
    worker.node3.socket_keepalive=1

    # Load-balancing behaviour
    worker.balance.type=lb
    worker.balance.balance_workers=node1,node2,node3
    worker.balance.sticky_session=1

    # Status worker for managing load balancer
    worker.mystatus.type=status

該檔案用於定義伺服器節點,在該檔案中我定義了三個節點,node1,node2,node3,也就意味著在我的jboss叢集中有三臺jboss伺服器對外提供服       務。如上內容中host表示jboss伺服器所在的電腦的IP,port為jboss伺服器AJP所監聽的埠號,lbfactor表示該伺服器節點在該叢集中的權重,該值越大,Apache伺服器將請求分發至該臺JBoss上的機率越大。

e)在部署Web應用時,需要在應用程式的web.xml中加入<distributable/>節點,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <display-name>Welcome to JBoss</display-name>
    <description>
        Welcome to JBoss
    </description>
    <distributable/>

</web-app>

至此Apache伺服器和各Jboss節點伺服器配置完畢,順序啟動Apache和各個Jboss節點,在瀏覽器中輸入http://192.168.24.245:8011/aaa.war進行訪問,我們可以看到自己定義的訪問頁面(各Jboss節點中部署的aaa.war包中的index.jsp頁面裡的內容不一樣來做區分),進行重新整理可以看到Apache在不斷的進行切換。