Windows下Apache+Tomcat實現應用集羣

Windows下Apache+Tomcat實現應用集羣
1 環境依賴:windows、jdk1.六、Apache2.二、tomcat6.0
2 Jdk1.6安裝
2.1 略
3 安裝Apache(2.2.27)
3.1 下載:從Apache官網http://httpd.apache.org/download.cgi下載httpd-2.2.25-win32-x86-openssl-0.9.8y.msi;
3.2 安裝:雙擊上一步下載的安裝程序,持續下一步直到完成;安裝嚮導成功完成,左面右下角托盤中會出現Apache圖標。
3.3 測試:打開瀏覽器,在其地址欄中輸入http://localhost或者http://127.0.0.1,打開後能夠看到「It works」字樣,表示安裝成功。
4 配置Apache
Apache2.2集成了mod_jk功能,相對於1.3版本,再也不須要對worker.perproties進行進行配置,使其配置過程大幅度簡化。
4.1 配置啓動自動加載代理(proxy)模塊(httpd.conf)
用文本編輯器打開${APACHE_HOME}/conf/http.conf文件,去掉一下文本前的註釋符(#)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
4.2 配置首頁
在上一步的基礎上繼續向下找到「DirectoryIndex index.html」字樣,在其後追加index.jsp
4.3 開啓虛擬節點
在上一步的基礎上繼續向下找到「Include conf/extra/httpd-vhosts.conf」字樣,去掉前面的註釋符
4.4 配置虛擬節點
用文本編輯器打開${APACHE_HOME}/conf/extra/httpd-vhosts.conf文件,在最後面追加以下內容
<VirtualHost *:80>
    ServerAdmin username@domain.com  # 管理員郵箱
    ServerName www.domain.com        # 默認域名,沒有能夠用IP代替
    ServerAlias localhost                # 別名,多個空格隔開
    ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
    ProxyPassReverse / balancer://cluster/
    ErrorLog "logs/cluster_test-error.log"
    CustomLog "logs/cluster_test-access.log" common
</VirtualHost>
上面的balancer://是告訴Apache須要進行負載均衡代理,後面的cluster是集羣名,名字可自行定義,再後面*Log爲日誌引擎,負責日誌記錄。
4.5 配置代理
回到${APACHE_HOME}/conf/http.conf文件上,在其末尾追加以下格式內容
ProxyRequests Off                  # 使用反向代理
<proxy balancer://cluster>  
       BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=jvm1
       BalancerMember ajp://127.0.0.1:28009 loadfactor=1 route=jvm2
</proxy>
上面的cluster須要與4.4中的集羣名保持一致,Apache經過ajp協議與tomcat進行通訊,ip地址與端口號肯定了tomcat,loadfactor爲負載因子,Apache按因子比例向tomcat轉發請求,route爲tomcat配置中的jvmRoute,見章節。
4.6 測試
重啓Apache服務,此時訪問http://localhost,將出現503錯誤,表示正常,由於此時tomcat還沒有配置和啓動。
5 安裝Tomcat
5.1 下載

5.2 安裝

6 配置Tomcat
由於是作tomcat集羣,本篇以兩個tomcat爲例介紹,其分別命名爲tomcat一、tomcat2。
6.1 配置Server port
用文本編輯器打開${TOMCAT_HOME_1}/conf/server.xml,
找到:<Server port="8005" shutdown="SHUTDOWN">
修改成:<Server port="18005" shutdown="SHUTDOWN">
6.2 配置Connector port
在上一步基礎上,繼續向下查找、
找到:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改成:<Connector port="18080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="18443" URIEncoding="UTF-8"/>
繼續向下搜索
找到:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改成:<Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />
注:這裏的port即爲Apache經過apj協議與tomcat通訊的端口,以實現負載均衡,故此處的端口18009應與4.5章節中端口號對應。
6.3 配置Engine
首先關閉<Engine name="Catalina" defaultHost="localhost">
而後開啓<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
注:這裏的jvmRoute的值jvm1應與4.5章節中的route相對應。
6.4 配置Cluster
在當前文件中繼續向下查找,找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,默認Cluster配置未被開啓,這裏咱們取消註釋,使其開啓,主要做用是使各tomcat間共享session,據介紹在壓力較大的狀況下出現了session丟失狀況,此段<Cluster />是一下代碼的簡寫,其完整代碼以下:
# 同步異步模式由channelSendOptions參數控制,默認值是8,爲異步模式,4是同步模式。在異步模式下,能夠經過加上拷貝確認(Acknowledge)來提升可靠性,此時channelSendOptions設爲10。
css

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
  <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
  <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    <Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>
    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" port="15900" autoBind="100" 
selectorTimeout="5000" maxThreads="6"/>
    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
    </Sender>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  </Channel>
  # filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" 
watchDir="/tmp/war-listen/" watchEnabled="false"/> 
  <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>


上面代碼中的<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>及<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>配置是在使用mod_jk而且沒有使用sticky sessions或者sticky sessions沒法正常工做時的解決方案,咱們沒有使用mod_jk,也就出現了壓力較大session複製失敗的狀況,所以咱們須要將上面的配置去掉這兩行,而後替換<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
6.5 配置其餘用於集羣的tomcat,重複6.1~6.4的操做配置其餘tomcat,主要是更改端口號(文中帶有綠色標識的地方)
7 測試負載均衡
7.1 測試項目準備
新建一個web項目,取名爲cluster_demo;
在項目中新建一個index.jsp頁面,在頁面body中加入以下內容:
html

<%  
String sessionid = session.getId();
System.out.println("當前sessionid = " + sessionid);
%>


7.2 部署與啓動
將上一步創建的測試項目部署到用於集羣的tomcat中。
方式一:將項目放置到${TOMCAT_HOME_*}/webapps下;
方式二:在用於集羣的tomcat的${TOMCAT_HOME_*}/conf/server.xml中的Host節點下添加java

<Context path="/cluster_demo" docBase="D:/apache_tomcat/projects/cluster_demo" reloadable="true" crossContext="false" privileged="true"></Context>

而後分別啓動集羣中的tomcat,再啓動Apache服務
7.3 併發訪問
利用Apache中所帶的ab來進行併發訪問的模擬測試。
打開命令行窗口,切換至${APACHE_HOME}/bin下
cd ${APACHE_HOME}/bin
ab –n 20 –c 10 http://localhost/cluster_demo/index.jsp
可看到各tomcat控制檯中的輸出信息,是否分別平均接收了20個請求。
運行結果分別以下圖所示,可見兩個tomcat平均分擔了20個請求: web


8 測試session共享
8.1 共享配置
在測試項目的web.xml中,添加<distributable/>元素,這樣能夠通知tomcat服務器,當前應用須要在急羣衆的全部節點間實現session共享。
重要:全部session中的對象應是可序列化的,實現java.io.Serializable接口。
8.2 測試準備
在7.1章節基礎上,修改index.jsp的內容爲
apache

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>cluster test - share session</title>

 <meta http-equiv="pragma" content="no-cache">

 <meta http-equiv="cache-control" content="no-cache">

  </head>

  <body>

 <%  

 String sessionid = session.getId();

System.out.println("當前sessionid = " + sessionid);

// 若是有新的 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="index.jsp" id="form_add" method="post">

  Key:<input id="dataName" name="dataName" type="text"/>

  Value:<input id="dataValue" name="dataValue" type="text"/>

     <input id="subBtn" name="subBtn" type="submit" value="提交" />

 </form>

  </body>

</html>

8.3 驗證測試
從新部署啓動後,訪問http://localhost/cluster_demo/index.jsp ,在頁面上向session中添加一些信息,可看到以下效果,說明session共享咯,不解釋。 
 windows


 
至此,大功告成!
瀏覽器

相關文章
相關標籤/搜索