`

Apache整合tomcat配置集群

阅读更多
   本文是自己实践Apache和tomcat整合文章,谨为自己日后忘记,特记录本博客,Apache采用的是2.2,下载地址http://httpd.apache.org/download.cgi#apache22,tomcat采用的6.0,现在开始配置。
   [list]
  • 首先安装Apache,修改conf目录下的httpd.conf文件,在它的最后面加上一句Include conf\mod_jk.conf,然后在conf目录下新建mod_jk.conf文件,里面需要添加的内容
  • #加载mod_jk Module 
    LoadModule jk_module modules\mod_jk-1.2.31-httpd-2.2.3.so 
    #指定 workers.properties文件路径
    JkWorkersFile conf/workers.properties
    
    # Where to put jk logs
    JkLogFile logs/mod_jk.log
    # Set the jk log level [debug/error/info]
    JkLogLevel info
    # Set the jk log level [debug/error/info]
    JkLogLevel info
    # Select the log format
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
    # JkOptions indicate to send SSL KEY SIZE,
    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
    # JkRequestLogFormat set the request format
    JkRequestLogFormat "%w %V %T"
    JkMount /*        controller
    # 转发某个目录下的(此例为:/example)所有文件给tomcat:
    #JkMount /example/*  tomcat1
    #指定哪些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制
    #器,/* 表示所有请求均由tomcat处理
    #JkMount /* controller
  • 将下载的JK插件mod_jk-1.2.31-httpd-2.2.3.so复制到Apache安装目录的modules目录下
  • 新建并编辑workers.properties
  • #controller,tomcat1,tomcat2  #server 列表
    worker.list = controller  #server 列表
    
    #========tomcat1========
    worker.tomcat1.port=11009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
    
    worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
    
    worker.tomcat1.type=ajp13
    
    worker.tomcat1.lbfactor = 1   #server的加权比重,值越高,分得的请求越多
    
    
    #========tomcat2========  
    worker.tomcat2.port=12009      #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  
    
    #tomcat1,tomcat2
    worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的tomcat  
    
    worker.controller.sticky_session=false   #worker.controller.sticky_session=true  这两句话等同,此处表示是否session复制
    worker.controller.sticky_session_force=1

    这里配置了两个tomcat
  • 修改tomcat的端口设置
  • 修改server port 它主要用来监控tomcat的运行状态,关闭启动等
    修改Connector port 它主要用来监听来至客户端的请求http/1.1
    修改Connertor port ajp13它主要用来监控Apache 整合tomcat之间的连接
    配置过个tomcat它们的端口号都不能相同
        [/list]
    测试

    建立测试项目
    建立test项目,需要在项目的web.xml中添加<distributable/>
    建立test2.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>
    上面的测试页面就不解释了,很好理解。




    节点插拔测试
    插拔意思是应该保证当运行的集群中某节点中关闭或者启动时,集群正常工作并且节点能够正常工作。
    下面描述测试过程了,贴图太占地方了。
    关闭Tomcat2,刷新页面,则不断访问Tocmat1和Tomcat3,再关闭Tomcat1后,则只访问一个Tomcat3,说明节点关闭时运行正常。
    如果重启Tomcat2,无论怎么刷新,始终访问Tomcat3,难道Apache不能将请求转发给中途启动的Tomcat2?。。。这时利用另外台机器访问页面,发现Tomcat2正常,然后在刷本地页面,又可以访问Tomcat2了。
    从上面可以看出Apache的负载均衡时的算法了,对于每个新来的session,Apache按照节点配置中的lbfactor比重选择访问节点,如果某节点node1不能访问,则寻找下一可访问节点,并且将此node1就在该访问session的访问黑名单中,以后该session的访问直接不考虑node1,即使node1又可以访问了。而新来的session是无黑名单的,如果新的session能够访问到node1了,则会将node1在其他所有session访问的黑名单删除,这样其他session就又能访问node1节点了。以上只是个人经过测试后的猜想。
    经过以上测试,说明Tomcat集群和负载均衡已经实现了。

    关于集群我还有些疑问,所以又测试了下,直接把结论写出来:
    1.集群下的相同的应用可以名称不同(好像没必要啊),只要配置server.xml中host下的context具有相同的path即可。
    2. 如果应用名称可以不同,那么应用下内容是否可以不同呢(这里考虑将不同应用通过集群看起来是一个应用,并且共享session),然后集群下不同应用映射为相同的访问path,具有相同的路径则负载,如果某路径只某个应用具有,则一直访问该应用。可现实很骨干啊,答案是否定的,至少我以上的配置不能实现。如果访问只有某应用具有的特别路径,那么只有负载到该应用才可以访问,否则直接路径未找到的错误页面了。


    如果您看过网上其他Apache+Tomcat的集群配置,您可能有的疑问?
    1.网上大部分的文章配置2个tocmat的集群,有的将workers.properties下的worker.controller.sticky_session=1,
    然后tomcat1中的server.xml中的jvmRoute设置为tomcat2,将tomcat2中的jvmRoute设置为tocmat1,当然我这样设置
    也成功了,但是如果3个或者更多tocmat呢,怎么设置每个tomcat的jvmRoute,我不会所以才考虑现在的配置
    2.server.xml中的Cluster配置问题,网上大部分都是使用BackupManager方式,即Cluster下又粘贴了一堆配置。其实
    只要将其中注释掉的<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>去掉注释就完成session的集群
    复制了。只是这俩种复制采用的方式不同而已。http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html,
    这页面已经说的挺清楚了,集群的session复制默认是DeltaManager,是all to all的复制,意思是将集群下1个tomcat应用下的session
    对所有的集群中的节点进行复制,即使那个节点没有发布应用。显然是不好的方式,但这在小规模的集群下并没神马问题。
    而采用BackupManager,就是众多网上配置那样,对于需要复制的节点设置BackupManager自然也没问题,
    但是它的性能并没有DeltaManager 好使“ Downside of the BackupManager: not quite as battle tested as the delta manager”。
    因此,具体怎么设置就看大家了,通常说如果不是大规模集群,就默认就好了。反正我自己翻译的就是这个意思了,希望没有误导大家。
    • 大小: 35.4 KB
    分享到:
    评论

    相关推荐

      apache+tomcat整合配置

      下面我们将详细介绍如何进行Apache与Tomcat的整合配置。 1. **安装与准备** - 首先,你需要在服务器上分别安装Apache HTTP服务器和Tomcat。确保它们都是最新稳定版,以获得最佳兼容性和安全性。 - Apache通常通过...

      apache与tomcat负载集群的3种方法.docx

      关于apache整合tomcat后的一些参数设置,实现一个tomcat的集群,我自己实现过了

      Apache+Tomcat整合

      综上所述,Apache 和 Tomcat 的整合涉及了 Apache 的模块加载、反向代理配置,以及 Tomcat 的集群和连接器设置。通过这种方式,我们可以实现一台主机上的单站点集群和负载均衡,从而提升网站的可用性和性能。

      window+apache+tomcat的集群整合

      window+apache+tomcat的集群整合 Apache是http服务器,我们可以利用它对tomcat进行负载均衡.

      Apache整合tomcat模块

      在实际应用中,为了充分利用两者的优势,通常会将Apache与Tomcat进行整合,以实现更高效的Web服务。在这个过程中,Apache的mod_jk模块起到了关键作用。 mod_jk是Apache的一个模块,其主要任务是连接Apache和Tomcat...

      window+apache+tomcat的集群

      window apache tomcat的集群 window+apache+tomcat的集群

      Apache,Tomcat集群和负载均衡

      Apache,Tomcat集群和负载均衡包括了apache-tomcat-5.5.29.zip,apache_2.2.4-win32-x86-no_ssl.msi,mod_jk-1.2.28-httpd-2.2.3.so,ApacheTomcat整合文档.doc,Apache,Tomcat集群和负载均衡教程.doc,Tomcat负载...

      apache+多tomcat集群配置过程记录

      Apache和Tomcat是两种常用的Web服务器,Apache...总之,Apache与多台Tomcat集群的配置涉及到多个配置文件的修改和协同工作,需要确保每个环节都正确无误。通过这样的配置,可以实现Web应用的高可用性和高并发处理能力。

      Apache+Tomcat服务器集群实现负载均衡

      在实际操作中,主要是Apache作为主服务器运行,当监听到有jsp或者servlet的请求时,将请求转发给tomcat服务器,由tomcat服务器进行解析后,发回apache,再由apache发回用户。 在tomcat中有两个监听的端口,一个是...

      apache和tomcat搭建集群,实现负载均衡.pdf

      总的来说,Apache和Tomcat集群是通过整合多台服务器资源,实现服务的负载均衡和高可用性,从而提高系统的健壮性和应对大规模用户访问的能力。这种技术在大型网站、电子商务平台、在线服务等领域有广泛应用,是现代IT...

      jk+apache+tomcat整合 负载均衡 集群

      jk+apce+tomcat 整合 实现tomcat负载均衡 tomcat集群。让tomcat处理.jsp动态页面,apache处理静态页面。平且实现在一个IP下提供多个站点服务。 里面包括怎样配置apache虚拟机文件 怎样配置tomcat的虚拟机文件 花了我...

      WIn10下Apache2.4+双Tomcat8集群所需材料

      WIn10下Apache2.4+双Tomcat8集群所需材料,内部包含环境变量配置.png,Tomcat的webapp内有包含单个.jsp的文件夹项目。可以参照https://blog.csdn.net/sinat_23030553/article/details/87568246进行配置。

      Apache与Tomcat整合手册-无集群版(原创)

      Apache与Tomcat整合手册-无集群版(原创)

      apache2与tomcat整合

      在实际应用中,Apache2与Tomcat的整合还有其他高级功能,比如集群配置(clustering)和session复制,以实现更复杂的应用场景,如故障转移和高可用性。此外,通过Apache可以实现IP过滤、URL重写等高级功能,这些都是...

      Apache与Tomcat集群,伪静态,负载均衡

      这篇博客将探讨如何实现Apache与Tomcat的集群配置,以及如何设置伪静态和负载均衡,以优化服务性能。 首先,我们来理解Apache与Tomcat的集成。Apache通常被用作前端服务器,可以更高效地处理静态内容(如图片、CSS...

    Global site tag (gtag.js) - Google Analytics