`

搞定apache,tomcat负载均衡

阅读更多
最近看集群的资料,利用工作比较空闲的时间,查看网上的资料。搭了一个Apache+JK2+Tomcat的集群环境,经过自己的系统测试,实现了集群的负载均衡和失败托管。简单的说一下这种集群:
反向代理负载均衡 (Apache+JK2+Tomcat)
使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。

软件列表如下:
Apache 服务器 下载地址:http://httpd.apache.org/download.cgi  版本2.2
Tomcat 下载地址:http://tomcat.apache.org/download-60.cgi 版本6.0
mod_jk-1.2.30-httpd-2.2.3.so 下载地址:http://tomcat.apache.org/dev/dist/tomcat-connectors/jk/binaries/win32/jk-1.2.30/

1: 首先实现负载均衡。
1.1.安装完后,apache,tomcat服务器后,在我的电脑目录结构如下:
D:\apache,D:\ tomcat-6.0.26-1, D:\ tomcat-6.0.26-1.
1.2 .将下载过来的mod_jk-1.2.30-httpd-2.2.3.so,复制放到Apache服务器里面的D:\apache\modules目录下。
1.3.然后在D:\apache\conf\目录下面找到httpd.conf文件。修改文件的最后一行在最后面加上一句.
include "D:\apache\conf\mod_jk.conf",


1.4.在D:\apache\conf目录下面新建mod_jk.conf文件。文件内容如下:

#加载mod_jk Module
LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.* controller 



1.5.在http.conf同目录下新建 workers.properties文件,内容如下:

worker.list = controller,tomcat-6.0.26-1,tomcat-6.0.26-2  #server 列表
#======== tomcat-6.0.26-1========
worker.tomcat-6.0.26-1.port=8009       #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat-6.0.26-1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat-6.0.26-1.type=ajp13
worker.tomcat-6.0.26-1.lbfactor = 1    #server的加权比重,值越高,分得的请求越多
#======== tomcat-6.0.26-2========
worker.tomcat-6.0.26-2.port=9009       #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat-6.0.26-2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat-6.0.26-2.type=ajp13
worker.tomcat-6.0.26-2.lbfactor = 1    #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat-6.0.26-1,tomcat-6.0.26-2  #指定分担请求的tomcat
worker.controller.sticky_session=1



1.6.因为我是一台电脑上配置,所以最后还要修改第二个tomcat服务器的配置端口。如果在两台电脑上就不用修改端口了。
<Server port="9005" shutdown="SHUTDOWN">将关闭端口改为9005。
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />将连接端口改为9080。
  <!-- Define an AJP 1.3 Connector on port 8009 -->
   <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />将ajp1.3端口改为9009




至此负载均衡的配置完成。直接将手上的项目拷贝到两个tomcat目录下。即可进行负载均衡测试。打开多个ie窗口,观察两个tomcat后面的输出。




2:实现失败托管,也就是session复制。
2.1.在tomcat1里面的server.xml 增加
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-6.0.26-1">
tomcat2里面增加:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat-6.0.26-2">

这些元素在tomcat里面被注释掉了,找到注释的部分位置,加在那个位置即可。

2.2.对于Cluster元素的配置。我直接从tomcat里面拷贝了完整的代码,在tomcat5.tomcat6里面都是可以的。将它粘贴到两个tomcat的sever.xml
	<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将端口改为4002;
 
 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4002"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

  2.3.最后要tomcat支持session复制,必须在web.xml里面加上一个标签。<distributable/> 在你工程的web.xml最后面加上这一句即可。最后运行你的tomcat,。用户登陆进系统后,查看tomcat运行的日志。看它运行在那个tomcat下,然后此时关闭这个tomcat。然后会发现另外一个tomcat此时会将关闭的那个tomcat的session复制过来,实现了失败托管。你再继续运行系统,发现不用退出系统,也能够继续运行该系统,此时跳转到另外一个tomcat上了。这样虽然在服务器端down机了,但是对客户来说却是透明的。当然这只是一个demo,实际运行可能比这复制多了。学习中………..
最后强调一点,我的系统原来权限引擎这块实体没有实现序列化接口。以前系统没有考虑到集群环境。(小系统)。这在session复制中肯定会报错。所有实体必须实现序列化接口,现在系统基本实现了集群,但是某些模块还是有些序列化没实现的小问题。有些bug,初学这个,问题还是挺多的,敬请各位指教。
  • 大小: 11 KB
  • 大小: 16.6 KB
  • 大小: 22.9 KB
  • 大小: 24 KB
  • 大小: 34.5 KB
分享到:
评论
1 楼 seasky332 2014-11-13  

相关推荐

    Apache Tomcat 负载均衡

    Apache Tomcat负载均衡是分布式系统中关键的一环,旨在通过分散服务器请求,提高系统的可用性和响应速度,同时增强系统的容错能力。本文将基于提供的文件信息,深入解析Apache Tomcat负载均衡的配置与实现机制。 ##...

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

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

    配置安装Apache+Apache Tomcat实现tomcat负载均衡教程.doc

    配置安装Apache+Apache Tomcat实现tomcat负载均衡教程.doc

    Apache+tomcat负载均衡

    Apache+Tomcat的负载均衡配置就是为了解决这一问题。 负载均衡的基本思想是将来自用户的请求分发到多个后端服务器,这样可以避免任何单一服务器过载,同时提高整体服务的可靠性和响应时间。Apache通常通过其模块mod...

    apachetomcat负载均衡整合文档.pdf

    Apache Tomcat 负载均衡整合是通过特定的配置实现多台Tomcat服务器协同工作,以提高应用的可用性和响应速度。在这个过程中,Apache HTTP Server作为前端代理,负责接收客户端请求,并根据预设的策略将请求分发到后端...

    apache tomcat 负载均衡

    apache tomcat 负载均衡,一个apache ,多个tomcat,让用户请求分发,从而减小请求处理压力,这里只是配置步骤文档,里面包含了需要的配置文件mod_jk.conf,workers.properties,也包含了需要的jk文件mod_jk.so

    apache+tomcat负载均衡_proxy模式

    内附完整配置教程和修改后的apache的httpd.conf文件和tomcat的server.xml配置文件,包含test测试项目,不包含apache和tomcat安装文件。 本教程参考网上资料,本机测试成功,如有问题可以私信说明。

    apache配置负载均衡

    Apache 配置负载均衡是将所有用户的访问压力分散到多台服务器上,也可以分散到多个 Tomcat 里,提高访问性能。负载均衡的主要目标是将用户的访问请求分流到多个服务器或 Tomcat 中,以提高访问性能和可用性。 负载...

    apache_tomcat负载均衡

    - `apache+tomcat均衡.rar` 可能包含了一个完整的Apache与Tomcat负载均衡的部署示例,包括Apache的配置文件、Tomcat的server.xml(用于配置连接器)以及集群的相关脚本或文档。 4. **Tomcat集群配置**: - 在每个...

    apache,tomcat负载均衡和session复制

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

    Tomcat +Apache实现负载均衡

    在Windows环境下,通过Apache和Tomcat实现负载均衡是一种常见的Web服务器优化策略,可以提高系统的可用性和响应速度。以下是详细的配置步骤和相关知识点: 1. **Apache安装**: - 下载Apache HTTP Server的源码并...

    linux_apache+tomcat负载均衡安装和调试.pdf

    《Linux Apache + Tomcat 负载均衡安装与调试详解》 在当今互联网环境中,高可用性和可扩展性是服务器架构的重要考量因素。Linux、Apache 和 Tomcat 的组合是搭建高性能 Web 应用服务器的常见选择,而通过负载均衡...

    apache tomcat负载集群

    apache tomcat负载集群,appache负载,tomcat负载

    apache + tomcat 负载均衡worker模式初探

    当面对高并发访问时,为了提升系统性能和可用性,我们可以采用负载均衡策略,其中"worker模式"是Apache mod_proxy模块的一种配置方式,用于实现对后端Tomcat服务器的负载均衡。 Apache的mod_proxy模块允许我们配置...

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

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

    【负载均衡】在centos下面做apache和tomcat的负载均衡

    【负载均衡】在CentOS下面做Apache和Tomcat的负载均衡是一个常见的Web服务器优化策略,目的是提高服务的可用性、可扩展性和响应速度。这里主要涉及三个关键文件:httpd.conf(Apache的主要配置文件)、mod_jk.conf...

Global site tag (gtag.js) - Google Analytics