Tomcat与Apache集群详细配置过程

TomcatApache集群详细配置过程

 

所需工具

Linux系统:CentOS操作系统

  • Jdk:版本为jdk1.6.0_45

  • Apache:版本为2.4.12,安装包httpd-2.4.12.tar.gz,http://httpd.apache.org/download.cgi

  • Apache依赖于APR、APR-Util和PCRE,所以需要下载:

  • Apr:版本为1.5.1,安装包apr-1.5.1.tar.gz,http://apr.apache.org/download.cgi

  • Apr-util:版本为1.5.4,安装包apr-util-1.5.4.tar.gz,http://apr.apache.org/download.cgi

  • Pcre:版本为8.36,安装包pcre-8.36.tar.gz,http://sourceforge.net/projects/pcre/files/pcre/

  • mod_jk:版本为1.2.40,安装包:tomcat-connectors-1.2.40-src.tar.gz,http://tomcat.apache.org/download-connectors.cgi

  • Tomcat:版本为7.0.47,安装包apache-tomcat-7.0.47.tar.gz,http://tomcat.apache.org/download-70.cgi

     

    配置过程

    1. 安装CentOS虚机,配置Jdk环境。CentOS如自带OpenJDK和Apache服务器则将其删,除此处不做详细说明。

    2. 安装APR

    • 解压缩APR

      • shell> sudo tar zxvf apr-1.4.6.tar.gz

    • 安装
      • shell> cd /opt/sources/apr-1.4.6
      • shell>sudo ./configure --prefix=/usr/local/apr
      • shell>sudomake
      • shell>sudomakeinstall

    4. 安装APR-Util

    • 解压缩APR-Util
      • shell> sudo tar zxvf apr-util-1.4.1.tar.gz

    • 安装
      • shell> cd /opt/sources/apr-util-1.4.1
      • shell>sudo ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
      • shell>sudomake
      • shell>sudomakeinstall
  • 5. 安装PCRE

    • 首先请确定系统安装了Perl,Perl在此不再赘述,如有需要请去官网查看安装细则:http://www.cpan.org/src/README.html

    • 解压缩PCRE

      • shell> sudo tar zxvf pcre-8.30.tar.gz

    • 安装PCRE

      • shell> cd /opt/sources/pcre-8.30

      • shell>sudo ./configure --prefix=/usr/local/pcre

      • shell>sudomake

      • shell>sudomake install

    6. 安装Apache 2.4

    • 解压缩Apache 2.4
      • shell> sudo tar zxvf httpd-2.4.2.tar.gz
    • 安装Apache
      • shell> cd /opt/sources/httpd-2.4.2
      • shell> sudo make
      • shell>sudomake install

    7. Apache配置及测试

    • 安装完毕后,在测试启动apache之前先修改/apache/conf /httpd.conf。
    • 如不能使用80端口,可查找Listen,修改监听端口号。
    • 查找ServerName,打开注释,将ServerName值改为对应的IP地址,如127.0.0.1:8111。
    • 保存httpd.conf文件的修改,启动apache服务。shell> /usr/local/apache/bin/apachectl start
    • 查看httpd是否运行    shell >ps -ef | grep httpd
    • 浏览器测试apache。在浏览器中访问http://xxx.xxx.xxx.xxx:8111 (apache服务器IP)。页面出现“It's Works!”字样即为成功。

    8. Apache的启动和关闭

    • 在/usr/local/apache/bin下有可执行程序。
      • 启动apache服务:# /usr/local/apache/bin/apachectl start
      • 关闭apache服务:#  /usr/local/apache/bin/apachectlstop
      • 重启apache服务:#  /usr/local/apache/bin/apachectl restart

    9. Tomcat安装、测试及配置

    • 将安装包拷贝到/usr/local目录下
    • 解压安装包到当前目录。 shell>tar -zxvf apache-tomcat-7.0.47.tar.gz
    • 修改配置文件,增加java的环境变量信息。在/usr/local/apache-tomcat-7.0.47/bin下有文件catalina.sh 在文件头部增加下列信息
      • exportJAVA_HOME=/usr/local//Java/jdk1.7.0_45
      • exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
      • exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
      • JDK目录以实际安装目录为准
      • 启动tomcat,shell>/usr/local/apache-tomcat-7.0.47/bin/startup.sh。
      • 打开浏览器访问 http://127.0.0.1:8080 ,可以看到tomcat的启动欢迎页面,证明tomcat配置正确。

    10. tomcat的启动和关闭

    • 启动tomcat服务:
      • shell> /usr/local/apache-tomcat-7.0.47/bin/startup.sh
      • shell> /usr/local/apache-tomcat-7.0.47/bin/catalina.sh start
    • 关闭tomcat服务:
      • shell> /usr/local/apache-tomcat-7.0.47/bin/shutdown.sh
      • shell> /usr/local/apache-tomcat-7.0.47/bin/catalina.sh stop

    11. tomcat的java web项目发布

    • 用Eclipse将编译好的Java Web项目导出成war包。
    • 将war包放置到linux服务器上的tomcat的webapps目录下。如本次配置放在/usr/local/apache-tomcat-7.0.47/webapps下。
    • 启动tomcat后,tomcat会自动将war包解压并运行Java Web项目。
    • 打开浏览器,输入 http://127.0.0.1:8080/test (项目名),就可以访问项目。

    12. Tomcat设置默认访问项目

    • 打开/usr/local/apache-tomcat-7.0.47/conf/server.xml,在<Host></Host>标签之间加入下面的语句:<Contextpath="" docBase="test" debug="0"reloadable="false" />。 <Context>标签的docBase值为想要默认访问的项目名称,此处为test。文件修改后如图所示。然后重新启动tomcat,打开浏览器,输入http://127.0.0.1:8080,就可以访问test项目。

    13. mod_jk安装

    • mod_jk的作用:连接apache和tomcat集群的中间件。
    • 将安装包拷贝到/usr/local目录下。
    • 解压安装包到当前目录,shell>tar -zxvf tomcat-connectors-1.2.40-src.tar.gz
    • 编译安装mod_jk
      • shell>cd /tomcat-connectors-1. 2.40-src/native
      • shell>chmod 755 buildconf.sh
      • shell>/buildconf.sh
      • shell>/configure --with-apxs=/usr/local/apache/bin/apxs
      • shell>make
      • shell>make install
    • 如缺少libtool,则可用yum命令安装。
    • 最后将/tomcat-connectors-1.2.37/apache-2.0目录下生成的mod_jk.so文件拷贝到apache安装目录下的modules文件夹下面。shell>cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/

    14. 集群负载均衡-tomcat配置

    • 修改Tomcat/conf 路径下的server.xml的< Connector>节点配置:

            是关于使用ajp连接apache和tomcat时的配置。修改成如下形式:

            <!-- Definean AJP 1.3 Connector on port 8009 -->

            <Connectorport="8009"protocolhandlerclassname="org.apache.jk.server.jkcoyotehandler"protocol="AJP/1.3" redirectPort="8443" />

            注意:如果一台机器上同时运行多个tomcat,一定要将每个tomcat对应的Connector标签的port端口设为不同的值。

    •  修改Tomcat/conf 路径下的server.xml的<Engine>的节点配置:

             将<Engine>的注释打开,为安装的tomcat命名,即修改jvmRoute的值为“tomcat实例名”(不同的tomcat赋予不同值,此处安装了两个tomcat,分别命名为tomcat1和tomcat2),修改结果如下:

             <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

             <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

    • 在<Engine>或<Host>元素下添加以下内容均可:

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">

       <Manager className="org.apache.catalina.ha.session.BackupManager"
         expireSessionsOnShutdown="false"
         notifyListenersOnReplication="true"
         mapSendOptions="6"/>
    <!--
       
        <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="4000"
         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>

       <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>

    • 修改待发布项目的web.xml

            需要发布的项目放在tomcat的webapps文件夹下,在每个待发布项目的web.xml末尾的</web-app>标签里添加<distributable/>,确保session能够复制。

  •  

    15. 集群负载均衡-apache配置

    • 修改httpd.conf文件

          在apache的conf下,用vi编辑器打开httpd.conf,在该文件末尾加上如下行 (切记/usr/local/apache/conf 和 /etc/httpd/conf 下的httpd.conf里面都要添加):

          Include /usr/local/apache/conf/mod_jk.conf 

    • 配置mod_jk.conf文件

          在/usr/local/apache/conf下建立mod_jk.conf文件。配置内容:

          #加载mod_jk Module
          LoadModule jk_module /usr/local/apache/modules/mod_jk.so

         #加载集群中的workers
          JkWorkersFile /usr/local/apache/conf/workers.properties

         #加载workers的请求处理分配文件
          JkMountFile /usr/local/apache/conf/uriworkermap.properties

         #指定jk的日志输出文件
          JkLogFile /usr/local/apache/logs/mod_jk.log

         #指定日志级别
          JkLogLevel warn

         #指定日志的格式
          JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

         #指定哪些请求交给tomcat处理,"controller"为在 workers.propertise里指定的负载分配控制器名
          JkMount /*.* controller

          说明:
          JkMount:设置apache分发器,/表示apache将所有文件都由分发器lbcontroller 进行分发,你可以自行设置.jsp,*.do等。

    • 配置workers.properties文件

          在/usr/local/apache/conf下建立workers.properties文件。配置内容:
          #server 列表
          worker.list=controller,tomcat1,tomcat2

          ========tomcat1========
          worker.tomcat1.port=8008 #ajp13 端口号,在tomcat下server.xml配置,默认8009

          worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址

          worker.tomcat1.type=ajp13

          worker.tomcat1.lbfactor=1 #server的加权比重,值越高,分得的请求越多

          ========tomcat2========
          worker.tomcat2.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009

          worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址

          worker.tomcat2.type=ajp13

          worker.tomcat2.lbfactor=1 #server的加权比重,值越高,分得的请求越多

          ========controller,负载均衡控制器========
          worker.controller.type=lb #server名为controller,用于负载均衡

          worker.retries=3 #重试次数

          worker.controller.balance_workers=tomcat1,tomcat2

          #粘性Session(默认是打开的) 当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False
          worker.controller.sticky_session=false

          #设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,也有设置为0才可以的
          worker.controller.sticky_session=1
          worker.controller.sticky_session_force=1
          worker.status.type=status

         说明:
         1、注意上面的worker.tomcat1.port端口是Tomcat server.xml下的
         <Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />

    • 配置uriworkermap.properties文件

          在/usr/local/apache/conf下建立uriworkermap.properties文件。配置内容:
          #所有请求都由controller这个server处理
          /*=controller

          #所有包含jkstatus请求的都由status这个 server处理
          /jkstatus=status
          #这里的"!”是“非”的意思。
          !/*.gif=controller

          !/*.jpg=controller

          !/*.png=controller

          !/*.css=controller

          !/*.js=controller

          !/*.htm=controller

          !/*.html=controller

     

    16.  apache jkstatus JK运行状态管理权限

          在已配置完成的 apache 项目中 workers.properties 配置文件中加入 下面两行
          worker.list = status

          worker.status.type=status

          mod_jk.conf 配置文件中加入下面一行

          JkMount /jkstatus status

     

    17. 负载均衡集群Session测试

  •   17.1 创建测试工程test

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import="java.util.*" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
    http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    Server Info:
    <%
        out.print("session Id:"+session.getId());
        System.out.println(new Date().toLocaleString() + " ===== session Id>>>>>>>>:"+session.getId());
    %>

    <form action="index.jsp" method="post">
        key<input type="text" name="key"/>
        <br />
        value<input type="text"name="value" />
        <br />
        <input type="submit"value="Submit" />
        <br />
    </form>
    <%
        String key =request.getParameter("key");

        if(key!=null &&key.isEmpty()==false)
        {
            String value =request.getParameter("value");

            session.setAttribute(key, value);

            Enumeration e =session.getAttributeNames();

            while (e.hasMoreElements())
            {
                String keyStr = (String)e.nextElement();

                String valueStr = (String)session.getAttribute(sKey);

                out.print(keyStr+ " ="+valueStr+"<br>");
            }
        }
    %>
    </body>
    </html>

  •  

  •   17.2 负载均衡集群Session粘贴测试

           启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:http://xxx.xxx.xxx.xxx:8111/, 显示如图一所示页面。从页面显示的session Id可以看出请求访问的是tomcat1。

           如图二所示,发现多次刷新或submit后,请求访问的一直是tomcat1,并且session Id一直保持不变,session中的数据也能够保持,说明session粘性良好。

         

     

      17.3负载均衡集群Session粘贴测试

           启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:http://xxx.xxx.xxx.xxx:8111/,从页面显示的session Id可以看出请求访问的是tomcat1。提交几组session数据,显示结果如图一所示。

       

           此时停掉tomcat1,再次提交session数据,或刷新页面,结果如图二所示,发现请求被转发给tomcat2,页面访问正常。页面颜色改变,但Session Id保持不变,session数据也全部传递给tomcat2,表明session复制良好。

     

    18. linux防火墙

    • 需要将tomcat端口添加到linux防火墙中。
    • 需要设置linux防火墙的组播,将网卡添加到防火墙信任中。

     

    19.sticky_session和sticky_session_force介绍

    sticky_session    sticky_session_force           结论

    0                         0                                     session无黏性,session会复制

    0                         1                                     session无黏性,session会复制

    1                         0                                     session有粘性(非强制),session会复制

    1                         1                                     session有粘性(强制),session没必要再复制(此处有争议,待深入研究)

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值