Apache+Tomcat集羣部署

1.  部署準備(MG1332004)

Apache 服務器 下載地址:http://httpd.apache.org/download.cgi 版本2.4

Tomcat 下載地址:http://tomcat.apache.org/版本7.0

tomcat-connectors-1.2.37-windows-i386-httpd-2.4.x下載地址:http://tomcat.apache.org/dev/dist/tomcat-connectors

2.  安裝過程

(1) 在主機上要安裝jdk;

(2) 配置jdk的安裝路徑,在環境變量path中加入jdk的bin路徑;

(3) 在主機上安裝Apache2.4服務器;

(4) 在主機上安裝三個tomcat,調試三個tomcat分別能夠正常啓動;

(5) tomcat的默認WEB服務端口是8080,默認的模式是單獨服務,我的三個tomcat的WEB服務端口修改爲8888/8889/8890;

端口修改通過修改位置爲tomcat的安裝目錄下的conf/server.xml

修改前的配置爲:

   <Connector port="8080"protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"/>

修改後的配置爲:

   <Connector port="8888"protocol="HTTP/1.1"

              connectionTimeout="20000"

               redirectPort="8443"/>

依次修改每個tomcat的監聽端口(8888/8889/8890)

因爲我是一臺電腦上配置,所以最後還要修改第二、三個tomcat服務器的配置端口。如果在三臺電腦上就不用修改端口了。

<Serverport="8005" shutdown="SHUTDOWN">將關閉端口改爲8006

<Serverport="8005" shutdown="SHUTDOWN">將關閉端口改爲8007

(6) 分別測試每個tomcat的啓動是否正常

http://localhost:8888;http:// localhost: 8889;http:// localhost: 8890

3.  負載均衡配置

(1) 安裝完後,apache,tomcat服務器後,在我的電腦目錄結構如下:

C:\ProgramFiles\Apache Software Foundation\Apache24

C:\ProgramFiles\Apache Software Foundation\apache-tomcat-7.0.52 – 1

C:\ProgramFiles\Apache Software Foundation\apache-tomcat-7.0.52 – 2

C:\ProgramFiles\Apache Software Foundation\apache-tomcat-7.0.52 - 3

(2) 將下載過來的tomcat-connectors-1.2.37-windows-i386-httpd-2.4.x解壓取出mod_jk.so,複製放到Apache服務器裏面的\Apache24\modules目錄下。

(3) 然後在\Apache24\conf\目錄下面找到httpd.conf文件。修改文件的最後一行在最後面加上一句。

include" C:\Program Files\Apache Software Foundation\Apache24\conf\mod_jk.conf"

(4) 在C:\ProgramFiles\Apache Software Foundation\Apache24\conf目錄下面新建mod_jk.conf文件。文件內容如下:

#加載mod_jkModule 

LoadModulejk_module modules/mod_jk.so

#指定workers.properties文件路徑

JkWorkersFileconf/workers.properties

#指定那些請求交給tomcat處理,"controller"爲在workers.propertise裏指定的負載分配控制器

JkMount/*.* controller  

(5) 在http.conf同目錄下新建 workers.properties文件,內容如下:

#server 列表

worker.list= controller, apache-tomcat-7.0.52 – 1, apache-tomcat-7.0.52 – 2, apache-tomcat-7.0.52– 3

#========tomcat-1========

worker. apache-tomcat-7.0.52–1.port=8009      #ajp13 端口號,在tomcat下server.xml配置,默認8009

worker. apache-tomcat-7.0.52–1.host=localhost #tomcat的主機地址,如不爲本機,請填寫ip地址 

worker. apache-tomcat-7.0.52–1.type=ajp13 

worker. apache-tomcat-7.0.52–1.lbfactor= 1    #server的加權比重,值越高,分得的請求越多

#========tomcat-2======== 

worker. apache-tomcat-7.0.52–2.port=9009      #ajp13 端口號,在tomcat下server.xml配置,默認8009 

worker. apache-tomcat-7.0.52–2.host=localhost #tomcat的主機地址,如不爲本機,請填寫ip地址 

worker. apache-tomcat-7.0.52–2.type=ajp13 

worker. apache-tomcat-7.0.52–2.lbfactor= 1    #server的加權比重,值越高,分得的請求越多

#========tomcat-3======== 

worker. apache-tomcat-7.0.52–3.port=9010      #ajp13 端口號,在tomcat下server.xml配置,默認8009 

worker. apache-tomcat-7.0.52–3.host=localhost #tomcat的主機地址,如不爲本機,請填寫ip地址 

worker. apache-tomcat-7.0.52–3.type=ajp13 

worker. apache-tomcat-7.0.52–3.lbfactor= 1    #server的加權比重,值越高,分得的請求越多

#========controller,負載均衡控制器========

worker.controller.type=lb 

worker.controller.balanced_workers=apache-tomcat-7.0.52-1,apache-tomcat-7.0.52-2, apache-tomcat-7.0.52-3

#指定分擔請求的tomcat 

worker.controller.sticky_session=1 

(6) 因爲我是一臺電腦上配置,所以最後還要修改tomcat服務器的配置端口。如果在兩臺電腦上就不用修改端口了。 

 <!--Define an AJP 1.3 Connector on port 8009 -->

 <Connectorport="9009" protocol="AJP/1.3"redirectPort="8443" />將ajp1.3端口改爲9009 

 <Connectorport="9010" protocol="AJP/1.3"redirectPort="8443" />將ajp1.3端口改爲9010 

至此負載均衡的配置完成。直接將手上的項目拷貝到兩個tomcat目錄下。即可進行負載均衡測試。打開多個瀏覽器窗口,觀察三個tomcat後面的輸出。

4.  實現session複製

(1) 在tomcat-1裏面的server.xml增加

<Enginename="Catalina" defaultHost="localhost" jvmRoute="apache-tomcat-7.0.52-1">

Tomcat-2裏面增加:

<Enginename="Catalina" defaultHost="localhost" jvmRoute="apache-tomcat-7.0.52-2">

tomcat-3裏面增加:

<Enginename="Catalina" defaultHost="localhost" jvmRoute="apache-tomcat-7.0.52-3">

這些元素在tomcat裏面被註釋掉了,找到註釋的部分位置,加在那個位置即可。

(2) 在三個tomcat的sever.xml 做cluster的配置

         <ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                channelSendOptions="8">

 

          <ManagerclassName="org.apache.catalina.ha.session.DeltaManager"

                  expireSessionsOnShutdown="false"

                  notifyListenersOnReplication="true"/>

 

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">

            <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

                       address="228.0.0.4"

                        port="45564"

                       frequency="500"

                       dropTime="3000"/>

            <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="auto"

                      port="4000"

                      autoBind="100"

                      selectorTimeout="5000"

                     maxThreads="6"/>

 

            <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

            <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>

 

          <ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>

          <ValveclassName="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"/>

 

          <ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

          <ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

      </Cluster>

因爲是在同一臺電腦上,所以在將不同tomcat的端口做些修改; 

<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="auto"

                      port="4002"

                      autoBind="100"

                     selectorTimeout="5000"

                     maxThreads="6"/>

 

(3) 最後要tomcat支持session複製,必須在web.xml裏面加上一個標籤:<distributable/>在你工程的web.xml最後面加上這一句即可。最後運行你的tomcat,。用戶登陸進系統後,查看tomcat運行的日誌。看它運行在那個tomcat下,然後此時關閉這個tomcat。然後會發現另外一個tomcat此時會將關閉的那個tomcat的session複製過來,實現了失敗託管。你再繼續運行系統,發現不用退出系統,也能夠繼續運行該系統,此時跳轉到另外一個tomcat上了。這樣雖然在服務器端宕機了,但是對客戶來說卻是透明的。

5.  測試

(1)      在三個tomcat的安裝目錄中的webapps建立相同的應用,我和應用目錄名爲TestDemo,在三個應用目錄中建立相同 WEB-INF目錄和頁面index.jsp, index.jsp的頁面內容如下:

<%@ page contentType="text/html;charset=GBK" %>

<%@ page import="java.util.*"%>

<html><head><title>ClusterApp Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() + ": " + request.getLocalPort()+"<br>");%>

<%

 out.println("<br> ID " +session.getId()+"<br>");

  String dataName =request.getParameter("dataName");

  if(dataName != null && dataName.length() > 0) {

     String dataValue =request.getParameter("dataValue");

    session.setAttribute(dataName, dataValue);

  }

 out.print("<b>Session List</b>");

 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" method="POST">

    Key:<inputtype=text size=20 name="dataName">

   <br>

    Value:<inputtype=text size=20 name="dataValue">

   <br>

   <input type=submit>

 </form>

</body>

</html>

(2) 在WEB-INF\web.xml裏面加上一個標籤:<distributable/>;

(3) 重啓apache服務器和三個tomcat服務器

訪問:

http://localhost:8888/TestDemo/index.jsp,

http://localhost:8889/TestDemo/index.jsp,

http://localhost:8890/TestDemo/index.jsp

測試結果:

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