Tomcat的负载均衡(apache的mod_jk来实现)

Tomcat的负载均衡(apache的mod_jk来实现):  
1、基于Apache的mod_jk来实现:  
             apache    
              /    \  
          tom1    tom2  
    在完成两台tomcat1,tomcat2的安装之后,希望可以实现负载均衡,使用mod_jk可以实现节点的故障恢复功能,即一个节点出现问题,mod_jk会其不参与负载,

 在节点故障恢复后,mod_jk会让其参与负载,对此节点是否失败,对用户而言是透明的。  
    实现流程:  
    a、用户访问数据达到Apache后,如果是静态内容,Apache立即回应;  
    b、如果Apache发现用户请求的是动态内容如jsp,就将请求丢给其中的一台tomcat来处理。  
    c、每次用户重复访问时,都被分配到同一台机器上(可以做会话粘滞或是会话复制)  
    本文环境在之前的基础上新增加一台机器(做负载均衡器),其实负责负载均衡的主要是由一个配置文件完成!那就是workers.propertise。

通过定义worker.list,port,host,type,lbfactor的值来定义每一台tomcat的主机;通过lbfactor来区别每台机器的权重,权重数值越大得到的用户请求数就越多。所以,只要重点关注这个文件的内容就行了。  
    实施:  
    a、安装Aapche  
    # tar -xzf httpd-2.2.22.tar.gz  
    # chown root.root -R httpd-2.2.22  
    # cd httpd-2.2.22  
    # ./configure --prefix=/usr/local/apache  
    # make && make install  
    b、编译mod_jk模块  
    # tar -xzf tomcat-connectors-1.2.32-src.tar.gz   
    # cd tomcat-connectors-1.2.32-src  
    # cd native/  
    #  ./configure --with-apxs=/usr/local/apache/bin/apxs   
    # make && make install  
    # ll /usr/local/apache/modules/mod_jk.so   
    -rwxr-xr-x 1 root root 1076923 Feb 20 14:17 /usr/local/apache/modules/mod_jk.so  
    c、加载mod_jk  
    # vim /usr/local/apache/conf/httpd.conf   
    #增加的内容  
    LoadModule jk_module modules/mod_jk.so  
    JkWorkersFile /usr/local/apache/conf/workers.properties  
    JkMountFile   /usr/local/apache/conf/uriworkermap.properties  
    JkLogFile /usr/local/apache/logs/mod_jk.log  
    JkLogLevel info  
    JkLogStampformat "[%a %b %d %H:%M:%S %Y]"  
    #告诉apache,如何处理相关类形的文件(这几行可要可不要,只要urlworkermap.properties里面有定义也是可以的! :)  
    JkMount /* controller  
    JkMount /*.jsp  controller  
    JkMount /*.action controller  
    # cat /usr/local/apache/conf/workers.properties  
    # cat workers.properties   
    worker.list=controller
    #========tomcat1========  
    worker.tomcat1.port=8009        
    worker.tomcat1.host=192.168.10.56    
    worker.tomcat1.type=ajp13
    worker.tomcat1.lbfactor = 1     
    worker.tomcat12.connection_pool_timeout=750      
    worker.tomcat12.socket_keepalive=0      
    worker.tomcat12.socket_timeout=3000     
    worker.tomcat12.connect_timeout=1000      
    worker.tomcat12.reply_timeout=3300   
    #========tomcat2========  
    worker.tomcat2.port=8009       
    worker.tomcat2.host=192.168.10.57   
    worker.tomcat2.type=ajp13
    worker.tomcat2.lbfactor = 1   
    worker.tomcat12.connection_pool_timeout=750      
    worker.tomcat12.socket_keepalive=0      
    worker.tomcat12.socket_timeout=3000      
    worker.tomcat12.connect_timeout=1000      
    worker.tomcat12.reply_timeout=3300    
    #=======balance controller====     
    worker.controller.type=lb
    worker.retries=3     
    worker.controller.balance_workers=tomcat1,tomcat2     
    worker.controller.sticky_session=1
    相关参数说明:  
    worker.tomcat12.socket_keepalive=0#此属性将告诉操作系统在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作系统的设置,一般为120秒),这样将防止防火墙切断未激活的网络连接。       
    worker.tomcat12.socket_timeout=300000#此属性说明连接在未激活的状况下持续多久,web server将主动切断之。       
    worker.tomcat12.connect_timeout=10000# 此属性说明了web server等待PONG回应的时间(以ms为单位)。       
    worker.tomcat12.reply_timeout=330000#此属性告诉web server在接到远端的Tomcat已死并实时的切换到集群中的另外一个Tomcat的回应之前等待一段时间。       
    worker.tomcat12.reply_timeout=0#此属性说明了web server在检测到Tomcat失败后如何进行恢复工作(默认就是0,全部恢复)       
    worker.loadbalancer.sticky_session=0#表述是否将对SESSION ID的请求路由回到相同的Tomcat worker。(默认是0,session不复制)  
    # cat uriworkermap.properties   
    /*=controller  
    !/*.jpg=controller
    !/*.gif=controller
    !/*.png=controller
    !/*.bmp=controller
    !/*.html=controller    
    !/*.htm=controller
    !/*.swf=controller   
    !/*.css=controller   
    !/*.js=controller
    完成以上所有之后,你会发现两台tomcat确实已经负载了,但是一个新的问题又产生,会话的问题。第一次提交和第二次提交不在同一台服务器,这基本上可以视为数据丢失。
    如果仅仅只是浏览,那么问题可能不是很明显,当然如果你登录了,那么系统又会提示让你登录。于是,就有了tomcat的会话复制!  
    目前关于tomcat的会话复制,有两种常见的方法:利用tomcat自身的简单集群功能,帮助复制会话。

另外一种就是利用memcache这类缓存程序来缓存会话。    

前提条件:
    1、memcached正常工作了
    2、tomcat 正常工作了。
     
    1、安装方法及安装包
    javolution-5.4.3.1.jar
    memcached-2.4.2.jar
    memcached-session-manager-1.3.0.jar
    msm-javolution-serializer-cglib-1.3.0.jar
    msm-javolution-serializer-jodatime-1.3.0.jar
     
    安装方法:  将这几个包放到/usr/local/tomcat6.0/lib里。
     
    2、编辑tomcat的配置文件。 < 这一点很重要,因为网上大多数文章都是说修改server.xml里配置;我试过但最终发现session的信息没有存入到memcache中,

我意识到 这可能是配置有问题。目前发现编辑context.xml这个文件,是可以立即将session丢入到memcache中的。>
    # vim /usr/local/tomcat6.0/conf/context.xml
    <Context>
    <!-- 在这个字段下添加以下内容,在节点入请填入你的memcached服务器ip及端口号-->
                    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"   
                            memcachedNodes="n1:10.254.41.197:11211"   
                            requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"   
                            sessionBackupAsync="false"   
                            sessionBackupTimeout="100"   
                            transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"   
                            copyCollectionsForSerialization="false" />
    </Context>
     
    3、如何测试?  
    我目前的测试方法是,通过apache的mod_jk来实现负载均衡(之前的文章里有写),并且启用tomcat之间的会话复制。
    这样的结果就是,seesion ID会随着每次用户的提交而变换节点,但ID不变。
    例如:
    ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat2  
    下次提交就会变成: <节点切换了,但是ID不变>
    ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat1  
     
    结合memcache的状态: <我之前在会话没有成功的丢到memcached这里时,cmd_set 为0 >
    # perl memcached-tool.pl 10.254.41.197:11211 stats
                     cmd_get          27
                     cmd_set          15
                     get_hits           12
    # perl memcached-tool.pl 10.254.41.197:11211 stats
                     cmd_get          31
                     cmd_set          17
          get_hits           14
     
    我想通过以上的判断,配置 是成功的!

时间: 2024-10-20 15:17:41

Tomcat的负载均衡(apache的mod_jk来实现)的相关文章

apache以mod_jk方式实现tomcat的负载均衡集群

目录 1.环境准备 2.mod_jk配置 3.测试 4.总结 1.环境准备 准备三台主机,一台提供httpd环境,另两台提供tomcat环境. 主机规划: 主机名:httpd           IP地址:192.168.0.200提供httpd服务 主机名:TomcatA    IP地址:192.168.0.201提供tomcat服务 主机名:TomcatB    IP地址:192.168.0.202提供tomcat服务 jdk与tomcat的安装请参照博文:http://zhaochj.bl

Linux下Apache+tomcat搭建负载均衡服务器集群

之前在我的博客里面写了一篇文章http://blog.csdn.net/yannanying/article/details/43018175,本文就是为了补充当时的那篇文章而写.我记得当时是参考百度经验里面的一篇文章写的,文章地址为http://jingyan.baidu.com/article/ab0b5630b632dbc15afa7dc4.html,寒假的时候按照这篇文章的相关内容搭建了Apache+tomcat服务器集群,当时是弄成功了,回到学校后再次想尝试一下怎么搭建,但是发现自己记

Apache+Tomcat实现负载均衡

反向代理负载均衡 (Apache2+Tomcat7/8) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式. 此次使用的代理为mod_proxy的方式来实现的,因为在Apache2以上的版本中已经集成了,因此不需要再另行安装和配置了,只需要把注释去掉

利用httpd对tomcat进行负载均衡配置

实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:jdk-8u60-linux-x64 apache-tomcat-8.0.24 tomcat-connectors-1.2.41 httpd-2.2.15 httpd-devel-2.2.15 实验拓扑: 一.两台机器安装JAVA环境 1.安装JAVA: wget http://download.oracle.com/otn-pub/j

Tomcat(五):nginx/httpd + tomcat及负载均衡tomcat

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

nginx+tomcat+redis负载均衡及session共享

概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.org/download/nginx-1.6.0.tar.gz 负载均衡 commons-pool-2-2.4.2.jar http://mirrors.hust.edu.cn/apache//commons/pool/binaries/commons-pool2-2.4.2-bin.tar.gz j

Nginx 服务器 之Nginx与tomcat实现负载均衡

  本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建文件 nginx-tomcat.conf 文件内容: user  nobody; worker_processes  2; events {        worker_connections  1024;     } http{    # upstream 配置一组后端服务器,     # 请求转

Nginx+Tomcat服务器负载均衡实践方案

1.    为何选择Nginx+Tomcat做负载均衡? 1.1. Nginx是什么? Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户

nginx tomcat做负载均衡

之前使用nginx做过web反向代理,没有做过负载均衡,今天有个同学需要做tomcat的负载均衡,我也研究下. 一共是2个机器,一个物理机(win7)上面部署2个tomcat,使用不同的端口启动.vm中的虚拟机放(centos)nginx,给tomcat做负载均衡. inux ip: 192.168.37.129 win ip: 192.168.37.1 首先保证两个主机可以互ping,响应的端口开放. nginx上使用80 tomcat1 使用8081 tomcat2使用8080 nginx,