Apache+JBoss配置多實例+負載均衡(mod_jk實現)
最近需要使用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 lib LoadModule jk_module modules/mod_jk.so # Where to find workers.properties JkWorkersFile conf/workers.properties # Where to put jk logs JkLogFile logs/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicates to send SSK KEY SIZE JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T" # Mount your applications JkMount /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/*=loadbalancer JkMountFile 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 properly JkShmFile logs/jk.shm # Add jkstatus for managing runtime data <Location /jkstatus/> JkMount status Order deny,allow Deny from all Allow from 127.0.0.1 </Location> </pre><span style="font-family:Courier New;font-size:12px;"><br />
4、修改conf/httpd.conf,在最下方加入如下配置(意思即為引用mod_jk.conf設置文件):</span>
#JBoss conf Include 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 requests
worker.list=loadbalancer,status# Load-balancing behaviour worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 worker.loadbalancer.sticky_session=1 # Status worker for managing load balancer worker.status.type=status # Node1 worker.node1.port=8009 worker.node1.host=127.0.0.1 worker.node1.type=ajp13 worker.node1.lbfactor=1 worker.node1.cachesize=10 # Node2 worker.node2.port=8109 worker.node2.host=127.0.0.1 worker.node2.type=ajp13 worker.node2.lbfactor=1 worker.node2.cachesize=10 </pre><br />
五、配置多實例的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& gt;的數值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 />(一定要注意順序,順序錯誤啟動會報錯的)</div><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></div>
(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
來自:http://blog.csdn.net/tylanbin/article/details/39960411本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關資訊
相關文檔
目錄