tomcat负载均衡配置

简介:

一、web server session

server端session:

1、service向用户浏览器发送cookie,此cookie包含获取服务端session的标识。

2、向用户通过浏览器请求同一站点的页面时,相应的cookie信息会随之发送。

3、server从cookie信息中识别出与此浏览器相关的session标识,从而判别出当前server上此浏览器的session信息。

在用户浏览器不支持cookie的场景中,也可以基于URL重写实现session功能。简单来讲就是server端通过为任何一个响应给用户的URL附加上session id的方式来标识用户请求。

不过需要注意的是,每个浏览器进程都会各自管理各自跟服务端的会话ID,因此,在服务器端看来,同一个客户端上的多个浏览器进程会被识别成不同的客户端。


二、会话管理器:

标准会话管理器和持久会话管理器

标准会话管理器(StandardManager):

<Manager className="org.apache.catalina.session.StandardManager"

         maxInactiveInterval="7200"/>

默认保存于$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/下的SESSIONS.ser文件中。

maxActiveSessions:最多允许的活动会话数量,默认为-1,表示不限制; 

maxInactiveInterval:非活动的会话超时时长,默认为60s;

pathname:会话文件的保存目录;


持久会话管理器(PersistentManager):

将会话数据保存至持久存储中,并且能在服务器意外中止后重新启动时重新加载这些会话信息。持久会话管理器支持将会话保存至文件存储(FileStore)或JDBC存储(JDBCStore)中。

保存至文件中的示例:

1
2
3
4
5
<Manager className= "org.apache.catalina.session.PersistentManager"
   saveOnRestart= "true" >
   <Store className= "org.apache.catalina.session.FileStore"
     directory= "/data/tomcat-sessions" />
< /Manager >

每个用户的会话会被保存至directory指定的目录中的文件中,文件名为<session id>.session,并通过后台线程每隔一段时间(checkInterval参数定义,默认为60秒)检查一次超时会话。

保存至JDBCStore中的示例:

1
2
3
4
5
6
<Manager className= "org.apache.catalina.session.PersistentManager"
   saveOnRestart= "true" >
   <Store className= "org.apache.catalina.session.JDBCStore"
     driverName= "com.mysql.jdbc.Driver"
     connectionURL= "jdbc:mysql://localhost:3306/mydb?user=jb;password=pw" />
< /Manager >


三、配置基于mod_jk的负载均衡

1、为了避免用户直接访问后端Tomcat实例,影响负载均衡的效果,建议在Tomcat 7的各实例上禁用HTTP/1.1连接器。

2、为每一个Tomcat 7实例的引擎添加jvmRoute参数,并通过其为当前引擎设置全局惟一标识符。如下所示。需要注意的是,每一个实例的jvmRoute的值均不能相同。

<Engine name=”Standalone” defaultHost=”localhost” jvmRoute=” TomcatA ”>

3、修改虚拟主机配置

1
2
3
4
5
6
7
8
9
[root@liang-study extra] # vim httpd-jk.conf 
 
# Load the mod_jk
LoadModule  jk_module  modules /mod_jk .so
JkWorkersFile   /usr/local/apache/conf/extra/workers .properties
JkLogFile  logs /mod_jk .log
JkLogLevel  debug
JkMount  /*  lbcluster1
JkMount   /status/   stat1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@liang-study extra] # vim workers.properties 
 
worker.list = lbcluster1,stat1
worker.TomcatA. type  = ajp13
worker.TomcatA.host = 192.168.210.148
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 5
worker.TomcatB. type  = ajp13
worker.TomcatB.host = 192.168.210.198
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 5
worker.lbcluster1. type  = lb
worker.lbcluster1.sticky_session = 1
worker.lbcluster1.balance_workers = TomcatA, TomcatB
worker.stat1. type  = status

4、重启httpd服务,验证访问结果。


四、配置基于mod_proxy的负载均衡

1、为了避免用户直接访问后端Tomcat实例,影响负载均衡的效果,建议在Tomcat 7的各实例上禁用HTTP/1.1连接器。

2、为每一个Tomcat 7实例的引擎添加jvmRoute参数,并通过其为当前引擎设置全局惟一标识符。如下所示。需要注意的是,修改server.xml每一个实例的jvmRoute的值均不能相同。

<Engine name=”Standalone” defaultHost=”localhost” jvmRoute=” TomcatA ”>

3、修改httpd.conf配置

1
2
[root@liang-study conf] # vim httpd.conf
Include conf /extra/tomcat-http .conf

4、添加虚拟主机配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@liang-study conf] # vim extra/tomcat-http.conf 
 
ProxyRequests Off
    <proxy balancer: //liangcluster >
        BalancerMember ajp: //192 .168.210.148:8009 loadfactor=1 route=tomcatA
        BalancerMember ajp: //192 .168.210.198:8009 loadfactor=1 route=tomcatB
    < /proxy >
 
 
<VirtualHost *:80>
   ServerName www.liangstudy.com
   ProxyPass / balancer: //liangcluster/  stickysession=jsessionid nofailover=On
   ProxyPassReverse / balancer: //liangcluster/
   ErrorLog  "logs/proxyTest-error.log"
   CustomLog  "logs/lbtest-access.log"  common
< /VirtualHost >

5、重新启动apache,即可


五、用于mod_proxy状态信息的输出

<Location /balancer-manager>

  SetHandler balancer-manager

  Order Deny,Allow

  Allow from all

</Location>


如果使用虚拟主机实现反向代理,如何在对应的虚拟主机上完成状态信息输出:

ProxyRequests Off

<proxy balancer://lbcluster1>

  BalancerMember ajp://192.168.10.8:8009 loadfactor=1

  BalancerMember ajp://192.168.10.9:8009 loadfactor=1

  ProxySet lbmethod=bytraffic

</proxy>



<VirtualHost *:80>

  ServerName localhost

  ProxyVia On

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

  ProxyPassReverse / balancer://lbcluster1/

  <Location /balancer-manager>

    SetHandler balancer-manager

    Proxypass !

    Require all granted

  </Location>

  <Proxy *>

    Require all granted

  </Proxy>

  <Location  / >

    Require all granted

  </Location>

</VirtualHost>


五、基于mod_proxy实现共享集群

  根据会话管理器的模式,我们选用org.apache.catalina.ha.session.DeltaManager的方法来实现共享,所有启用集群功能的web应用程序,其web.xml中都须添加<distributable/>才能实现集群功能。如果某web应用程序没有自己的web.xml,也可以通过复制默认的web.xml至其WEB-INF目录中实现。

1、修改web.xml

1
2
3
4
5
6
7
8
9
10
[root@liang-study webapps] # cd /home/websites/webapps/
[root@liang-study webapps] # mkdir WEB-INF
[root@liang-study webapps] # cp /usr/local/tomcat/conf/web.xml WEB-INF/
[root@liang-study webapps] # ll
total 8
-rw-r--r-- 1 root root  434 Jan 17 17:57 index.jsp
drwxr-xr-x 2 root root 4096 Jan 18 20:20 WEB-INF
[root@liang-study webapps] # vim WEB-INF/web.xml 
在web.xml中添加<distributable/>即可,记得在另外一台tomcat上也需要做这个操作
[root@liang-study webapps] # scp -r WEB-INF/ root@192.168.210.198:/home/websites/webapps/

2、修改server.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
在<Engine name= "Catalina"  defaultHost= "www.liangstudy.com"  jvmRoute= "tomcatA" >下添加
<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.90.90.1"    bind= "192.168.210.148"    port= "45564"
                    frequency= "500"   dropTime= "3000" />
              <Receiver className= "org.apache.catalina.tribes.transport.nio.NioReceiver"
                                 address= "192.168.210.148"    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= ".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;" />
      <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 >
注意根据tomcat主机不同修改配置文件中 bind= "192.168.210.148" 和address= "192.168.210.148"

3、重启tomcat

本文转自  亮公子  51CTO博客,原文链接:http://blog.51cto.com/iyull/1892637

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
网络协议 Java 应用服务中间件
框架源码私享笔记(01)Tomcat核心架构功能 | 配置详解
本文首先分享了《活出意义来》一书序言中的感悟,强调成功如同幸福,不是刻意追求就能得到,而是全心投入时的副产品。接着探讨了Tomcat的核心功能与架构解析,包括网络连接器(Connector)和Servlet容器(Container),并介绍了其处理HTTP请求的工作流程。文章还详细解释了Tomcat的server.xml配置文件,涵盖了从顶级容器Server到子组件Connector、Engine、Host、Context等的配置参数及作用,帮助读者理解Tomcat的内部机制和配置方法。
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
1098 25
|
Java 应用服务中间件 Linux
在Java 12环境中配置和部署Apache Tomcat的步骤。
这段部署Tomcat的冒险旅程充满技术挑战,但同时也像游戏一样充满乐趣。它需要你提前准备,仔细执行,并随时准备解决意外情况。成功后,你就可以在这匹强壮的网络野马上,带着你的Java应用,冲向Web开发的璀璨星空。
430 56
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
2063 5
|
Java 应用服务中间件 Maven
在IntelliJ IDEA中如何配置使用Maven以创建Tomcat环境
所以,别担心这些工具看起来有些吓人,实际上这些都是为了帮助你更好的完成工作的工具,就像超市里的各种烹饪工具一样,尽管它们看起来可能很复杂,但只要你学会用,它们会为你烹饪出一道道美妙的食物。这就是学习新技能的乐趣,让我们一起享受这个过程,攀登知识的高峰!
946 27
|
Java 应用服务中间件 Apache
在IntelliJ IDEA中使用Maven配置Tomcat环境
此配置方法具有较高的实用性,简单易懂。遵循以上步骤,您将能顺利在IntelliJ IDEA中使用Maven配置Tomcat环境,从而进行Web项目的开发和调试。
2068 18
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
514 21
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
845 11
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
497 14
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
609 11