设为首页 收藏本站
查看: 677|回复: 0

[经验分享] Apache+tomcat均衡负载配置新小结

[复制链接]

尚未签到

发表于 2017-1-4 09:40:22 | 显示全部楼层 |阅读模式
Apache+tomcat均衡负载配置

 

简述:
 

apache均衡负载需要配置Apache,如果tomcat之间需要集群,就还需要tomcat

 

 apache的配置方式可以有2种,mod_proxy方式和mod_jk方式,均能实现均衡负载,区别是mod_jk使用的是tomcatajp Connectormod_proxy使用的是tomcatHTTP Connector。(比如访问网址192.168.0.188,由mod_jk分发过去后,地址见到的仍然是192.168.0.188,而由mod_proxy分发之后,地址可能就变成了192.168.0.188:8081使用ajp方式则不会)。

 

Tomcat可以不作特别配置,也可以作集群配置,集群后的tomcat可以相互间复制session,多个tomcat之间互相的联系可以在apacheworkers.properties中配置。这部分会在本文档apachemod_jk配置中有示例。

 

开始配置:

 

1、  Apache http server(文档:http://httpd.apache.org/docs/2.2/
 
mod_proxy方式均衡负载配置配置(apache版本:2.2.17):
 
1)在APACHE_ROOT/Httpd/httpd.conf中将一下3个模块打开(去掉所在行的注释)

mod_proxy

mod_proxy_balancer

mod_proxy_http

mod_headers

mod_rewrite.so

mod_proxy_ajp.so

2)在文件底部加上如下内容:

ProxyRequests Off

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

<Proxy balancer://mycluster>

#均衡负载方式

#BalancerMember http://192.168.0.183:8082 route=1

#BalancerMember http://192.168.0.188:8081 route=2

#热备份方式,请求总是流向 node-a ,一旦node-a crashApache会检测到错误并把请求分流给node-bApache会隔几分钟检测一下node-a的状况,如果node-a恢复,就继续使用node-a

BalancerMember http://192.168.0.183:8082

BalancerMember http://192.168.0.188:8081 status=+H 

ProxySet stickysession=ROUTEID

</Proxy>

ProxyPass / balancer://mycluster/

#测试时把一下内容开启,查看均衡负载情况,浏览地址:http://mycluster/balancer-manager

<Location /balancer-manager> 

#SetHandler balancer-manager

#Order Deny,Allow

#Deny from all

#Allow from all

</Location>

 

Ajp方式:

<VirtualHost *:80> 

    ServerAdmin lzj@gmail.com 

    ServerName localhost 

    ServerAlias localhost 

    ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On 

    ProxyPassReverse / balancer://cluster/ 

    <proxy balancer://cluster> 

        BalancerMember ajp://192.168.0.188:8007 loadfactor=1 route=s1 

        BalancerMember ajp://192.168.0.188:8008 loadfactor=1 route=s2 

    </proxy> 

</VirtualHost>

3)均衡负载配置完成

 

mod_jk方式均衡负载配置配置(apache版本:2.2.9mod_jk版本:1.2.6):
 

1)  拷贝mod_jk.somod_jk_1.2.6_2.0.50.dllAPACHE_ROOT/ modules/
2)  在Apache_Root/ conf/下新建文件:workers.propertiesuriworkermap.propertiesmod_jk.conf,
  然后在apache的conf目录下httpd.conf中添加:Include conf/mod_jk.conf
3)  workers.properties写入内容:
worker.list = controller,status,tomcat1     #server 列表

worker.tomcat1.port=8010           #ajp13 端口号,在tomcatserver.xml配置,默认8009   

worker.tomcat1.host=127.0.0.1       #tomcat的主机地址,如不为本机,请填写ip地址   

worker.tomcat1.type=ajp13          #类型ajp13

worker.tomcat1.lbfactor= 1          #server的加权比重,值越高,分得的请求越多  

worker.tomcat1.recovery_options=1         #

#worker.tomcat1.recycle_timeout=300     #

worker.tomcat1.redirect=tomcat2           #界定的首选故障节点tomcat1

#worker.tomcat1.reply_timeout=1000     

#reply_timeout告诉web server在接到远端的Tomcat已死并实时的切换到集群中的另外一个Tomcat的回应之前等待一段时间

#worker.tomcat1.socket_keepalive=True

#worker.tomcat2.activation=disabled  #禁用worker1所有请求的,除故障外

worker.tomcat2.port=8011           #ajp13 端口号,在tomcatserver.xml配置,默认8009   

worker.tomcat2.host=127.0.0.1     #tomcat的主机地址,如不为本机,请填写ip地址   

worker.tomcat2.type=ajp13          #类型ajp13

worker.tomcat2.lbfactor = 1           #server的加权比重,值越高,分得的请求越多        

worker.tomcat2.recovery_options=1     

worker.tomcat2.redirect=tomcat1      #界定的首选故障节点tomcat1

#========controller,负载均衡控制器

worker.controller.type=lb            #类型均衡

worker.controller.balanced_workers = tomcat1,tomcat2   #指定分担请求的tomcat  ,tomcat3   

worker.controller.sticky_session=true #设为0均衡才起作用但是session不同步

worker.status.type=status

4)  uriworkermap.properties写入内容:
/*=controller

#!/bbs/*=tomcat1

#/tunetstudent/*=tomcat1

#/student/*=tomcat1

#/ejforum/*=controller

/jkstatus=status

#!/*.gif=controller

#!/*.jpg=controller

#!/*.png=controller

#!/*.css=controller

#!/*.js=controller

#!/*.htm=controller

#!/*.html=controller

5)  mod_jk.conf写入内容:
#加载mod_jk Module   

LoadModule jk_module modules/mod_jk.so

#指定 workers.properties文件路径   

JkWorkersFile conf/workers.properties

JkMountFile conf/uriworkermap.properties

JkLogFile logs/mod_jk.log

JkLogLevel warn

#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器   

#JkMount /*.jsp controller

#JkMount /*.do controller

6)  均衡负载配置完成
 

2、  tomcat(文档:http://httpd.apache.org/docs/2.2/
 

tomcat 6集群配置(版本:6.0.16

 

1)       修改TOMCAT_ROOT/conf/ server.xml文件:可以是把<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释去除,或者是加入以下代码:
<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"
        mcastAddr="230.0.0.4"
                           address="228.0.0.4"
                           port="45564"
                           frequency="500"
                           dropTime="3000"/>
               <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                         address="192.168.0.188"(多网卡需要制定ip)
                         port="4008"(同一台机器多个tomcat,这里端口需要不同)
                         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=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt;"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
     </Cluster> 

其作用是一样,如果不需要深入配置,只需要把SimpleTcpCluster那行的注释去除就可以。如果使用多个网卡,需要修改Membership mcastBindAddressReceiver address,均要制定使用的网卡的IP

2)修改TOMCAT_ROOT/conf/ server.xml文件,在Engine 处增加jvmRoute ,该名称和apahce workers.properties中的名称相同,<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2">

 

3)在项目的web.xml最后加上<distributable/>

<distributable/>不加的话,可能session复制会失败

4tomcat集群配置完成。

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-323626-1-1.html 上篇帖子: svn配置并与apache集成(windows环境) 下篇帖子: unubtu 下 Apache php 环境的搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表