CentOS-6.4-minimal版中Apache-2.2.29與Tomcat-6.0.41實(shí)現(xiàn)負(fù)載均衡
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-10-08 08:00:00 閱讀次數(shù):3829次
/**
* CentOS-6.4-minimal版中Apache-2.2.29與Tomcat-6.0.41實(shí)現(xiàn)負(fù)載均衡
* ----------------------------------------------------------------------------------------------------------------------
* 關(guān)于負(fù)載均衡(Load Balancer)與集群(Cluster)的區(qū)別,以及配置方式的不同,詳見(jiàn)http://blog.csdn.net/jadyer/article/details/39623209
* ----------------------------------------------------------------------------------------------------------------------
* 配置負(fù)載均衡
* 本文建立在Apache-2.2.29與Tomcat-6.0.41整合的基礎(chǔ)上,整合過(guò)程詳見(jiàn)http://blog.csdn.net/jadyer/article/details/39613523
* 1)修改端口(由于我是在一臺(tái)機(jī)器上復(fù)制多個(gè)tomcat,所以需要修改端口,如果是不同的機(jī)器就可以跳過(guò)這一步)
* [root@CentOS64 app]# vi tomcat/conf/server.xml (修改8005為-1,原因詳見(jiàn)http://blog.csdn.net/jadyer/article/details/39613771)
* [root@CentOS64 app]# cp -a tomcat tomcat1
* [root@CentOS64 app]# cp -a tomcat tomcat2
* [root@CentOS64 app]# cp -a tomcat tomcat3
* [root@CentOS64 app]# vi tomcat1/conf/server.xml (修改ssl端口和ajp端口為8543和8109,即分別+100)
* [root@CentOS64 app]# vi tomcat2/conf/server.xml (修改ssl端口和ajp端口為8643和8209,即分別+200)
* [root@CentOS64 app]# vi tomcat3/conf/server.xml (修改ssl端口和ajp端口為8743和8309,即分別+300)
* 2)修改/app/apache/conf/workers.properties,修改后的內(nèi)容如下
* worker.list=status,tomcatlb
* worker.status.type=status
* worker.tomcat1.port=8109
* worker.tomcat1.host=127.0.0.1
* worker.tomcat1.type=ajp13
* worker.tomcat1.lbfactor=1
* worker.tomcat2.port=8209
* worker.tomcat2.host=127.0.0.1
* worker.tomcat2.type=ajp13
* worker.tomcat2.lbfactor=1
* worker.tomcat3.port=8309
* worker.tomcat3.host=127.0.0.1
* worker.tomcat3.type=ajp13
* worker.tomcat3.lbfactor=1 #負(fù)載權(quán)重,值越高,被分發(fā)請(qǐng)求的概率越大,其默認(rèn)值為1
* worker.tomcatlb.type=lb #可選值ajp13,ajp14,jni,lb or status
* worker.retries=6 #通信失敗時(shí)的重試次數(shù),默認(rèn)為2
* worker.tomcatlb.balanced_workers=tomcat1,tomcat2,tomcat3 #參與負(fù)載均衡的Web服務(wù)器
* 3)修改/app/apache/conf/extra/httpd-vhosts.conf
* 將默認(rèn)的tomcat改為tomcatlb,即指定所有請(qǐng)求交由tomcatlb處理
* ----------------------------------------------------------------------------------------------------------------------
* 測(cè)試負(fù)載均衡
* 1)啟動(dòng)apache和三個(gè)tomcat后,就可以通過(guò)jkstatus看到參與負(fù)載均衡的3個(gè)tomcat以及其它參數(shù),我們也可以通過(guò)jkstatus修改負(fù)載均衡參數(shù)
* 關(guān)于jkstatus的配置和使用,詳見(jiàn)http://blog.csdn.net/jadyer/article/details/39613553
* 2)接下來(lái)測(cè)試一下負(fù)載均衡訪問(wèn),測(cè)試代碼已在下方貼出
* 訪問(wèn)頁(yè)面我們會(huì)發(fā)現(xiàn),每次刷新頁(yè)面,通過(guò)后臺(tái)日志都可以看到請(qǐng)求是被隨機(jī)分配給3個(gè)tomcat的,說(shuō)明是由3個(gè)tomcat平均承擔(dān)的,即負(fù)載均衡成功
* 并且,由于這里并沒(méi)有配置集群,故每次刷新頁(yè)面時(shí),頁(yè)面打印的SessionID都是變化的
* ----------------------------------------------------------------------------------------------------------------------
* 關(guān)于workers.properties的更多屬性說(shuō)明,可參考以下兩個(gè)網(wǎng)址
* http://tomcat.apache.org/connectors-doc/reference/workers.html
* http://blog.csdn.net/chumeng411/article/details/7541767
* 另外補(bǔ)充兩個(gè)待驗(yàn)證的workers屬性描述
* 1)worker.tomcatlb.sticky_session=true
* 此處指定集群是否需要會(huì)話復(fù)制,若設(shè)為true則表明為會(huì)話粘性,不進(jìn)行會(huì)話復(fù)制
* 當(dāng)某用戶的請(qǐng)求第一次分發(fā)到哪臺(tái)Tomcat后,后繼的請(qǐng)求會(huì)一直分發(fā)到此Tomcat服務(wù)器上處理
* 若設(shè)為false則表明需要會(huì)話復(fù)制,該屬性默認(rèn)值為true
* 當(dāng)設(shè)置為0(false)時(shí),是基于請(qǐng)求的負(fù)載均衡,為1(true)時(shí)是基于用戶的負(fù)載均衡
* 2)worker.tomcatlb.sticky_session_force=true
* 該屬性默認(rèn)值為false,若上面的sticky_session設(shè)為true,則建議此處也設(shè)為true
* 此參數(shù)表明如果集群中某臺(tái)Tomcat服務(wù)器在多次請(qǐng)求沒(méi)有響應(yīng)后,是否將當(dāng)前的請(qǐng)求轉(zhuǎn)發(fā)到其它Tomcat服務(wù)器上處理
* 此參數(shù)在sticky_session=true時(shí)影響比較大,會(huì)導(dǎo)致轉(zhuǎn)發(fā)到其它Tomcat服務(wù)器上的請(qǐng)求找不到原來(lái)的session
* 所以如果此時(shí)請(qǐng)求中有讀取session中某些信息的話,就會(huì)導(dǎo)致應(yīng)用的Null異常
* ----------------------------------------------------------------------------------------------------------------------
* @create Sep 27, 2014 6:29:49 PM
* @author 玄玉<http://blog.csdn.net/jadyer>
*/
<%@ page language="java" pageEncoding="UTF-8"%>
<%
out.println("<br>Session ID : " + session.getId() + "<br>");
session.setAttribute("myname", "session");
String dataName = request.getParameter("dataName");
if(null!=dataName && dataName.length()>0){
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session 列表</b><br>");
java.util.Enumeration e = session.getAttributeNames();
while(e.hasMoreElements()){
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
}
%>
<form action="demo.jsp" method="POST">
屬性名:<input type=text size=20 name="dataName"><br>
屬性值:<input type=text size=20 name="dataValue"><br>
<input type=submit>
</form>
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)