軟負載均衡:apache+tomcat負載均衡實驗
實驗要求:
1、1個apache作為負載均衡器、3個以上的tomcat作為web應用伺服器
2、分別採用session sticky和session replication進行配置實驗
3、要求能實現3個及以上tomcat應用伺服器節點的負載均衡,並支援節點熱拔插
實驗步驟:
1.按win+R輸入cmd開啟命令提示符,在命令提示符中先後輸入java 、javac 、java -version三個命令,確保電腦具備JDK環境
注:此例電腦JDK版本為"1.8.0_162"
2.下載apache-tomcat-7.0.76,下載成功後複製貼上它並分別重新命名為:apache-tomcat-7.0.76(2),apache-tomcat-7.0.76(3)
注:tomcat版本應根據JDK版本合理選擇,避免JDK與tomcat之間的版本衝突問題,此例選用apache-tomcat-7.0.76版本
3.分別修改三個tomcat 的 '/conf’目錄下的servlet.xml檔案,修改tomcat以下三處埠號,使三個tomcat中相應的埠號各不相同:(三處埠分別為:關閉請求的埠號;HTTP請求的埠號;AJP埠號)
<Server port="8007" shutdown="SHUTDOWN">; <Connector port="8070" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />; <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />;
此例中三個tomcat修改後的埠號如下:
apache-tomcat-7.0.76
<Server port="8007" shutdown="SHUTDOWN">;
<Connector port="8070" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />;
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />;
apache-tomcat-7.0.76(2)
<Server port="8008" shutdown="SHUTDOWN">; <Connector port="8071" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />; <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />;
apache-tomcat-7.0.76(3)
<Server port="8009" shutdown="SHUTDOWN">;
<Connector port="8072" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />;
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />;
4.分別進入三個tomcat的‘/bin’目錄,點選startup.sh,使三個tomcat能夠同時啟動。三個tomcat控制檯不報錯時,開啟谷歌瀏覽器,新建三個訪問頁面,分別在頁面中輸入URL:127.0.0.1:8070 URL:127.0.0.1:8071 URL:127.0.0.1:8072
若三個URL都能成功訪問到apache官網,則三個tomcat同時啟動成功
注:URL構成:127.0.0.1:tomcat的埠號
5.下載並安裝apache_2.2.8-win32-x86-no_ssl.msi,安裝完畢後在瀏覽器中輸入URL:127.0.0.1能夠訪問出內容則apache安裝成功
6.下載mod_jk:mod_jk-1.2.31-httpd-2.2.3.so
7.進入apache安裝目錄下的models資料夾中,將下載後的mod_jk-1.2.31-httpd-2.2.3.so放入其中
8.進入apache安裝目錄下的conf資料夾中,新建名為jk的資料夾,在jk資料夾中新建三個檔案:mod_jk.conf(文字文件) workers.properties(properties檔案) uriworkermap.properties(properties檔案)
檔案:mod_jk.conf
用於載入mod_jk-1.2.31-httpd-2.2.3.so,指定workers.properties,uriworkermap.properties檔案路徑,指定jk日誌輸出檔案mod_jk.log及日誌級別,檔案內容如下:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JkWorkersFile conf/jk/workers.properties
JkMountFile conf/jk/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
檔案:uriworkermap.properties
結合workers.properties配置負載均衡路徑,檔案內容如下:
/* = controller
檔案:workers.properties
用於配置負載均衡,將三個tomcat放置worker中,分別配置worker下三個tomcat的port(AJP埠,而不是HTTP請求埠),host(統一訪問域名,三個tomcat需統一配置),type(固定值為ajp13,表示埠型別),檔案內容如下:
#定義worker
worker.list = controller
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
#server的加權比重,值越高,分得的請求越多
worker.tomcat1.lbfactor=1
worker.tomcat2.port=8010
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat3.port=8011
worker.tomcat3.host=localhost
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor=1
#負載均衡配置
worker.controller.type=lb
#指定分擔請求的tomcat
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session=0
9.進入apache安裝目錄下的conf資料夾中,找到httpd.conf檔案,在檔案的最後一行新增:(引入mod_jk.conf檔案,請注意檔案路徑是否正確)
Include conf/jk/mod_jk.conf
10.根據workers.properties的配置修改tomcatservlet.xml檔案中的屬性值(按照AJP埠號修改相應tomcat的jvmRoute屬性):
apache-tomcat-7.0.76(AJP埠號:8009)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
apache-tomcat-7.0.76(2)(AJP埠號:8010)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
apache-tomcat-7.0.76(3)(AJP埠號:8011)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat3">
至此,已完成負載均衡
檢測負載均衡是否配置成功: 同時啟動三個tomcat,開啟瀏覽器,在瀏覽器中能正常訪問http://localhost (正常訪問即:訪問出apache官網頁面)
下面,我們接著配置session共享,實現節點熱拔插
11.在三個tomcat的servlet.xml檔案中,分別找到
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
將其從註釋中釋放出來。
12.在apache-tomcat-7.0.76的webapps目錄下新建test資料夾,在test資料夾中新建WEB-INF資料夾,並在WEB-INF資料夾中新建web.xml檔案,在檔案中新增標籤:<distributable/>
web.xml檔案內容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<distributable/>
</web-app>
在test資料夾中新建test.jsp,用於測試負載均衡,session共享,節點熱拔插
test.jsp檔案內容:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Cluster App Test</title>
</head>
<body>
tomcat1_Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
// 如果有新的 Session 屬性設定
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.println("<b>Session 列表</b><br>");
System.out.println("============================");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
名稱:<input type=text size=20 name="dataName"><br>
值:<input type=text size=20 name="dataValue"> <br>
<input type=submit>
</form>
</body>
</html>
將一整個test資料夾複製貼上,分別放到apache-tomcat-7.0.76(2)和apache-tomcat-7.0.76(3)的webapps目錄下
至此,session共享與節點熱拔插配置完畢,檢驗配置成功與否的方法如下:
第一步:同時啟動三個tomcat,在瀏覽器中輸入URL:http://localhost/test/test.jsp
第二步:連續重新整理三次以上,若頁面中的session值不變化,則session共享配置成功;
第三步:連續重新整理三次以上,若頁面中的tomcat1,tomcat2,tomcat3來回跳轉,則負載均衡配置成功;
第四步:任意關閉一個執行中的tomcat,重新整理頁面,若頁面仍能正常訪問(session重新整理多次值不變,tomcat在另外兩個開啟的tomcat中跳轉);
第五步:接著關閉一個tomcat,重新整理頁面,頁面仍能正常訪問;(此時tomcat顯示保留的tomcat)
第六步:開啟之前關閉掉的一個tomcat,將最後一個tomcat關閉,重新整理頁面,頁面仍能正常訪問;(此時tomcat顯示新開啟的tomcat)
啦啦啦。若照著上面的步驟,從一到六依次下來結果都符合上述,恭喜你,可以交作業了!