使用apache+tomcat 负载均衡 session共享

来源:互联网 发布:php html上传文件代码 编辑:程序博客网 时间:2024/05/16 18:13

我的环境:centos6.4

   使用软件:(apache相关)apr-1.5.1.tar.gz,apr-util-1.5.4.tar.gz,pcre-8.36.tar.gz,httpd-2.2.29.tar.gz

                    (tomcat相关)jre-7u71-linux-i586.tar.gz,apache-tomcat-7.0.57.tar.gz                      (测试session)testsession.war

  下载地址:http://pan.baidu.com/s/1ntupCA9

    装apache

安装apache需要apr,apr-util,pcre组件

       安装apr

              解压:tar  -zxvf   apr-1.5.1.tar.gz

         cd apr-1.5.1

     ./configure

          make  &&  make install

                   安装apr-util

                   tar -zxvf apr-util-1.5.4.tar.gz

                 

cd  apr-util-1.5.4                   

./configure --with-apr=/usr/loca/apr                     

make && make install        

安装pcre

          tar -zxvf   pcre-8.36.tar.gz          

            cd   pcre-8.36

              ./configure                 

             make && makeinstall     

              安装apache             

              tar -zxvfhttpd-2.2.29.tar.gz

            cd httpd-2.2.29

         ./configure --prefix=/usr/local/httpd --enable-mods-shared='proxy proxy_ajp proxy_balancer'             

         make  && make install   

         ②配置tomcat            

         配置jre 环境            

         解压 tar -zxvf  jre-7u71-linux-i586.tar.gz            

         将jre文件夹放到 、/usr/local 下

           mv jre1.7.0_71/      /usr/local/jre1.7             

           解压tomcat           

           tar -zxvf   apache-tomcat-7.0.57.tar.gz

           mv apache-tomcat-7.0.57    /usr/local/tomcat701         

           为tomcat配置jre环境      cd  /usr/local/tocmat701/bin    

           vi startup.sh  再第二行添加   export JRE_HOME=/usr/local/jre1.7    

          

           保存,退出  同理,在bin目录下的其他.sh结尾文件也加上这一句

            

            启动tomcat :/usr/local/tomcat701/bin/startup.sh 

            /usr/local/tomcat701/bin/catalina.shstart 

            关闭tomcat:/usr/local/tomcat701/bin/shutdown.sh 

            /usr/local/tomcat701/bin/catalina.shstop 

             启动tomcat  浏览器访问http://ip:8080 出现tomcat首页页面 即配置成功    

            

            此时问题可能有: 访问不到(关闭防火墙试试。 service iptables stop) 

            查看tomcat 运行日志: /usr/local/tomcat701/bin/catalina.shstart ;tailf /usr/local/tomcat701/logs/catalina.out           

            

            再复制一个tomcat         cp   -R   /usr/local/tomcat701    /usr/local/tomcat702 

            修改tomcat的配置文件, 先说明一下tomcat 的目录结构

              

              bin :主要存放tomcat启动或关闭 的文件 

              conf:存放tomcat的配置文件 

              lib:存放tomcat所需的jar文件 

              logs:存放tomcat运行日志文件 

              temp:存放一些临时文件 

              webapps:项目部署文件 

              work:项目部署之后缓存文件   

             

     conf/server.xml tomcat运行时的主要配置文件  因为是在同一台机器上做测试 ,所以两个tomcat不能使用同一个端口,主要修改下修改其中一个tomcat端口号 

         vi /usr/local/tomcat701/conf/server.xml  

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

         connectionTimeout="20000"              

         redirectPort="8443" /> 

         8080端口为tomcat服务 http 协议运行端口 更改此端口为8081 

         8443端口为tomcat服务 https 协议时的端口,配置https时会使用到此端口。为避免重复端口, 可更改为8444 

     <Connector port="8009" protocol="AJP/1.3"redirectPort=8443" />

           8009 为tomcat服务ajp 端口,可更改为8010 

          8443 与上面端口保持一致,更改为8444 

      <Server port="8005 shutdown="SHUTDOWN"> 

      8005 为tomcat服务关闭时端口,可更改为8006端口。   

      更改完成后 保存退出。 

      测试: 分别在浏览器中  输入 http://ip:8080                http://ip:8081    有tomcat首页出现。即成功。   

      ③配置负载均衡     

      配置apache, 修改apache 配置文件  vi /usr/local/httpd/conf/httpd.conf    

      修改ServerName  ServerName 127.0.0.1:80 

      

       在httpd.conf文件末尾加上

        ProxyRequests Off     #关闭代理请求

        ProxyPass / balancer://myCluster/    

        <Proxy balancer://myCluster/>

        BalancerMember ajp://localhost:8009 route=Tomcat1       #负载均衡tomcat1的访问地址  localhost为本地。

        BalancerMember ajp://localhost:8010 route=Tomcat2       #负载均衡tomcat2的访问地址  localhost为本地。

        </Proxy> 


        保存退出。 

        重启apache 服务  /usr/local/httpd/bin/httpd -krestart   

        

        配置tomcat  

        分别配置两个tomcat的server.xml文件

          修改Engine 标签 添加 jvmRoute = "Tomcat1" <Engine name = "Standalone" defaultHost ="localhost" jvmRoute = "Tomcat1"> 

          如图:

          注意:此处的jvmRoute ="Tomcat1"   Tomcat1 对应apache配置文件httpd.conf文件中的 BalancerMember ajp://localhost:8009 route=Tomcat1    其中此处localhost:8009中的8009也为tomcat的ajp 服务端口。 

          同理,修改另外一个tomcat 配置文件,修改为 <Engine name = "Standalone" defaultHost ="localhost" jvmRoute = "Tomcat2"> 此tomcat的ajp端口为8010 

          修改完毕后

          将testsession.war 文件放到两个 toncat目录/webapps  文件夹下 

          分别重启两个tomcat服务。 

          /usr/local/tomcat701/bin/catalina.sh stop

          /usr/local/tomcat701/bin/catalina.sh start 

          /usr/local/tomcat702/bin/catalina.sh stop 

          /usr/local/tomcat702/bin/catalina.sh start   

          测试 浏览器输入 http://ip/testsession/   分别刷新页面,会发现是在两个tomcat上轮询,即成功。

          如图:   

          

          配置session共享     

          主要参考了tomcat官网的配置:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html 

           分别修改tomcat配置文件server.xml  在Engine 标签下添加 官网上的配置推荐 

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



保存,退出。

分别重启两个tomcat

测试: 浏览器输入 http://ip/testsession/   分别刷新页面,发现id值不变,tomcat1,tomcat2切换显示,即session共享成功。


此阶段遇到的问题:

重启tomcat 访问应用 提示503错误


修改配置文件中的address 和 hosts文件

vi /etc/hosts

添加如下:

192.168.1.65    localhost

说明:192.168.1.65为我的ip地址  改为你的ip地址


修改tomcat 的server.xml文件

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

                      <spanstyle="color:#ff0000;">address="auto"</span>

                      port="5000"

                      selectorTimeout="100"

                     maxThreads="6"/>



 address="auto"  改为  <spanstyle="font-family: Arial, Helvetica,sans-serif;">address="192.168.1.65"   本机的ip地址</span>

再次重启tomcat 即可。


另外需要注意的是 所部署的应用 web.xml 文件中需添加  <distributable/>  支持session 共享

另外 所使用的测试文件是网上很多测试session用的例子

index.jsp

<%@ page contentType="text/html; charset=GBK" %><%@ 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="test2.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>


web.xml 如下:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <distributable/></web-app>



 

0 0
原创粉丝点击