Apache tomcat 集群环境配置

Apache httpd 和tomcat集群环境,负载均衡,本次配置采用最新版本的httpd2.4.3,tomcat7.0.32和connector1.2.37,jdk1.7

,步骤如下。安装所需的全部包和我自己的配置文件(可以参考下),http://pan.baidu.com/share/link?shareid=122285&uk=537055152

一:安装apache-httpd:

1.    首先下载httpd-2.4.3.tar.gz,输入命令:gunzip httpd-2.4.3.tar.gz, 解压出来tar包,再解压:tar -xvf httpd-2.4.3.tar,进入httpd-2.4.3目录 配置命令:./configure          --prefix=/home/youthflies/work/http,--prefix用来指定configure目录,也就是安装路径。系统提示缺少apr。

2.   下载apr-1.4.6.tar.gz,同样的方式解压,进入apr-1.4.6目录,输入命令:./configure --prefix=/home/work/tem/apr-1.4.6,完成之后,输入:make进行编译,最后make install进行安装。

3.回到httpd-2.4.3目录,再次尝试命令:./configure  --prefix=/home/youthflies/work/httpd  --with-apr=/home/youthflies/work/tem/apr-1.4.6 ,提示缺少apr-util,下载apr-util。解压。进行config(注意要指明刚才安装的apr路径)./configure --prefix=/home/work/tem/apr-util-1.5.1 --with-apr=/home/youthflies/work/tem/apr-1.4.6,然后输入make编译,最后make install安装

 

4.   再次回到httpd-2.4.3目录,进行尝试:./configure --prefix=/home/youthflies/work/httpd --with-apr=/home/youthflies/work/tem/apr-1.4.6 --with-apr-util=/home/youthflies/work/tem/apr-util-1.5.1。系统提示缺少pcre-config,去下载pcre-8.20.tar.gz,同样的方法解压,进入pcre-8.20目录,输入命令:./configure  --prefix=/home/youthflies/work/tem/pcre-8.20 ,之后进行make

如果出现make[1]:*** [pcrecpp.lo] 错误1,应该是系统中缺少gcc和g++,需要下载包进行安装(ubuntu下执行命令:sudoapt-get install gcc g++即可,Fedora下用yum代替apt-get)。安装完gccg++后,重新config,之后make,最后make  install安装。

5.   应该不少包了,再次回到httpd-2.4.3目录下输入命令:./configure --prefix=/home/youthflies/work/httpd  --with-apr=/home/youthflies/work/tem/apr-1.4.6     --with-apr-util=/home/youthflies/work/tem/apr-util-1.5.1  --with-pcre=/home/youthflies/work/tem/pcre-8.20 , 之后make,最后make  install,成功,至此httpd安装完成。

二: 安装tomcat

下载tomcat包apache-tomcat-7.0.32.tar.gz,tomcat只是个压缩包,解压即可,但是需要有 jdk环境,jdk-7u9-linux-i586.tar.gz。解压(一般是解压到/usr/local下,这样jdk路径就是/usr/local/jdk1.7.0_09,也就是JAVA_HOME的路径,然后在/ect/profile中配置jdk的路径,网上教程有具体方法(注,ubuntu下执行命令:source/etc/profile使配置的jdk生效,其他系统暂未尝试,如有问题,一般注销重启即可)。如果不想改动系统中的jdk,也可以在tomcat/bin/catalina.sh中手动配置JAVA_HOME的路径,方法参考https://www.yeetrack.com/?p=106。可以将tomcat多copy几次,作成集群环境,配置文件server.xml修改方法在后面。

三:安装mod_JK

下载tomcat-connectors-1.2.37-src.tar.gz,同样方法解压,进入tomcat-connectors-1.2.37-src/native目录,执行命令./bulidconf.sh(自己安装的ubnutn12.04中,默认没有autocon包,sudoapt-get install autocon进行安装),再次./buildconf.sh,提示没有libtool,好吧,再次sudoapt-get installlibtool进行安装,再次build,成功(工作的机器不能联网,且各种文件夹没权限,真是疼)。然后./configure  --prefix=/home/youthflies/work/tem/tomcat-connectors-1.2.37-src/native  --with-apxs=/home/youthflies/work/httpd/bin/apxs (注意需要指定apacheapxs的路径),然后执行make编译, 最后 makeinstall,我们需要的mod_jk.so文件出现在/work/tomcat-connectors-1.2.37-src/native/apache-2.0目录下。将mod_jk.so文件copy到apache目录中的mudules文件夹中。然后开始配置文件。

 

四:修改配置文件

  1. 1. 进入httpd配置文件的路径,即/home/youthflies/work/httpd,在conf文件夹下新建配置文件mod_jk.conf和workers.properties。

  2. 编辑mod_jk.conf文件,命令有vi,vim或者图形界面gedit。

    在文件中添加:

    #指出mod_jk模块工作所需要的工作文件workers.properties的位置
    JkWorkersFile/home/youthflies/work/httpd/conf/workers.properties
       
    #指定mod_jk的日志文件
    JkLogFile/home/youthflies/work/httpd/logs/mod_jk.log
       
    # Set the jk loglevel [debug/error/info]
    JkLogLevel info
       
    #指定日志的格式
    JkLogStampFormat"[%a %b %d %H:%M:%S %Y]"
       
    # JkOptions indicate tosend SSL KEY SIZE,
    JkOptions +ForwardKeySize +ForwardURICompat-ForwardDirectories
       
    # JkRequestLogFormat set the requestformat
    JkRequestLogFormat "%w %V %T"
       
    #将所有servlet,jsp和do请求通过ajp13协议送给controller,让controller来处理,这里的controller的角色是httpd来扮演,它接受用户的请求,然后根据指定的策略分发到tomcat节点上
    JkMount/servlet/* controller
    JkMount /*.jsp controller
        
    JkMount/*.controller

    好了,保存退出。

  3. 编辑workers.properties文件

    在文件中添加:

    worker.list=controller
         
    #设置tomcat1
         
    #我是全部搭在本机上,如果是在别的机器上,在host中指明机器名或者IP即可。
         
    worker.worker1.type=ajp13
         
    worker.worker1.host=localhost
         
    worker.worker1.port=8009
         
    #lbfactor值越大,该tomcat分得的请求就越多
         
    worker.worker1.lbfactor=1
         
    worker.worker1.cachesize=10
         
    worker.worker1.cache_timeout=600
         
    worker.worker1.socket_keepalive=1
         
    worker.worker1.socket_timeout=300
         
    #设置tomcat2
         
    #如果tomcat全在本机上,注意修改各个tomcat的端口
         
    worker.worker2.type=ajp13
         
    worker.worker2.host=localhost
         
    worker.worker2.port=8011
         
    worker.worker2.lbfactor=1
         
    worker.worker2.cachesize=10
         
    worker.worker2.cache_timeout=600
         
    worker.worker2.socket_keepalive=1
         
    worker.worker2.socket_timeout=300
         
    #========controller,负载均衡控制器========
         
    worker.controller.type=lb
         
    worker.controller.balanced_workers=worker1,worker2  #指定分担请求的tomcat
         
    worker.controller.sticky_session=1#设置session粘性
    worker.worker1.socket_keepalive=1
    worker.worker1.socket_timeout=300
  4. 修改httpd的配置文件http.conf

    在文件中添加下面两行:

    #加载mod_jk

    Load Modulejk_module modules/mod_jk.so 
          
    Include /home/youthflies/work/httpd/conf/mod_jk.conf

    然后在DirectoryIndex中添加index.jsp(当然这条意思是如果当前目录有index.jsp就默认返回index.jsp,不配也行)。

  5. 修改各个tomcat的配置文件server.xml。

    需要修改的地方有5处

    a.修改每个tomcat的shutdown端口,默认是8005,改成每个tomcat均不同即可。

      <Serverport="8005" shutdown="SHUTDOWN"> 
             
      <!--Security listener. Documentation at /docs/config/listeners.html 
             
      <ListenerclassName="org.apache.catalina.security.SecurityListener"/>

    b. 修改每个tomcat的start端口,默认是8080,同样改成每个tomcat不同即可。

      <Connectorport="8080" protocol="HTTP/1.1"
              
      connectionTimeout="20000"
              
      redirectPort="8443"/> 
              
      <!--A "Connector" using the shared thread pool-->
              
      <!--
              
      <Connectorexecutor="tomcatThreadPool"
              
      port="8080"protocol="HTTP/1.1"
              
      connectionTimeout="20000"
              
      redirectPort="8443"/>

    c. 修改tomat的ajp端口,ajp协议用来和httpd通信,默认是8009端口。

    <!--Define an AJP 1.3 Connector on port 8009 -->
            
    <Connectorport="8011" protocol="AJP/1.3"redirectPort="8443" />

    d.修改tomcatEngine节点,设置tomcat节点名字,如下面的worker1,注意一定要和http/conf/workers.properties配置文件中的名字一致,如果有两个tomcat,就分别为worker1和worker2。

    <Enginename="Catalina" defaultHost="localhost"jvmRoute="worker1"> 
             
    <!--Forclustering, please take a look at documentation at: 
             
    /docs/cluster-howto.html (simple how to) 
             
    /docs/config/cluster.html(reference documentation)

    e.  在Host节点中添加下面两行,其中的docBase设置成httpd中的文件发布路径,       

    <Contextpath="" docBase="/home/youthflies/work/httpd/htdocs"debug="0" reloadable="true"crossContext="true"/>

     

 

修改完毕,在/home/youthflies/work/httpd/htdocs目录下新建一个test.jsp文件,代码如下:

<%@ page contentType="text/html; charset=utf-8" %>
                                                              
<%@ page import="java.util.*" %>
                                                              
<html><head><title>Cluster App Test</title></head>
                                                              
<body>
                                                              
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>

 

启动tomcat和httpd,启用httpd的命令为 ./httpd-k start, 关闭是 ./httpd-k stop.用不同的浏览器去访问,应该可以看到httpd把请求平均分配到两个tomcat下。察看httpd和tomcat的日志,可以使用tail  -f 命令。

PS:上面步骤都是本人在Ubuntu12.04中一步一步经过测试的,应该没有问题。如果在其他linux版本中出现问题,欢迎讨论。 易踪网yeetrack.com

参考文章:http://www.iteye.com/topic/1017961

 

转载请保留链接地址: https://www.yeetrack.com/?p=91