Apache+Tomcat集群部署

来源:互联网 发布:正确的捆条算法 编辑:程序博客网 时间:2024/05/02 00:03

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

测试结果:

0 0
原创粉丝点击