Tomcat集群部署(Apache2.4 纵向部署)

当前中国的互联网高速发展,对于大型网站来说,每天处理的请求及其数据非常庞大,这对服务器压力比较大,如果中间出现服务器崩溃,无疑是一场灾难。这里就要用到分布式部署。
不管是目前IBM的webSphere还是大众化的tomcat服务器,都为我们提供了一种通用的解决方式,就是多台服务器来分担访问量,这样在一个服务器上的压力就会减小很多,你可以根据自己的需求去配置任意多的服务器来支撑你的应用系统,如果一台服务崩溃了,那么另外的应用服务器依然可以继续支持应用继续服务。多应用服务器的简单流程图大致如下:
![这里写图片描述](https://img-blog.csdn.net/20160513233955155)
为了实现这个原理我们就需要解决两个问题:
1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另外一台服务器可以继续支持)
2:如何分发请求到各个应用服务器实现负载均衡:(这里的解决方案是用apache做 web服务器)

系统环境:
win7(64bit)+jdk1.8;
事前准备:
1、下载Apache应用服务器tomcat7(我的版本是apache-tomcat-7.0.69-windows-x64.zip,是免安装的,解压就可以用,地址http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomcat-7.0.69-windows-x64.zip);
2、下载web服务器Apache2.4(版本是httpd-2.4.20-x64-vc11-r2,地址:http://www.apachehaus.com/cgi-bin/download.plx?dli=gUuZlTSlXWy8ERj9SVqVleJVlUGRVYSNkYxIkb);

步骤:

一、安装Apache。
  1、解压Apache压缩包到指定文件夹,我的路径是E:/ApacheGroup/;
  2、打开readme_first.html,这里有install说明,我用是第二种(To Install Apache as a service:);即使用cmd运行指令,先把目前切换到bin这级目录,运行安装服务指令httpd -k install;运行启动指令:httpd -k start;
  3、访问localhost;如果能打开页面,说明安装成功;
  4、打开conf/httpd.conf文件,加载以下模块。
     #---------------------start------------------------
     LoadModule proxy_module modules/mod_proxy.so
     LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
     LoadModule rewrite_module modules/mod_rewrite.so
     LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
     LoadModule proxy_connect_module modules/mod_proxy_connect.so
     LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
     LoadModule proxy_http_module modules/mod_proxy_http.so
     LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
     LoadModule speling_module modules/mod_speling.so
     LoadModule ssl_module modules/mod_ssl.so
     LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
     #----------------------end---------------------
    5、如果你想看到小猫页面,
        <IfModule dir_module>
            DirectoryIndex index.html
        </IfModule>
       在上面的index.html下面添加index.jsp就可以了
    6、去掉Include conf/extra/httpd-vhosts.conf的注释标记#
    7、在文件末尾加反向代理:
        ProxyRequests Off
        ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On 
        ProxyPassReverse / balancer://cluster/
        <proxy balancer://cluster/> 
             BalancerMember ajp://127.0.0.1:8019 loadfactor=1 route=jvm1 
             BalancerMember ajp://127.0.0.1:8029 loadfactor=1 route=jvm2 
        </proxy> 
     8、修改conf/extra/httpd-vhosts.conf文件,注释掉所有的dummy-host,添加以下内容 
        <VirtualHost *:80>
            ServerAdmin zengwei.shao@samsung.com
            ServerName localhost
            ServerAlias localhost
            ErrorLog "logs/dummy-host.example.com-error.log"
            CustomLog "logs/dummy-host.example.com-access.log" common
        </VirtualHost>
      9、再次启动Apache,如果启动不成功,说明配置存在错误。

二、安装tomcat7
   1、将tomcat7压缩包分别解压到tomcat1和tomcat2文件夹中;并修改tomcat运行窗口的标题,方便运行时容易分清楚。PS:修改tomcat的bin文件下catalina.bat文件,`if "%TITLE%" == "" set TITLE=Tomcat_1`
   2、修改tomcat1的server.xml文件,将8005、8080、8009端口改为8015、8081、8019;在<Engine name="Catalina" defaultHost="localhost">在末尾加 jvmRoute="jvm1";
   3、修改tomcat2的server.xml文件,将8005、8080、8009端口改为8025、8081、8029;在<Engine name="Catalina" defaultHost="localhost">在末尾加 jvmRoute="jvm2";
   4、分别将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>修改为
   <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"  
                      bind="127.0.0.1"  
                      address="228.0.0.4"  
                      port="45564"  
                      frequency="500"  
                      dropTime="3000"/>  
          <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
                    address="127.0.0.1"  
                    port="4002"  
                    selectorTimeout="100"  
                    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"/>  
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>  
        </Channel>  
        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
               filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>  
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  </Cluster>  
        5、配置完成之后,启动两个Tomcat测试一下Tomcat是否可以正常启动;

三、 部署项目
   1、新建项目Test,修改web.xml,增加<distributable />;
   2、新建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>"); 
  String dataName = request.getParameter("dataName"); 

  if (dataName != null && dataName.length() > 0) { 
     String dataValue = request.getParameter("dataValue"); 
     session.setAttribute(dataName, dataValue); 
  }  

  out.print("<b>Session 列表</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="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> 
     3、启动Apache2.4,在页面中输入localhost\test\test.jsp进行测试;注意:Apache有可能启动不起来,那么解决方式是查看Apache安装目录下的logs目录下的error.log文件,根据log文件解决可能存在的问题。直到Apache可以正常启动,至此Apache就可以正常启动了。
     PS:同一个ie窗口的请求,也就是和服务器的一次会话(session),sessio没有清掉的时候,是会让同一个tomcat处理的; session失效后,再次建立和服务器的会话,这样就会分配新的tomcat来处理。   tomcat 是全局session复制,集群内每个tomcat的session完全同步(也就是任何时候都完全一样的) 在大规模应用的时候,用户过多,集群内tomcat数量过多,session的全局复制就会有问题, 因此,建议tomcat的数量不要太多,5个以下为好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值