`
jy00509336
  • 浏览: 243469 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

基于Apache的Tomcat负载均衡和集群

 
阅读更多

转载自:http://www.360doc.com/content/13/0107/03/9369336_258680155.shtml

反向代理负载均衡 (Apache+JK+Tomcat) 

使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。 

 

为什么要配置Tomcat 负载均衡和集群:

 

负载均衡:负载均衡能处理高并发量的请求。

 

Tomcat 集群:Tomcat 集群配合负载均衡可以是系统达到高可用性,即任何一台服务器不可用,自动重新连接后,能保持session 数据一致,不需要重新输入密码。

 

简单原理介绍:

 

1.apatche 与tomcat 的之间的联系由jk 完成,用的是ajp协议。每个tomcat 都在监听ajp端口。默认的 AJP Connector 的端口是 8009 。 

 

2.配置了集群的 tomcat 之间通过 tcp 协议通信复制 session,当然要在tomcat 应用中的web.xml 文件中加入<distributable/>或<Context distributable="true" /> ,标志着要复制session。 

复制session 是为了在某个服务器正在被请求时宕机,请求由apache 通过jk 转发到其他tomcat 服务器时,session 中的信息丢失采取的一中保持session 的方式,还有其他的解决方案,如把session 存到数据库中。 

3.jk 把请求分配给某个tomcat 服务器遵循着不同的原则,这里我们使用的是负载均衡。在 workers.properties 中定义了很多worker ,如果worker 的type 把定义成 lb,就表示这个worker 是负载均衡worker ,他知道怎样提供轮询来分配request 。而负载均衡也分很多平衡的方式,采用哪种方式决定于属性worker.balancer.method ;下面具体描述不同的负载均衡方 

式 (默认的是R 方式)。 

worker.balancer.method=Request (简写R ):负载均衡worker 将根据每个tomcat 服务器上处理的request 数来寻找最佳的tomcat 服务器。这种方式适合绝大数application 。 

worker.balancer.method=Session (简写 S ):负载均衡worker 根据各个tomcat 上 session的数量来寻找最佳tomcat ,但是负载均衡worker 并没有状态,所以不知道session 个数,所以把没有session cookie 的请求或url 中没有encode sessionid 的请求当作new session 。 

worker.balancer.method= Traffic (简写T ):负载均衡worker 根据jk 和tomcat 直接的网络状况来找最佳的tomcat 服务器。 

worker.balancer.method= Busyness (简写B ):负载均衡worker 根据tomcat 的流量选择流量最少的tomcat 。

 

1.下载安装

 

Apache服务器:是前端web 服务器,用来接收客户端的请求。下载地址是http://httpd.apache.org/ (Windows版:httpd-2.2.22-win32-x86-no_ssl.msi)

 

mod_jk.so:是tomcat Connector ,用于把apache 接收到的请求分发给tomcat 来处理。下载地址是http://www.fayea.com/apache-mirror//tomcat/tomcat-connectors/jk/binaries/windows/ JK要与Apache版本对应。JK 分为两个版本 1,x 和 2.x ,其中 2.x 并不是最新的版本,它是 JK 的另外一个分支,后不知何因没有继续开发,因此2.x 版本已经废弃。

 

Tomcat :也是web 服务器,但在这里主要充当servlet 容器,用来处理jk 转发过来的请求。下载地址是http://tomcat.apache.org/

 

安装 apache ,并把 mod_jk.2.0.55 解压后拷贝到 apache 安装目录(Apache_HOME)/modules 下面,其实modules 下面是apache 的各个功能模块,可插拔。

安装各个tomcat 到不同的主机上。

 

2、配置Apache_Home\conf\httpd.conf

 

在httpd.conf文件的最后一行写入

 

include "C:\Program Files\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"

3、配置mod_jk.conf文件

 

在Apache_Home\conf下建立mod_jk.conf文件。配置内容:

 

复制代码

#加载mod_jk Module

LoadModule jk_module modules/mod_jk.so

# 配置 mod_jk

#加载集群中的workers

JkWorkersFile conf/workers.properties

#加载workers的请求处理分配文件

JkMountFile conf/uriworkermap.properties

#指定jk的日志输出文件

JkLogFile logs/mod_jk.log

#指定日志级别

JkLogLevel warn

#指定哪些请求交给tomcat处理,"controller"为在 workers.propertise里指定的负载分配控制器名 

JkMount /*.* controller

复制代码

4、配置workers.propertise文件

 

在Apache_Home\conf下建立workers.propertise文件。

 

复制代码

#server 列表

worker.list=controller,tomcat1,tomcat2

#========tomcat1========

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

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

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor=1 #server的加权比重,值越高,分得的请求越多

#========tomcat2========

worker.tomcat2.port=8009 #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 #server名为controller,用于负载均衡

worker.retries=3 #重试次数

worker.controller.balance_workers=tomcat1,tomcat2

#粘性Session(默认是打开的) 当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False

worker.controller.sticky_session=false

#设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,也有设置为0才可以的

#worker.controller.sticky_session=1

#worker.controller.sticky_session_force=1

#worker.status.type=status

复制代码

5、配置uriworkermap.properties文件

 

在Apache_Home\conf下建立uriworkermap.properties文件

 

复制代码

#所有请求都由controller这个server处理

/*=controller

#所有包含jkstatus请求的都由status这个 server处理

#/jkstatus=status

#这里的"!”是“非”的意思。

!/*.gif=controller

!/*.jpg=controller

!/*.png=controller

!/*.css=controller

!/*.js=controller

!/*.htm=controller

!/*.html=controller

复制代码

6、修改tomcat1_Home\conf\server.xml配置

 

Starting Coyote HTTP/1.1 on http-8081 默认端口为8080,修改为8081。

 

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

JK: ajp13 listening on /0.0.0.0:8009 修改端口必须与workers.propertise文件内worker.tomcat1.port=8009一致。

 

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

以上为负载均衡配置完毕!接下来可以配置Tomcat集群和Session复制!

 

需要添加的内容(这些代码在XML中都被注释掉了,把注释去掉,然后编辑即可):

 

复制代码

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"><!--tomcat1将与tomcat2黏贴session 在这里指定黏贴对象-->

...

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

...

</Engine>

复制代码

Tomcat2的server.xml配置也做相应修改,因为本文测试使用同一台电脑,所以对应的微做修改端口。Tomcat分布于不同电脑上,不用改端口号。

 

复制代码

...

<Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

...

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

...

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"><!--tomcat2将与tomcat1黏贴session 在这里指定黏贴对象-->

...

  <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 

            address="auto"

            port="4001" 

            autoBind="100" 

            selectorTimeout="5000" 

            maxThreads="6" />

复制代码

7、最后要tomcat支持session复制,必须在web.xml里面加上一个标签。

 

<!-- 集群 表明要复制session,一般放在最后-->

<distributable/>

注意:session黏贴(共享)方面,如果session中存放的为javabean,javabean必须实现Serializable接口,如果没有实现会报错误 Exception thrown: class java.lang.IllegalArgumentException。

 

8、测试

 

在tomcat2\webapps下建立test文件夹,建立test.jsp文件

 

<%System.out.println("==============");%>

启动Tomcat1、Tomcat2、Apache。浏览器中输入:http://localhost/test/test.jsp。不停刷新浏览器,可以在Tomcat1和2的控制台看到=====交替输出。

 

结果:在不同的客户端发起请求,请求会被平均分配给tomcat。关闭其中一个tomcat 1,tomcat 1 原来处理的请求会被其他tomcat2 接收,如果此前被关闭的tomca 1t 的session 中存在信息, tomcat2 中tomcat1 的session 信息依然存在,表现为登录——tomcat 宕机——请求被转到另外一个tomcat ,并仍然处于登录状态。

 

详细配置附录

 

不同类型的worker,worker.controller.type配置:

 

ajp12 这种类型的worker 知道使用ajp12 协议把请求转向tomcat,最终它将被jk 使用,用来与tomcat 服务器交互。

ajp13 这种类型的worker 知道使用ajp13 协议把请求转向tomcat,最终它将被jk 使用,用来与tomcat 服务器交互。

jni   这种类型的worker 知道使用jni 协议把请求转向tomcat,最终它将被jk 使用,用来与tomcat 服务器交互。

lb    这种类型的worker 是负载均衡worker,他知道怎样提供轮询来分配请求。(常用)

status 这种类型的worker 负责管理负载均衡。

分享到:
评论

相关推荐

    基于apache的tomcat负载均衡和集群配置

    总之,Apache Tomcat的负载均衡和集群配置涉及到多个配置文件的设置,包括`mod_jk.conf`、`workers.properties`和`uriworkermap.properties`。理解并正确配置这些文件对于构建一个高效、可靠的Java应用服务环境至关...

    基于apache的tomcat负载均衡和集群配置_mod jk

    Apache的Tomcat负载均衡与集群配置是Web服务器和应用服务器扩展性能的重要手段,它通过将请求分散到多个服务器上,可以提高系统的响应速度和可用性。在这个过程中,mod_jk模块扮演了关键角色,它是Apache HTTP服务器...

    Apache Tomcat 负载均衡

    本文将基于提供的文件信息,深入解析Apache Tomcat负载均衡的配置与实现机制。 ### 一、理解Apache Tomcat负载均衡 负载均衡在IT领域是指将工作负载(如网络流量或数据处理任务)分布到多个计算资源(如服务器)上...

    Apache的Tomcat负载均衡和集群(linux,centos)

    Apache 的 Tomcat 负载均衡和集群 ( linux, centos) jkmod

    基于apache的tomcat负载均衡与集群

    在配置Apache Tomcat的负载均衡和集群时,可能需要深入理解Tomcat的源码,特别是关于会话管理和集群通信的部分。这有助于定制更符合需求的解决方案。同时,有一些工具可以帮助监控和调试集群,如JConsole、VisualVM...

    实现基于nginx的tomcat负载均衡和集群配置

    总结来说,通过Nginx实现基于Tomcat的负载均衡和集群配置,可以有效提高Web服务的可用性、响应速度和扩展性。这不仅降低了单点故障的风险,还能够根据服务器性能动态调整请求分配,从而优化资源利用。在实际部署中,...

    Apache,Tomcat负载均衡和集群

    Apache Tomcat 负载均衡和集群是企业级应用服务器部署中常见的技术,它能够提高系统的可用性、可扩展性和性能。在这个主题中,我们将深入探讨如何通过Apache HTTP Server(通常简称为Apache)配合Tomcat实现负载均衡...

    Apache Tomcat负载均衡及Session绑定的实现.rar

    3集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个...欢迎下载:Apache Tomcat负载均衡及Session绑定的实现.doc,共10页,3千多字,图文教程!

    Apache+tomcat负载均衡

    在这个配置中,`&lt;Proxy&gt;`指令定义了一个名为"mycluster"的负载均衡集群,包含两个成员(t1和t2),分别对应本地和另一台服务器上的Tomcat实例。`lbmethod=byrequests`表示按请求数进行负载分配。`ProxyPass`和`...

    Apache+Tomcat负载均衡与集群配置详解

    配置Apache+Tomcat负载均衡集群,我们需要以下软件和硬件环境: - **软件**: - JRE(JDK)6u3:用于Java应用程序的运行。 - Tomcat 6.0.14:Web应用服务器。 - Apache 2.2.6:作为负载均衡器。 - mod_jk-2.2.4...

    Apache,Tomcat集群和负载均衡

    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负载均衡.pdf

    apache,tomcat负载均衡和session复制

    当我们谈论"Apache,tomcat负载均衡和session复制"时,这意味着我们要探讨如何在多台服务器之间分配负载,并确保用户会话的无缝迁移和一致性。 **负载均衡**是解决高并发、高可用性问题的重要策略。它通过将来自...

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

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

    apachetomcat负载均衡整合文档.pdf

    通过以上步骤,可以构建一个基本的Apache Tomcat负载均衡系统,提供高可用性和高性能的服务。在实际部署中,还需要考虑安全性、日志管理、故障切换以及性能监控等多个方面,以确保系统的稳定运行。

    Mod_Proxy+Apache+Tomcat负载均衡与集群配置

    在当今的企业级应用中,确保系统的高可用性和稳定性是至关重要的。这通常通过建立集群来实现,即通过部署多台服务器来提供相同的服务,以此来...这样,就完成了整个Mod_Proxy+Apache+Tomcat负载均衡与集群的配置过程。

Global site tag (gtag.js) - Google Analytics