?????? 如果要實(shí)現(xiàn)JBoss各節(jié)點(diǎn)的負(fù)載均衡就需要在集群前置負(fù)載均衡器,均衡器是所有請(qǐng)求的入口,將請(qǐng)求按照定義的負(fù)載規(guī)則分配到各節(jié)點(diǎn)。負(fù)載均衡器可以實(shí)現(xiàn)故障轉(zhuǎn)移和狀態(tài)同步。我選擇目前比較流行的Apache Http Server作為集群中的負(fù)載均衡器,通過(guò)mod_jk插件與Jboss節(jié)點(diǎn)通訊。
?
1.安裝Apache Http Server
?
?
解壓文件:
[root@webserver local]# tar -zxvf httpd-2.2.4.tar.gz
?
切換到解壓目錄執(zhí)行編譯
[root@webserver httpd-2.2.4]#./configure -prefix=/usr/local/apache2 -enable-so -enable-setenvif=shared -enable-rewrite=shared -enable-proxy=shared -enable-auth-anon -enable-file-cache=shared -enable-cache=shared -enable-disk-cache=shared -enable-mem-cache=shared -with-mpm=prefork?
[root@webserver httpd-2.2.4]#make
[root@webserver httpd-2.2.4]#make install
?
增加apache用戶組
[root@webserver httpd-2.2.4]#groupadd apache
[root@webserver httpd-2.2.4]#useradd apache –g apache
?
修改apache2目錄用戶與組
[root@webserver local]# chown -R apache:apache apache2
?
修改httpd.conf文件
[root@webserver apache2]# vim conf/httpd.conf
將User daemon和Group daemon改為User apache和Group apache
?
啟動(dòng)apache
[root@webserver apache2]#bin/apachectl start
訪問:http://webserver.localdomain/
?
?
?看到上圖表示安裝成功!
?
2.下載并配置mod_jk模塊
下載mod_jk
?
將文件重命名為mod_jk.so 拷貝至/usr/local/apache2/modules/
添加執(zhí)行權(quán)限
[root@webserver apache2]#chmod a+x modules/mod_jk.so
?
創(chuàng)建mod_jk.conf文件
[root@webserver apache2]#vim conf/mod_jk.conf
文件內(nèi)容如下:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMountFile conf/uriworkermap.properties
JkShmFile logs/jk.shm
?
大家重點(diǎn)注意表紅部分:
LoadModule jk_module modules/mod_jk.so
表示apache加載jk_module模塊的路徑
JkWorkersFile conf/workers.properties
表示jk模塊的配置文件路徑
JkMountFile conf/uriworkermap.properties
表示jk模塊映射文件路徑,可以通過(guò)
uriworkermap.properties
文件配置要映射的應(yīng)用
?
創(chuàng)建uriworkermap.properties文件
[root@webserver apache2]#vim conf/uriworkermap.properties
內(nèi)容如下:
/*=loadbalancer
?
如果你希望apache作為單獨(dú)的負(fù)載均衡器的話,可以采用/*=loadbalancer的配置,表示所有請(qǐng)求都會(huì)轉(zhuǎn)發(fā)給集群中的jboss節(jié)點(diǎn)
?
創(chuàng)建workers.properties文件
[root@webserver apache2]#vim conf/workers.properties
文件內(nèi)容如下:
worker.list=loadbalancer,status
#node1
worker.node1.port=8009
worker.node1.host=node1.localdomain
worker.node1.type=ajp13
worker.node1.lbfactor=1
#node2
worker.node2.port=8009
worker.node2.host=node2.localdomain
worker.node2.type=ajp13
worker.node2.lbfactor=1
?
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=1
worker.status.type=status
?
以上內(nèi)容中聲明了2個(gè)worker分別名為node1、node2之后要分別在Jboss節(jié)點(diǎn)中jvmRoute屬性中指定要使用的worker
?
3.修改httpd.conf文件
在文件末尾增加下面一行
Include conf/mod_jk.conf
?
4.配置Jboss
為各節(jié)點(diǎn)指定jvmRoute
編輯server.xml文件
[root@node1 local]# vim /usr/local/jboss-4.0.5.GA/server/all/deploy/jbossweb-tomcat55.sar/server.xml
?
jvmRoute設(shè)置成之前在workers.properties文件里聲明的worker
<
Engine
?
name
="
jboss.web"
?
defaultHost
=
"localhost"
?
jvmRoute
=
"
node1
"
>
??
?
編輯 jboss-service.xml文件激活jk
[root@node1 local]# vim /usr/local/jboss-4.0.5.GA/server/all/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml
找到 <attribute name="UseJK">false</attribute>將其改變?yōu)閠rue
?
5.測(cè)試負(fù)載均衡器
安裝上面的要求配置兩個(gè)jboss節(jié)點(diǎn)
node1.localdomain
node2.localdomain
?
worker.loadbalancer.sticky_session=1
此屬性指定集群針對(duì)HTTP會(huì)話的處理方式,值為1時(shí)表示啟用session黏貼,也就是說(shuō)當(dāng)應(yīng)用程序使用session保存請(qǐng)求狀態(tài)時(shí),負(fù)載均衡器會(huì)將這個(gè)會(huì)話和集群中的一個(gè)節(jié)點(diǎn)進(jìn)行關(guān)聯(lián),之后這個(gè)會(huì)話發(fā)起的請(qǐng)求都會(huì)指向這個(gè)節(jié)點(diǎn)。
?
在集群中部署測(cè)試程序:
請(qǐng)求:http://webserver.localdomain/SessionTest/index.jsp
如圖所示處理我們本次請(qǐng)求的應(yīng)用服務(wù)器為node1.localdomain
?
?輸入要保存到Session里的值,點(diǎn)擊SET
?SET完畢后,在輸入我們剛才存儲(chǔ)的變量名,點(diǎn)擊GET。可以成功得到我們之前設(shè)置的值。我們可以清楚的看到這幾次請(qǐng)求Host與SessionId都沒有改變,說(shuō)明Session已經(jīng)成功黏貼到了node1.localdomain節(jié)點(diǎn)。
?
但是這種方式并不是一個(gè)完善的解決方案,因?yàn)橐粋€(gè)節(jié)點(diǎn)崩潰,所有的會(huì)話數(shù)據(jù)都會(huì)丟失。好在我們之前配置的JBoss集群支持Session復(fù)制,也就是說(shuō)當(dāng)一個(gè)Session被創(chuàng)建時(shí)服務(wù)器會(huì)自動(dòng)同步到其他節(jié)點(diǎn)。關(guān)于Session復(fù)制的配置可以到
/usr/local/jboss-4.0.5.GA/server/all/deploy/tc5-cluster.sar/META-INF/jboss-service.xml 文件中設(shè)置。這里就不多說(shuō)了。
?
我們可以試驗(yàn)一把,我們先把節(jié)點(diǎn)node1.localdomain停掉,然后在點(diǎn)GET獲取UserName
?
如上圖所示,由于node1.localdomain節(jié)點(diǎn)已經(jīng)停掉,負(fù)載均衡器把我們的請(qǐng)求自動(dòng)分配到了可用節(jié)點(diǎn)node2.localdomain上,但是我們從node2上獲得的SessionId還是原來(lái)的,UserName的值可以正常獲取。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
