`
lucene3212
  • 浏览: 133191 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

apache tomcat 集群配

    博客分类:
  • java
阅读更多
    1.首先,在apache安装目录下找到conf/httpd.conf文件,以文本编辑器打开。

     去掉以下文本前的注释符(#)以便让apache在启动时自动加载代理(proxy)模块。

     loadmodule proxy_module modules/mod_proxy.so
     loadmodule proxy_ajp_module modules/mod_proxy_ajp.so
     loadmodule proxy_balancer_module modules/mod_proxy_balancer.so
     loadmodule proxy_connect_module modules/mod_proxy_connect.so
     loadmodule proxy_ftp_module modules/mod_proxy_ftp.so
     loadmodule proxy_http_module modules/mod_proxy_http.so

     向下拉动文档找到<ifmodule dir_module>节点,在directoryindex index.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。

     继续下拉文档找到include conf/extra/httpd-vhosts.conf,去掉前面的注释符。

     用文本编辑器打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上

     <virtualhost *:80>
         serveradmin 管理员邮箱
         servername 域名(没有可用ip地址代替)
         serveralias localhost
         proxypass / balancer://cluster/ stickysession=jsessionid nofailover=on
         proxypassreverse / balancer://cluster/
         errorlog "logs/lbtest-error.log"
         customlog "logs/lbtest-access.log" common
     </virtualhost>

     这里balancer://是告诉apache需要进行负载均衡的代理,后面的cluster是集群名,可以随意取,两个日志引擎errorlog负责记 录错误,customlog负责记录所有的http访问以及返回状态,日志名可以自己取,笔者取为lbtest。httpd-vhosts.conf配置 完毕,回到httpd.conf,在文档最下面加上

     proxyrequests off
     <proxy balancer://cluster>
          balancermember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
          balancermember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2
     </proxy>

     proxyrequests off 是告诉apache需要使用反向代理(利用apache进行负载均衡必须使用反向代理,关于更多负载均衡和反向代理详情可以参阅笔者另一篇博客http://zyycaesar.javaeye.com/admin/blogs/293839),<proxy balancer://cluster>用于配置工作在tomcat集群中的所有节点,这里的"cluster"必须与上面的集群名保持一致。 apache通过ajp协议与tomcat进行通信,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。loadfactor是负载因 子,apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都 是1,apache就按1:1的比例转发,如果是2和1就按2:1的比例转发。route参数对应后续tomcat配置中的引擎路径 (jvmroute)。

#虚拟机配置,负载均衡配置  
<virtualhost *:8000>  
    serveradmin weigbo@163.com  
    servername localhost  
    serveralias localhost  
    #小心,有些地方要有空格,要不然会出错哈哈。  
    proxypass / balancer://cluster/ stickysession=jsessionid|jsessionid nofailover=on  
    proxypassreverse / balancer://cluster/  
    #errorlog "logs/error.log" 
    #customlog "logs/access.log" common  
</virtualhost>   
 
#the proxyrequests directive should usually be set off when using proxypass.  
proxyrequests off  
<proxy balancer://cluster>  
    balancermember ajp://localhost:8009 loadfactor=1 route=tomcat7_a  smax=5 max=20 ttl=120 retry=300 timeout=15  
    balancermember ajp://localhost:9009 loadfactor=1 route=tomcat7_b  smax=5 max=20 ttl=120 retry=300 timeout=15  
    # status=+h为配置热备,当所有机器都over时,才会请求该机器  
    #balancermember http://192.168.1.218:8009 status=+h  
    proxyset lbmethod=bytraffic  
</proxy> 



    重启apache服务,如果此时访问http://localhost/将会返回503错误,打开刚才配置的错误日志logs/lbtest-error.log,可以看到错误原因是因为后台服务器没有响应,因为此时tomcat尚未配置和启动。
2.tomcat配置
server.xml找到<engine name="catalina" defaulthost="localhost">,去掉这段或改为注释,把上方紧挨的<engine name="catalina" defaulthost="localhost" jvmroute="jvm1">注释符去掉,对于t2,去掉注释符并把jvm1改为jvm2。这里的jvmroute对应apache httpd.conf中balancermember中配置的route参数。

    向下找到<cluster classname="org.apache.catalina.ha.tcp.simpletcpcluster"/>,打开注释,这里的配置是 为了可以在集群中的所有tomcat节点间共享会话(session)。如果仅仅为了获得一个可用的tomcat集群,cluster只需要这么配置就可 以了。

<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" 
<!—tcplistenport如果是同一机器部署两个tomcat7应用,则修改tomcat7_b为4001,以免冲突. 不同机器下,不用更改此项。—>  
                      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> 
3.web.xml
在<web-app>节点下加入<distributable />,这一步非常重要,是为了通知tomcat服务器,当前应用需要在集群中的所有节点间实现session共享。如果tomcat中的所有应用都 需要session共享,也可以把conf/context.xml中的<context>改为<context distributable="true">,这样就不需对所有应用的web.xml再进行单独配置。
4负载均衡管理器
负载均衡管理器可以动态更新负载均衡的应用,你可以用管理器更改负载因子或者特定的应用,还可以把应用设为off模式。
为了使用balancer management, mod_status和mod_proxy_balancer 必需要加载到apache.
设置:
#此项为mod_proxy_balancer管理器需要
loadmodule status_module modules/mod_status.so

在负载均衡项前加上:
#mod_balancer管理应用
<location /balancer-manager>  
     sethandler balancer-manager
     order allow,deny
     allow from all
</location>

可以通过以下地址访问:http://localhost/balancer-manager
5.mod_proxy负载均衡算法
目前mod_proxy有3种负载均衡算法:
1. request counting(我猜是round-robin), lbmethod=byrequests
2. weighted traffic counting(这个是按权重,此例也是用此算法), lbmethod=bytraffic
3. pending request counting(从apche文档来看,应该是按负载量,也就是往负载少的派发新请求). lbmethod=bybusyness
它们通过lbmethod值设置。

 
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics