注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

清风幻影的博客

Where there is love, I will be there.

 
 
 

日志

 
 
关于我

同是天涯沦落人,相逢何必曾相识. 天生我材必有用,千金散尽还复来. 天若有情天亦老,人间正道是沧桑. 月影西斜人已去, 堤上梅花情依旧, 此情故已成追忆, 美人如玉夜留香

Apache与Tomcat搭建集群  

2011-12-26 16:24:34|  分类: Tomcat资料 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://www.iteye.com/topic/1119261

早前就解了Apache和Tomcat可以搭建集群,可以负载均衡,升级就不需要停交易,真是强大。昨晚看了google reader的收藏又再次看到这篇文章,于是今天在星巴克研究了一把,发现真的很强大,负载均衡、session复制都可以做到,以后再也不用为升级系统 而烦恼了。
       下面就来讲讲是搭建集群的过程,首页需要下载apahce和tomcat(当然需要安装jdk,这就不多讲了,大家应该懂得),本次实践我是在 windows系统的环境下进行的,apache是2.2.21版本,tomcat是7.0.16和7.0.23两个版本。
       首先讲讲tomcat需要配置的文件,假设Tomcat 7.0.16为服务器A,Tomcat 7.0.23为服务器B。注意如果你的Tomcat都是放在同一台机子上,那你要修改端口,确保端口不要冲突。
服务器A的server.xml配置文件中的Engine节点中新增jvmRoute属性,值可以自己定义,例如jvm1,同时新增Cluster节点的所有内容,如果tomcat是在同一台机子的就需要注意Receiver节点的port属性不能冲突,例如:4000
服务器A的server.xml配置文件
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

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

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" hannelSendOptions="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"/>
            
             <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"/>
           </Channel>
      </Cluster>
......

</Engine>

服务器B的server.xml配置文件,其中不同的是8180、8109和4001的几个端口的修改和jvmRoute值的不同,其它都一样
Xml代码  收藏代码
  1. <Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />  
  2.   
  3. <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />  
  4.   
  5. <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">  
  6.   
  7. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" hannelSendOptions="8">  
  8.         <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />  
  9.           
  10.         <Channel className="org.apache.catalina.tribes.group.GroupChannel">    
  11.              <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>    
  12.              <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto"    
  13.                        port="4001"  
  14.                        autoBind="100"  
  15.                        selectorTimeout="5000"  
  16.                        maxThreads="6" />  
  17.     
  18.              <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  19.                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  20.              </Sender>  
  21.              <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  22.              <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  23.                
  24.              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  25.                   filter=""/>  
  26.            <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  27.     
  28.            <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  29.                      tempDir="/tmp/war-temp/"  
  30.                      deployDir="/tmp/war-deploy/"  
  31.                      watchDir="/tmp/war-listen/"  
  32.                      watchEnabled="false"/>  
  33.     
  34.            <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  35.            <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  36.            </Channel>  
  37.       </Cluster>  
  38. ......  
  39.   
  40. </Engine>  

tomcat配置好了,为了session复制,我们还需要在应用的web.xml文件中添加<distributeable/>这 个一个配置,那接下来我们就来讲讲apache的配置,需要修改apache的httpd.conf文件,将去掉一下这些的注释,使其生效
Xml代码  收藏代码
  1. Include conf/extra/httpd-vhosts.conf  
  2.   
  3. LoadModule negotiation_module modules/mod_negotiation.so  
  4. LoadModule proxy_module modules/mod_proxy.so  
  5. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
  6. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
  7. LoadModule proxy_connect_module modules/mod_proxy_connect.so  
  8. LoadModule proxy_ftp_module modules/mod_proxy_ftp.so  
  9. LoadModule proxy_http_module modules/mod_proxy_http.so  

在http.conf的最后面新增以下配置,使apache可以反向代理和负载均衡,注意这里的端口是tomcat的端口,同时route是刚才配置的jvmRoute的值,不能配错
Xml代码  收藏代码
  1. ProxyRequests Off  
  2. <proxy balancer://loadbalancer>   
  3. BalancerMember http://127.0.0.1:8080 loadfactor=1 route=jvm1  
  4. BalancerMember http://127.0.0.1:8180 loadfactor=1 route=jvm2  
  5. </proxy>  

下面是httpd-vhosts.conf文件的配置,其它就不多讲了,"ProxyPass /google !"是可以配置/google地址不反向代理,那么输入地址/google就会在你apahce的根目录里面找,"/baidu" 是配置了方向代理到百度,以上这两个配置主要是看个人需求,主要是想说明怎么配置方向代理,而"ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On" 这两句才是重点,主要是配置“/”都反向代理到tomcat,并且是负载均衡的模式
Xml代码  收藏代码
  1. <VirtualHost *:80>  
  2.     ServerAdmin webmaster@dummy-host.xiaoyang.com  
  3.     DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.xiaoyang.com"  
  4.     ServerName dummy-host.xiaoyang.com  
  5.     ServerAlias www.dummy-host.xiaoyang.com  
  6.     ErrorLog "logs/dummy-host.xiaoyang.com-error.log"  
  7.     CustomLog "logs/dummy-host.xiaoyang.com-access.log" common  
  8.   
  9.         ProxyPass /google !  
  10.           
  11.         ProxyPass /baidu http://www.baidu.com  
  12.     ProxyPassReverse /baidu http://www.baidu.com  
  13.       
  14.     ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On  
  15.     ProxyPassReverse / balancer://loadbalancer/  
  16. </VirtualHost>  

好了这就完成了,然后就可以打开你的apache的地址了,你不停的刷新页面,会被负载分配到两个tomcat服务其上面其,同时会话是相同的
  评论这张
 
阅读(580)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018