CentOS-6.4-minimal版中Apache-2.2.29與Tomcat-6.0.41實現負載均衡

完整版見https://jadyer.github.io/2014/09/27/tomcat-apache-loadbalancer/




/**
 * CentOS-6.4-minimal版中Apache-2.2.29與Tomcat-6.0.41實現負載均衡
 * ----------------------------------------------------------------------------------------------------------------------
 * 關於負載均衡(Load Balancer)與集羣(Cluster)的區別,以及配置方式的不同,詳見http://blog.csdn.net/jadyer/article/details/39623209
 * ----------------------------------------------------------------------------------------------------------------------
 * 配置負載均衡
 * 本文建立在Apache-2.2.29與Tomcat-6.0.41整合的基礎上,整合過程詳見http://blog.csdn.net/jadyer/article/details/39613523
 * 1)修改端口(由於我是在一臺機器上覆制多個tomcat,所以需要修改端口,如果是不同的機器就可以跳過這一步)
 *   [root@CentOS64 app]# vi tomcat/conf/server.xml  (修改8005爲-1,原因詳見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,修改後的內容如下
 *   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                                 #負載權重,值越高,被分發請求的概率越大,其默認值爲1
 *   worker.tomcatlb.type=lb                                   #可選值ajp13,ajp14,jni,lb or status
 *   worker.retries=6                                          #通信失敗時的重試次數,默認爲2
 *   worker.tomcatlb.balanced_workers=tomcat1,tomcat2,tomcat3  #參與負載均衡的Web服務器
 * 3)修改/app/apache/conf/extra/httpd-vhosts.conf
 *   將默認的tomcat改爲tomcatlb,即指定所有請求交由tomcatlb處理
 * ----------------------------------------------------------------------------------------------------------------------
 * 測試負載均衡
 * 1)啓動apache和三個tomcat後,就可以通過jkstatus看到參與負載均衡的3個tomcat以及其它參數,我們也可以通過jkstatus修改負載均衡參數
 *   關於jkstatus的配置和使用,詳見http://blog.csdn.net/jadyer/article/details/39613553
 * 2)接下來測試一下負載均衡訪問,測試代碼已在下方貼出
 *   訪問頁面我們會發現,每次刷新頁面,通過後臺日志都可以看到請求是被隨機分配給3個tomcat的,說明是由3個tomcat平均承擔的,即負載均衡成功
 *   並且,由於這裏並沒有配置集羣,故每次刷新頁面時,頁面打印的SessionID都是變化的
 * ----------------------------------------------------------------------------------------------------------------------
 * 關於workers.properties的更多屬性說明,可參考以下兩個網址
 * http://tomcat.apache.org/connectors-doc/reference/workers.html
 * http://blog.csdn.net/chumeng411/article/details/7541767
 * 另外補充兩個待驗證的workers屬性描述
 * 1)worker.tomcatlb.sticky_session=true
 *   此處指定集羣是否需要會話複製,若設爲true則表明爲會話粘性,不進行會話複製
 *   當某用戶的請求第一次分發到哪臺Tomcat後,後繼的請求會一直分發到此Tomcat服務器上處理
 *   若設爲false則表明需要會話複製,該屬性默認值爲true
 *   當設置爲0(false)時,是基於請求的負載均衡,爲1(true)時是基於用戶的負載均衡
 * 2)worker.tomcatlb.sticky_session_force=true
 *   該屬性默認值爲false,若上面的sticky_session設爲true,則建議此處也設爲true
 *   此參數表明如果集羣中某臺Tomcat服務器在多次請求沒有響應後,是否將當前的請求轉發到其它Tomcat服務器上處理
 *   此參數在sticky_session=true時影響比較大,會導致轉發到其它Tomcat服務器上的請求找不到原來的session
 *   所以如果此時請求中有讀取session中某些信息的話,就會導致應用的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>

jkstatus效果圖
發佈了360 篇原創文章 · 獲贊 338 · 訪問量 121萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章