您的位置:首页 > 运维架构 > Tomcat

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

2015-01-07 15:50 309 查看
我的环境: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>


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息