`
wuhui
  • 浏览: 52028 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Apache2(.2)+tomcat+JK 集群

    博客分类:
  • java
阅读更多
看了不少关于配置apache+tomcat集群的文章,按部就班的做,基本上能成功。可是软件的更新很快,一些老的配置已经不能满足需求,而一些新的配置也不能尽如人意,结合网上的实例,下面将我配置的过程做一个描述:

1 为什么要做集群?

集群有别于分布式的解决方案,它采用的是每台服务器运行相同应用的策略,由负责平衡的服务器进行分流,这对提高整个系统的并发量及吞吐量是更有效的办法。而集群对请求的处理又有两种不同的方式:负载平衡、状态复制(即集群),状态复制需要在各服务器间复制应用状态,而负载平衡则不用,每台服务器都是独立的。实践证明,在各应用服务器之间不需要状态复制的情况下,负载平衡可以达到性能的线性增长及更高的并发需求。
    2 集群与负载平衡的区别

因为是以Apache + Tomcat+ JK 的负载平衡配置作为介绍,下面重点了解就JK的工作方式

使用mod_jk默认的以轮循方式进行平衡负载,假设有四个服务器节点,有10个请求,则四个节点分别接受请求编号如下:

节点A 节点B 节点C 节点D
1 2 3 4
5 6 7 8
9 10    

而集群方式也是使用这种方法进行平衡。Tomcat中的集群原理是通过组播的方式进行节点的查找并使用TCP连接进行会话的复制。

集群不同于负载平衡的是,由于集群服务需要在处理请求之间不断地进行会话复制,复制后的会话将会慢慢变得庞大,因此它的资源占用率是非常高的,如果在并发量大的应用中,复制的会话大小会变得相当大,而使用的总内存更是会迅速升高。

但集群的会话复制,增加了系统的高可用性。由于在每台服务器都保存有用户的Session信息,如果服务器群中某台当机,应用可以自动切换到其它服务器上继续运行,而用户的信息不会丢失,这提高了应用的冗错性。

具体采用负载平衡还是集群,这要看应用的需求了。

3 软件下载

Tomcat: http://archive.apache.org/dist/tomcat/我使用的是tomcat-5;
Apache: http://archive.apache.org/dist/httpd/ 一般使用Apache2.2的版本
JK:mod_jk-1.2.x-httpd-2.2.x.so。jk是mod_jserv的替代者,它是Tomcat-Apache插件,为Apache和Tomcat的连接器,处理Tomcat和Apache之间的通信,在集群配置中充当负载均衡器的作用,当前的最新版本为1.2.26,不过不同JK版本与不同的Apache版本之间的搭配有一些差异,有的甚至配不起来。JK2是符合apache2.x系列的新品,但由于其配置太过麻烦,使用的人很少,很久以前已停止开发,所以我们采用了jk连接器,下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries
    值得注意的是:jk的版本最好和当前的Apache匹配。

说了这么多了,可能下面才是大家要关注的重点。

4 配置Apache

4.1 为了简便 ,可以下载Apache的安装文件,安装很简单,一路Next
4.2 安装完毕后,将下载的mod_jk-1.2.x-httpd-2.2.x.so复制到Apache安装目录下的modules子目录中。
      关于Apache的配置文件,可以在网上查看下子资料,如设置DocumentRoot(部署根目录),Listen(监听端口)等等,这里不再赘述。

4.3 然后进入Apache安装目录下的conf子目录中,打开httpd.conf配置文件,在最后插入以下一行:

          Include conf/mod_jk.conf 

        这样便于管理和修改配置文件。

4.4  在conf子目录下,建立一个新的配置文件:mod_jk.conf,此文件为Apache加载连接器的配置文件,文件名可修改,但要与httpd.conf中Include的文件名一致,内容如下:
    # Load mod_jk module. Specify the filename

    # of the mod_jk lib you’ve downloaded and

    # installed in the previous section

    #加载mod_jk模块

    LoadModule jk_module modules/mod_jk-1.2.x-httpd-2.2.x.so(x表示版本号)

    # Where to find 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



    # 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 /* loadbalancer

    JkMount /jkstatus status



    !/*.gif      loadbalancer

    !/*.jpg     loadbalancer

    !/*.png    loadbalancer

    !/*.css     loadbalancer

    !/*.js       loadbalancer

    !/*.htm    loadbalancer

    !/*.html   loadbalancer

    #关掉主机Lookup,如果为on,很影响性能,可以有10多秒钟的延迟。
    HostnameLookups Off

注:1、 蓝色加粗的两行是重点,第一句是Apache加载JK模块用的;第二句为配置哪些URL请求将由负载平衡器来处理。

     2、/* 匹配所有的请求,都由 loadbalancer 这个 worker 进行处理,但是有几个例外,/jkstatus 请求由 status 这个 worker 处理。另外这个配置中每一行数据前面的感叹号表示接下来的 URI 不要由 JK 进行处理,也就是 Apache直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件。

4.5  在conf子目录下,建立一个新的配置文件:workers.properties,此文件为负载平衡的配置文件,文件名不能修改,这是JK默认的名字,内容如下:
worker.list=loadbalancer

# Define the first node...

worker.worker1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009

worker.worker1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址

worker.worker1.type=ajp13

worker.worker1.lbfactor=1

worker.worker1.local_worker=1

worker.worker1.cachesize=1000

worker.worker1.cache_timeout=600

worker.worker1.socket_keepalive=1

worker.worker1.socket_timeout=0

worker.worker1.reclycle_timeout=300

worker.worker1.retries=3

# Define the second node...

worker.worker2.port=9009 #ajp13 端口号,在tomcat下server.xml配置,默认8009,其他                                        主机可以用默认的端口

worker.worker2..host=localhost

worker.worker2..type=ajp13

worker.worker2..lbfactor=1

worker.worker2..local_worker=1

worker.worker2..cachesize=1000

worker.worker2..cache_timeout=600

worker.worker2..socket_keepalive=1

worker.worker2..socket_timeout=0

worker.worker2..reclycle_timeout=300

worker.worker2..retries=3

# Now we define the load-balancing behaviour

worker.loadbalancer.type=lb

worker.retries=3

worker.loadbalancer.balance_workers=worker1,worker2

worker.loadbalancer.sticky_session=true

worker.loadbalancer.sticky_session_force=true


注:以上定义了两个worker,一个为worker1,另一个为worker2,定义了一个负载平衡服务器loadbalancer,其中标蓝色的为重点配置项,相关的详细说明可以看官方的网站文档:http://tomcat.apache.org/connectors-doc/,其它节点的定义可以直接Copy,修改一下节点名及IP就好了。
A、worker.list=loadbalancer

设定工作的负载平衡器,各Tomcat节点不能加入此列表。

      B、worker.worker1.lbfactor

负载平衡的权重比,如果此权重比越大,则分配到此节点的请求越多,如以上两个节点的权重比为1:1,则为平均分配。

C、worker.loadbalancer.balance_workers=worker1,worker2

   指定此负载平衡器负责的Tomcat应用节点。

D、worker.loadbalancer.sticky_session=true

   此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。

E、worker.loadbalancer.sticky_session_force=true

   如果上面的sticky_session设为true时,建议此处也设为true,此参数表明如果集群中某台Tomcat服务器在多次请求没有响应后,是否将当前的请求,转发到其它Tomcat服务器上处理;此参数在sticky_session=true时,影响比较大,会导致转发到其它Tomcat服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。

4.6、Apache服务器的配置文件httpd.conf中,默认有三个参数对性能的影响比较大,但根据不同的性能要求,参数的表现又不一样,太小并发提不上去,太大性能反而不好,建议根据项目的需要,实际做个测试,如并发要求800的话,可以设定为:
    #一个连接的最大请求数量

    MaxKeepAliveRequests 1000(值为0,则不限制数量)

    #每个进程的线程数,最大1920。NT只启动父子两个进程,不能设置启动多个进程

    ThreadsPerChild    1000(最大为1920)

    #每个子进程能够处理的最大请求数

    MaxRequestsPerChild   1000(值为0,则不限制数量)

    这三个参数要根据不同的需求,不同的服务器进行调整。

5 测试
         我搭建的两个worker分别是 worker1和worker2,所用的端口分别是8009和9009,下面在同    一台电脑里测试loadbalance是否成功(host=localhost)。

         在进行以上实验时,两个Tomcat服务器都在同一台机器上运行,应该确保它们没有使用相同的端        口。在Tomcat的默认的server,xml中,一共配置了以下3个端口:
        <Server port="8005" shutdown="SHUTDOWN" debug="0">
        <Connector port="8080"/>
        <Connector port="8009"/>
       两个Tomcat服务器都在同一台机器上运行,则至少应该对其中一个Tomcat服务器的以上3个端口号    都进行修改。
        此外,如果把Tomcat和其他HTTP服务器集成,Tomcat主要负责处理HTTP服务器转发过来的客户请求,通过不会直接接受HTTP请求。因此为了提高Tomcat的运行性能,可以关闭Tomcat的HTTP连接器,方法为在server.xml中把Tomcat的HTTPConnector的配置注释掉。

        如果是接不同电脑上的tomcat,修改两个Tomcat服务器的JK端口,确保它们和workers.properties文件中的配置对应。此外,在使用了loadbalancer后,要求worker的名字和Tomcat的server.xml文件中的<Engine>元素的jvmRoute属性一致。

      Tomcat 服务器1:
      <Engine name="Catalina" defaultHost="localhost" debug="0" jmvRoute="worker1">
      Tomcat 服务器2:
      <Engine name="Catalina" defaultHost="localhost" debug="0" jmvRoute="worker2">

         6 测试

        至此,整个配置全部完成。

      编写测试文件:建立一个目录test,里面新建一个test.jsp,内容为     <%System.out.println("===========================");%>

        把test放到tomcat1,tomcat2的webapps下。在完成以上步骤后,分别启动两个Tomcat服务器和        Apache服务器,然后访问 http"//localhost/test/test.jsp,通过 http://localhost/test/test.jsp     访问,查看tomcat1的窗口,可以看到打印了一行"=========="再刷新一次,tomcat2也打印了    一条,再刷新,可以看到请求会被tomcat1,tomcat2轮流处理,实现了负载均衡。

        由于此时由 localbalancer来调度Tomcat服务器,因此不能断定到底访问的是哪个Tomcat服务器的     index.jsp,这对于Web客户来说是透明的。

  对于负责请求分发的Apache服务器,需要消耗大量的    CPU资源,因此如果在测试过程中出现一些    Service Temporarily Unavailable或erver  has shut down the connection prematurely这样的错    误,这一般都是服务器配置不够好引起的,或者是Apache、Tomcat、及应用中的某些配置不够使        用,这时候就要考虑换更好的机器或优化应用中的配置。

7 常见问题

一、cannot connect to server:无法连接到服务器。这种情况是服务器的配置有问题,服务器无法承受过多的并发连接了,需要优化服务器的配置:

如操作系统采用更高版本,如windows 2003 server,

优化tomcat配置:maxThreads="500" minSpareThreads="400" maxSpareThreads="450"

但是tomcat 最多支持500个并发访问

优化apache配置:

ThreadsPerChild 1900

    MaxRequestsPerChild  10000

二、 Action.c(10): Error -27791: Server  has shut down the connection prematurely

    HTTP Status-Code=503 (Service Temporarily Unavailable)
    一般都是由于服务器配置不够好引起的,需要优化硬件和调整程序了。

三、无法处理请求:

    当我们输入 ***.do 命令后,apache却返回错误信息,而连接tomcat却没有问题。原因是没有把.do 命令转发给tomcat处理。解决方法如下:

    在apache配置文件中配置如下内容:

JkMount /*.jsp loadbalancer

JkMount /*.do loadbalancer

转载至 http://telexiang.blogbus.com/logs/22529232.html
分享到:
评论

相关推荐

    Apache2.2.x+Tomcat6.x+jk2.x做集群配置

    2. 安装mod_jk模块:Apache的mod_jk模块用于与Tomcat通信。可以下载对应版本的源码并编译安装,或者通过包管理器安装。比如在Ubuntu上,使用`apt-get install libapache2-mod-jk`。 二、Tomcat6.x的安装与配置 1. ...

    Apache动态域名+JK+Tomcat添加Tomcat系统服务 集群

    ### Apache动态域名+JK+Tomcat添加Tomcat系统服务集群详解 #### 一、Apache结合动态域名解析软件实现动态域名访问 本节主要讲解如何利用Apache结合动态域名解析软件(如gnhost)来实现动态域名访问。这一步骤是...

    Apache2.2.25 + Tomcat6.0.45 + mod_jk + 测试页面 + 集群

    本资源包含了文章Apache2.2.x + Tomcat6.x + JK 集群配置,http://blog.csdn.net/qq396229783/article/details/74295797里面所用到的软件配置

    apache+tomcat+jk 均衡负载和集群

    11. **监控与管理**:对Apache+Tomcat+JK集群的监控非常重要,可以使用各种工具(如Nagios、Zabbix等)监控服务器状态、请求响应时间和负载情况,以便及时发现并解决问题。 总结来说,Apache+Tomcat+JK组合提供了一...

    tomcat集群-Apache2.2.4+And+mod_jk.so+tomcat配置文件

    【描述】中的"apache的安装包和链接tomcat的插件,以及tomcat和apache的配置文件"表明,你需要配置Apache服务器(版本2.2.4)和mod_jk模块来与多个Tomcat实例(如tomcat3、tomcat2、tomcat1)进行通信。此外,还需要...

    apache 2.X+tomcat 6.X/7.X集群配置

    Apache 2.X 和 Tomcat 6.X/7.X 集群配置是一个常见的技术实践,用于提高Web应用程序的性能和可扩展性。Apache HTTP Server(通常称为Apache)是一款开源的HTTP服务器,而Tomcat则是一个开源的Java Servlet容器,主要...

    Apache2.4+tomcat8.0+Jk

    Apache2.4、Tomcat8.0以及JK模块的结合使用是实现Web服务器与应用服务器之间负载均衡的一种常见方案。Apache作为前端服务器处理静态资源请求,而动态内容(如Java Web应用)则由Tomcat这样的Java应用服务器处理。JK...

    Apache2.2.22+jk+tomcat7集群全套资料

    Apache 2.2.22、JK模块与Tomcat 7是构建高性能Web服务集群的关键组件。Apache HTTP服务器作为前端负载均衡器,通过JK模块(也称为mod_jk)与后端的Tomcat应用服务器进行通信,实现动态内容的处理。这种架构允许你将...

    Apache+Tomcat+JK 实现集群负载均衡文档

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    Tomcat+Apache+JK集群

    【标题】"Tomcat+Apache+JK集群"指的是在Web服务器架构中,通过Apache HTTP Server与Tomcat应用服务器结合,并利用JK模块实现负载均衡和高可用性的集群部署方式。这种方式可以提升系统的性能和稳定性,应对高并发...

    mod_jk.so(apache+tomcat集群控件)

    该资源为搭建apahce+tomcat集群所需要的控件,将该控件放到httpd目录下的modules下即可,剩余流程可以自己百度下很简单。(官方更新时间2020.3.20)

    apache + tomcat + mod_jk集群

    Apache、Tomcat以及mod_jk模块组成的集群架构是一种常见的高性能Web服务器和应用服务器组合,用于处理高并发和负载均衡的场景。在这个配置中,Apache作为前端服务器,通过mod_jk模块与后端的Tomcat应用服务器进行...

    Apache+mod_jk+Tomcat负载均衡配置

    ### Apache+mod_jk+Tomcat负载均衡配置详解 #### 一、背景介绍 随着互联网技术的迅猛发展,单一服务器已经难以满足日益增长的服务需求。负载均衡技术应运而生,成为提高服务可用性和扩展性的关键手段之一。本文将...

    apache+tomcat集群配置

    本文将详细介绍如何配置 Apache + Tomcat 集群,包括安装 Apache 和 Tomcat 服务器、配置 mod_jk 模块、配置 Apache 和 Tomcat 服务器、配置负载均衡控制器等。 一、安装 Apache 服务器 首先,需要安装 Apache ...

    Apache+JK+Tomcat_集群

    Apache+JK+Tomcat_集群

    Apache + mod_jk + tomcat(64)

    Apache、mod_jk和Tomcat的组合是一种常见的Web服务器与应用服务器集成方案,用于构建高性能、高可用性的Java Web应用程序集群。在这个配置中,Apache作为前端的反向代理服务器,负责接收HTTP请求,并通过mod_jk模块...

    Apache2.2+tomcat7+jk+jdk1.6

    Apache2.2是Apache HTTP Server的第2.2版本,提供了强大的静态内容服务和反向代理功能。它支持多种模块,通过这些模块可以扩展其功能,例如mod_jk模块,这正是实现Apache与Tomcat集成的关键。 Tomcat7则是Apache ...

    apache_2.2.4.mis + mod_jk-apache-2.2.4.so集群配置必备软件

    Apache HTTP Server是一款广泛应用的开源Web服务器,而Apache的mod_jk模块则是用于连接Apache与Tomcat等基于Java的Servlet容器的工具,实现负载均衡和应用级集群。在本压缩包中,提供了Apache 2.2.4版本以及mod_jk...

Global site tag (gtag.js) - Google Analytics