Apache+JBoss配置多執行個體+負載平衡(mod_jk實現)

來源:互聯網
上載者:User

標籤:負載平衡   apache   jboss   叢集   執行個體   

最近需要使用JBoss設定項目的負載平衡(最好能有多執行個體保證並發量),經過1整天的搜尋和實踐,最終終於成功,在此記錄下來,以便他人和自己日後參考。

系統內容:
    Windows Server 2003
軟體環境:
    JDK 7 (Update 55)
    VC9 (http://www.microsoft.com/download/en/details.aspx?id=5582)
    Apache httpd 2.2.29 (http://www.apachelounge.com/download/additional/)
    JBoss-5.1.0.GA (http://jbossas.jboss.org/downloads)
    注意:盡量使用規定版本的程式,尤其是JBoss(版本差異太大),否則可能會出現未知的錯誤

一、安裝JDK及環境變數配置(略)
二、解壓httpd伺服器(進行初始化即可)
    注意:該httpd解壓後,需要手動修改conf/httpd.conf設定檔中的部分內容(如:ServerName、DocumentRoot等)
三、解壓JBoss伺服器(暫時不配置)
四、配置httpd伺服器
    1、下載mod_jk.so模組(http://tomcat.apache.org/download-connectors.cgi),使用對應httpd伺服器的版本檔案,本人這裡使用的是mod_jk-1.2.31-httpd-2.2.3.so(http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/)
    2、為httpd伺服器添加mod_jk模組,將mod_jk-1.2.31-httpd-2.2.3.so改名為mod_jk.so,放入modules檔案夾下即可
    3、在conf檔案夾下添加檔案mod_jk.conf(主要是載入剛剛的mod_jk模組,並做配置):
# Load mod_jk module# Specify the filename of the mod_jk libLoadModule jk_module modules/mod_jk.so# Where to find workers.propertiesJkWorkersFile conf/workers.properties# Where to put jk logsJkLogFile logs/mod_jk.log# Set the jk log level [debug/error/info]JkLogLevel info# Select the log formatJkLogStampFormat "[%a %b %d %H:%M:%S %Y]"# JkOptions indicates to send SSK KEY SIZEJkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories# JkRequestLogFormatJkRequestLogFormat "%w %V %T"# Mount your applicationsJkMount /application/* loadbalancer# You can use external file for mount points.# It will be checked for updates each 60 seconds.# The format of the file is: /url=worker# /examples/*=loadbalancerJkMountFile conf/uriworkermap.properties# Add shared memory.# This directive is present with 1.2.10 and# later versions of mod_jk, and is needed for# for load balancing to work properlyJkShmFile logs/jk.shm# Add jkstatus for managing runtime data<Location /jkstatus/>JkMount statusOrder deny,allowDeny from allAllow from 127.0.0.1</Location>

    4、修改conf/httpd.conf,在最下方加入如下配置(意思即為引用mod_jk.conf設定檔案):
#JBoss confInclude conf/mod_jk.conf

    5、在conf檔案夾下增加uriworkermap.properties(負載平衡的訪問路徑配置,在mod_jk.conf提及):
/*=loadbalancer

    6、在conf檔案夾下增加workers.properties(負載平衡的伺服器節點配置,在mod_jk.conf提及):
        注意:worker.node1.port和worker.node2.port是伺服器的ajp連接埠,這裡兩個節點的連接埠相隔100,是因為後邊在JBoss設定中,多執行個體的連接埠位移量設定了100。
# Define list of workers that will be used for mapping requestsworker.list=loadbalancer,status# Load-balancing behaviourworker.loadbalancer.type=lbworker.loadbalancer.balance_workers=node1,node2worker.loadbalancer.sticky_session=1# Status worker for managing load balancerworker.status.type=status# Node1worker.node1.port=8009worker.node1.host=127.0.0.1worker.node1.type=ajp13worker.node1.lbfactor=1worker.node1.cachesize=10# Node2worker.node2.port=8109worker.node2.host=127.0.0.1worker.node2.type=ajp13worker.node2.lbfactor=1worker.node2.cachesize=10

五、配置多執行個體的JBoss伺服器
    由於是多執行個體(多進程,不同連接埠),所以我們需要使用兩份一樣的部署應用,我們先將JBoss解壓後的server/all檔案夾複製兩份,分別為server/node1檔案夾和server/node2檔案夾。
    兩個檔案夾即為兩個執行個體啟動的部署應用,現在開始詳細的配置:
    1、node1與node2類似的配置:
        (1)修改server/node1(node2)/deploy/jbossweb.sar/server.xml設定檔:
            A、兩個${jboss.bind.address}均替換為${0.0.0.0}(出於安全性考慮,JBoss會綁定伺服器IP,設定為0.0.0.0將解除這一綁定的限制)
            B、將node1中<Engine name="jboss.web" defaultHost="localhost">修改為<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">,node2做對應修改(表示不同的節點,節點名稱需要和httpd伺服器配置workers.properties檔案中的節點名稱一致)
        (2)修改server/node1(node2)/deploy/messaging/messaging-service.xml設定檔:
            A、將node1中<attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:0}</attribute>的數值0修改為1,node2中對應位置修改為2(該數字表示叢集時的id,不可重複)
        (3)修改server/node1(node2)/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml檔案:
            A、將如下四段解除配置,並修改false為true,修改結果(用於session同步):
<property name="useJK">true</property><property name="useSessionPassivation">true</property><property name="passivationMaxIdleTime">-1</property>  <property name="passivationMinIdleTime">-1</property>

        (4)修改server/node1(node2)/conf/bootstrap/profile.xml設定檔(在parameter標籤處加入class="java.io.File",避免啟動時報錯):
<bean name="AttachmentStore" class="org.jboss.system.server.profileservice.repository.AbstractAttachmentStore"><constructor><parameter class="java.io.File"><inject bean="BootstrapProfileFactory" property="attachmentStoreRoot" /></parameter></constructor>...</bean>

    2、node2的不同配置:
        (1)修改server/node2/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml設定檔:
            A、JBoss啟動的連接埠設定位移量,由0修改為100(這裡就是httpd伺服器中ajp連接埠間隔100的原因):
<bean name="PortsDefaultBindings"  class="org.jboss.services.binding.impl.ServiceBindingSet">    <constructor>        ...        <parameter>100</parameter>        ...    </constructor></bean>

六、項目中session同步說明:
    1、上述的JBoss已經提及了session的同步,並修改了war-deployers-jboss-beans.xml的配置;
    2、修改項目自身的配置(以server/node1(node2)/deploy/ROOT.war為例)
        (1)修改WEB-INF/web.xml檔案,加入<distributable />(一定要注意順序,順序錯誤啟動會報錯的)
<web-app>  <display-name>Welcome to JBoss</display-name>  <description>     Welcome to JBoss  </description>  <distributable />  <servlet>    <servlet-name>Status Servlet</servlet-name>    <servlet-class>org.jboss.web.tomcat.service.StatusServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>Status Servlet</servlet-name>    <url-pattern>/status</url-pattern>  </servlet-mapping></web-app>

        (2)在WEB-INF檔案夾下添加jboss-web.xml設定檔(JBoss的特殊配置,同web.xml一同載入)
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"><jboss-web>    <context-root>/</context-root>    <replication-config>        <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>        <replication-granularity>SESSION</replication-granularity>        <replication-field-batch-mode>True</replication-field-batch-mode>    </replication-config></jboss-web>

七、測試
    1、分別在server/node1(node2)/deploy/ROOT.war下添加test檔案夾,放入測試jsp(附件有下載);
    2、啟動Apache httpd伺服器(通過命令或製作Windows服務均可);
    3、啟動兩個JBoss執行個體:
        (1)在JBoss的bin檔案夾下,添加兩個bat批處理(啟動設定好的node1和node2兩個JBoss執行個體):
            run-node1.bat,檔案內容(右鍵用記事本編輯即可):
                run.bat -c node1
            run-node2.bat,檔案內容(右鍵用記事本編輯即可):
                run.bat -c node2
        (2)依次雙擊即可啟動兩個JBoss執行個體(啟動較慢,需等待node1啟動後再啟動node2)
    4、訪問測試頁面:
        (1)啟動瀏覽器1,訪問http://localhost/test/index.jsp,如下:

        (2)啟動瀏覽器2,訪問http://localhost/test/index.jsp,如下:

        說明:通過sessionid即可看出進行了負載平衡
八、附註
    1、由於每個瀏覽器每次的訪問只有一個session,而且每個瀏覽器每次session會話中,並未發現節點的變化,所以session的同步並未測試;
    2、上述中提及的很多配置都沒有詳細的說明(如conf設定和一個設定檔),如需要詳細解釋,請自行搜尋。

附件:test.zip

Apache+JBoss配置多執行個體+負載平衡(mod_jk實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.