Apache + MOD_JK + TOMCAT实现集群和负载均衡配置指南

Apache + MOD_JK + TOMCAT实现集群和负载均衡配置指南 

对于Web应用的集群学习我是从Tomcat5.5开始的,下面是我的实际操作过程和一些体会。

第一部分 环境介绍

负载均衡

×××××××××××××××××

   操作系统:windows xp

   IP地址   :192.168.1.200

   Apache:apache_2.2.13-win32-x86-openssl-0.9.8k.msi

 mod_jk:mod_jk-1.2.28-httpd-2.2.3.so(for windows)

集群环境Tomcat1

×××××××××××××××××

   操作系统:SUSE Linuxe server 10

   IP地址   :192.168.1.114

   Tomcat :apache-tomcat-5.5.28

集群环境Tomcat2

×××××××××××××××××

   操作系统:SUSE Linuxe server 10

   IP地址   :192.168.1.113

   Tomcat :apache-tomcat-5.5.28

第二部分 负载均衡配置

  第一步:安装apache,安装目录为C:/Apache2.2。

  第二步:将mod_jk-1.2.28-httpd-2.2.3.so文件复制到目录%apache_home%/modules目录下

  第三步:修改配置文件%apache_home%/conf/httpd.conf

              在文件%apache_home%/conf/httpd.conf的最末尾增加如下行:include conf/mod_jk.conf

 

  1. #zhangzk   
  2. include conf/mod_jk.conf  

 第四步:在目录%apache_home%/conf下面创建文件mod_jk.conf

 

  1. #加载mod_jk Module   
  2. LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so  
  3. #   
  4. #指定 workers.properties文件路径   
  5. JkWorkersFile conf/workers.properties  
  6. #   
  7. #指定哪些请求交给tomcat处理   
  8. #"controller"为在workers.propertise里指定的负载分配控制器名       
  9. JkMount /*.jsp controller  

第五步:在目录%apache_home%/conf下创建文件workers.properties

 

  1. #server       
  2. worker.list = controller     
  3.  
  4. #========tomcat1========       
  5. worker.tomcat1.port=8009    
  6. worker.tomcat1.host=192.168.1.114      
  7. worker.tomcat1.type=ajp13      
  8. worker.tomcat1.lbfactor = 1   
  9.   
  10. #========tomcat2========      
  11. worker.tomcat2.port=8009      
  12. worker.tomcat2.host=192.168.1.113      
  13. worker.tomcat2.type=ajp13      
  14. worker.tomcat2.lbfactor = 1    
  15.     
  16. #========controller,负载均衡控制器========        
  17. worker.controller.type=lb      
  18. worker.controller.balanced_workers=tomcat1,tomcat2  
  19. worker.controller.sticky_session=1  

           至此负载均衡服务器已经配置完毕啦。

           分别启动tomcat1和tomcat2已经apache就可以实现对于*.jsp的请求进行1:1分发到tomcat1和tomcat2上。

第三部分 tomcat集群配置

            第一步:将%tomcat_home%/conf/server.xml文件中的集群配置节点的注释去掉

                        即将该文件中如下部分

 

  1. <!--  
  2.  <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"   
  3.           managerClassName="org.apache.catalina.cluster.session.DeltaManager"   
  4.           expireSessionsOnShutdown="false"   
  5.           useDirtyFlag="true"   
  6.           notifyListenersOnReplication="true" >  
  7.       ......  
  8.  </Cluster>  
  9.  -->     

                     修改为如下形式(......表示中间有代码段没有展示出来)

  1. <Cluster className= "org.apache.catalina.cluster.tcp.SimpleTcpCluster"   
  2.          managerClassName="org.apache.catalina.cluster.session.DeltaManager"   
  3.          expireSessionsOnShutdown="false"   
  4.          useDirtyFlag="true"   
  5.          notifyListenersOnReplication="true" >  
  6.      ......  
  7. </Cluster>  

               上述变更在集群环境tomcat1和tomcat2上都需要同样的处理。

 

            第二步:将%tomcat_home%/conf/server.xml文件中的如下代码作出变更            

            >>>集群环境Tomcat1

 

  1. <Engine name= "Catalina"  defaultHost= "localhost" >  

            修改为

 

  1. <Engine name= "Standalone"  defaultHost= "localhost"  jvmRoute= "tomcat1" >  

            >>> 集群环境Tomcat2

 

  1. <Engine name= "Catalina"  defaultHost= "localhost" >  

            修改为

 

  1. <Engine name= "Standalone"  defaultHost= "localhost"  jvmRoute= "tomcat2" >  

           第三步:

           在需要部署到Tomcat中的web应用程序的WEB-INFO/web.xml中增加如下代码

 

  1. <distributable/>  

          经过上述3大步骤Tomcat的集群配置就完成啦。

          在WEB应用程序中当对session.setAttribute(arg1,arg2)方法进行操作的时候,就可以完成Session的复制了。

 

  第4部分 注意事项  

         在普通的Web应用程序中如下代码片段即可完成Session中属性的变更

 

  1. Object o = request.getSession( true ).getAttribute(LOGIN_USER_INFO_KEY);  
  2. UserInfo ui = (UserInfo) o;  
  3. ui.setAccessPageCount(ui.getAccessPageCount() + 1);  

         但是在集群部署环境下该处理是不能完成Session复制的,必须用如下代码片段才可以

 

  1. Object o = request.getSession( true ).getAttribute(LOGIN_USER_INFO_KEY);  
  2. UserInfo ui = (UserInfo) o;  
  3. ui.setAccessPageCount(ui.getAccessPageCount() + 1);  
  4. request.getSession().setAttribute(LOGIN_USER_INFO_KEY, ui);  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值