基于mod_proxy模块
配置内容如下:

准备工作--》检查模块
# httpd -D DUMP_MODULES
……………………
proxy_module (shared)
proxy_balancer_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_connect_module (shared)
前端apache配置内容-->192.168.9.130
# cat /etc/httpd/conf.d/proxy_tomcat.conf 
ProxyVia On
#关闭正向代理
ProxyRequests Off
#前端向后端转发的时候支持虚拟主机
ProxyPreserveHost On
<Proxy balancer://lbcluster>
#这里基于HTTP/1.1协议,也可以基于AJP/1.3,需要修改对应的后端tomcat服务器的连接器属性,端口也要和tomcat中定义的一致.
    BalancerMember http://192.168.6.128:80 loadfactor=1
    BalancerMember http://192.168.6.129:80 loadfactor=1
#设定负载均衡算法(byrequests基于权重,类似haproxy的roundrobin)(bybusiness基于当前负载情况,类似于haproxy的leastconn最少连接)(bytraffic基于后端流量)
    ProxySet lbmethod=byrequests
</Proxy>

#如果访问的是http://ip/lbmanager,则不代理,balancer-manager可以保留代理状态信息
<Location /lbmanager>
#强制所有匹配的文件被一个指定的处理器处理
    SetHandler balancer-manager
    Proxypass !
    Order Deny,Allow
    Allow from all
</Location>
#代理集群
#代理(这里代理后的路径最后有个/,一定不能省略)
ProxyPass / balancer://lbcluster/
#作用在于原请求之后追加上redirect的路径
ProxyPassReverse / balancer://lbcluster/
#2.2控制机制,2.4使用Require all granted
<Location * >
  Order allow,deny
  Allow from all
</Location>
<Location / >
  Order allow,deny
  Allow from all
</Location>

后端tomcat配置-->
​所有节点--》
#vim server.xml 
   <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
#mkdir -pv $CATALINA_HOME/webapps/testapp/WEB-INF/{lib,classes}
添加分布式配置文件
#cp $CATALINA_HOME/conf/web.xml $CATALINA_HOME/webapps/testapp/WEB-INF
#vim $CATALINA_HOME/webapps/testapp/WEB-INF/web.xml
添加
<distributable/>
 
节点A--》192.168.6.128
在server.xml的Engine段中添加如下内容(也可以在Host中添加),这里主要修改本节点心跳地址和端口
#vim server.xml
    <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="224.0.0.4" port="45564" frequency="500" dropTime="3000"/>    
                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.6.128" 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"/>    
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>    
        </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>
#vim $CATALINA_HOME/webapps/testapp/index.jsp
<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA </font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("abc","abc"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
节点B--》192.168.6.129
在server.xml的Engine段中添加如下内容(也可以在Host中添加)
#vim server.xml
    <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="224.0.0.4" port="45564" frequency="500" dropTime="3000"/>    
                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.6.129" port="4001" 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"/>    
                <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>    
        </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>
 
#vim $CATALINA_HOME/webapps/testapp/index.jsp
<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatB </font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("abc","abc"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
测试--》访问http://192.168.9.130/testapp
如果正常,则会刷新过程中分别显示TomcatA和TomcatB,但是会话一致
 
说实话,我做到最后会话不知为什么不能保持,日志中已经互相检测到,但是会话疑似没有复制,这个(暂留)
中间遇到的问题如下:
Deployer className选项可能会造成以下错误
严重: FarmWarDeployer can only work as host cluster subelement!
如果配置完毕后,发现不能启动tomcat,则需要将组播地址添加到路由里,并添加到/etc/crontab
route add -net ... netmask ... dev eth0
 

基于mod_jk模块(暂留)
​准备工作--》
1、  为了避免用户直接访问后端Tomcat实例,影响负载均衡的效果,建议在Tomcat 7的各实例上禁用HTTP/1.1连接器。
2、为每一个Tomcat 7实例的引擎添加jvmRoute参数,并通过其为当前引擎设置全局惟一标识符。如下所示。需要注意的是,每一个实例的jvmRoute的值均不能相同。
3、前端apache如果使用的是mod_jk模式,则tomcat引擎一定要定义jvmroute参数;如果前端apache使用的是mod_proxy模式,则不需要定义。
tomcat引擎的开头示例如下--->
<Engine name=”Standalone” defaultHost=”localhost” jvmRoute=” TomcatA ”>
配置过程--》
配置apache,修改/etc/httpd/extra/httpd-jk.conf为如下内容:
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
#访问根下的任意文件,都转到集群1上
JkMount  /*  lbcluster1
#访问根下的jkstatus,都转到stat1上
JkMount  /jkstatus/  stat1
编辑/etc/httpd/extra/workers.properties,添加如下内容:
worker.list = lbcluster1,stat1
#实例类型
worker.TomcatA.type = ajp13
#实例内定义的虚拟主机的访问ip
worker.TomcatA.host = ...
#实例与连接器之间的端口
worker.TomcatA.port =
#实例权重
worker.TomcatA.lbfactor =
worker.TomcatB.type = ajp13
worker.TomcatB.host = ...
worker.TomcatB.port =
worker.TomcatB.lbfactor =
#集群类型
worker.lbcluster1.type = lb
#会话绑定
worker.lbcluster1.sticky_session =
#调度方法
worker.lbcluster1.method = R
#集群里含有的实例
worker.lbcluster1.balance_workers = TomcatA, TomcatB
worker.stat1.type = status
 
 

tomcat之负载均衡(apache反响代理tomcat)的更多相关文章

  1. Nginx系列之负载均衡和反响代理

    NGINX介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行 其特点是占有内存少,并发能力强,事实上nginx ...

  2. nginx的负载均衡和反响代理配置

    4.        负载均衡配置 nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 另外 ...

  3. TomCat之负载均衡

    TomCat之负载均衡 本文讲述了tomcat当nginx负载均衡服务器配置步骤 以下是Tomcat负载均衡配置信息 1.修改nginx的nginx.conf文件 添加如下属性:localhost是名 ...

  4. 基于Apache和tomcat实现负载均衡

    1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...

  5. apache+tomcat配置负载均衡,实现http与websocket接口分压

    一.应用场景 在生产环境中,应用服务器(此文以tomcat为例)不免面临高访问量的压力,相比而言web服务器(此文以apache为例)能够承担更大的并发量.Apache本身带有一些模块,可以完成对应用 ...

  6. 基于Apache+Tomcat实现负载均衡

    1.基于Apache和tomcat实现负载均衡 准备三个虚拟机一个安装Apache两个安装Tomcat 关闭防火墙 systemctl stop firewalld Iptabled -F Seten ...

  7. Apache+Tomcat部署负载均衡(或集群)

    本来只打算写Tomcat集群部署,简化Apache和Tomcat整合过程的.后来想了想,这样不便于没有用过Apache的朋友来学习本文内容.于是干脆加大篇幅,让对Apache不了解的朋友能对Apach ...

  8. apache tomcat搭建负载均衡(实现集群中的session同步)

    原理:tomcat 做个WEB服务器有它的局限性,处理能力低,效率低.承受并发小(1000左右).但目前有不少网站或者页面是JSP的.并采用了tomcat做为WEB,因此只能在此基础上调优. 目前采取 ...

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

      本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建 ...

随机推荐

  1. SpringMVC–SSH -- RESTful -- JSR303

    最近在使用SpringMVC+MyBatis感觉用起来效果很好.我不太明白SpringMVC和SSH的关系,遂搜索了一下.原来使用SpringMVC之后,可以替代之前的SSH这种开发模式. 附上知乎链 ...

  2. 迁移笔记:对ob_start()的总结

    1.Flush:刷新缓冲区的内容,输出. 函数格式:flush() 说明:这个函数经常使用,效率很高. 2.ob_start :打开输出缓冲区 函数格式:void ob_start(void) 说明: ...

  3. hdu 1142 A Walk Through the Forest

    http://acm.hdu.edu.cn/showproblem.php?pid=1142 这道题是spfa求最短路,然后dfs()求路径数. #include <cstdio> #in ...

  4. Power on & RESET 之前?

    這是個有趣的問題 ? 當應用系統 或 ic元件模組於初始之前存在的現像為何 是個得住意的問題 ! 因為得考量 是否會對週邊或被控制端造成危害 這也是長常常會是不穩定設計 的原因!得有實務經驗及想像力才 ...

  5. (转载)解决WPF动画属性锁死问题

    此文来自: 马开东博客 转载请注明出处 网址:http://www.makaidong.com 一般锁死问题都是出在后台代码写的动画中,以下为转载的解决方案! 方法一:将动画的 FillBehavio ...

  6. Android 中的接口回调

    http://blog.csdn.net/wangjinyu501/article/details/22052187   在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的 ...

  7. myeclipse中控制台日志比实际晚8小时解决方法及java日志处理

    今天终于忍不住要解决myeclipse控制台中日志显示比实际晚8小时的问题,开始以为myeclipse编辑器时间问题,后来想想不对,myeclipse控制台打印的是tomcat的日志,随后以为是log ...

  8. Hdu5737-Differencia(有序表线段树)

    题意很直观,我就不说了. 解析:这是我以前没有接触过的线段树类型,有序表线段树,每个节点申请了两段空间,主要是为了保存左边儿子会有多少比v小的,右边儿子会有多少比v小 的,所以在建树过程中要归并排序. ...

  9. 基于Android的物理类游戏,源代码(JAVA)分享

    游戏视频DEMO:http://v.youku.com/v_show/id_XNTM5MzM1Mzg0.html?from=s1.8-1-1.2 说明:一个自己做的Android上的物理类游戏,物理引 ...

  10. 计算机程序的思维逻辑 (63) - 实用序列化: JSON/XML/MessagePack

    上节,我们介绍了Java中的标准序列化机制,我们提到,它有一些重要的限制,最重要的是不能跨语言,实践中经常使用一些替代方案,比如XML/JSON/MessagePack. Java SDK中对这些格式 ...