首页 > 其他分享 >Tomcat(63)什么是Tomcat的粘性会话?

Tomcat(63)什么是Tomcat的粘性会话?

时间:2024-12-08 10:30:42浏览次数:6  
标签:Tomcat worker 会话 63 jk node1 node2 mod

Tomcat的粘性会话(Sticky Sessions),也称为会话粘性(Session Affinity),是一种负载均衡策略。在这种策略下,用户在开始一个会话后,所有该会话的请求都会被路由到同一个服务器。这对于需要会话状态一致性的Web应用程序非常重要,因为会话数据存储在服务器内存中。

为什么使用粘性会话?

  1. 性能提高:避免了将会话数据复制到集群中的每个节点,减少了网络开销。
  2. 简化会话管理:减少了会话复制的复杂性和错误率。

如何在Tomcat中实现粘性会话?

假设你使用Apache HTTP Server和mod_jk来实现负载均衡。以下是一个详细的配置示例,包括粘性会话的实现。

1. 安装Apache HTTP Server和mod_jk

确保已安装Apache HTTP Server和mod_jk模块。

2. 配置mod_jk

a. 编辑httpd.conf

在Apache HTTP Server的配置文件httpd.conf中添加以下内容:

# Load mod_jk module
LoadModule jk_module modules/mod_jk.so

# Configure mod_jk
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMount /myapp/* loadbalancer
b. 配置workers.properties

在Apache HTTP Server的conf目录下创建workers.properties文件,并添加以下内容:

# Define workers
worker.list=loadbalancer

# Define Node1
worker.node1.type=ajp13
worker.node1.host=192.168.1.1
worker.node1.port=8009
worker.node1.lbfactor=1

# Define Node2
worker.node2.type=ajp13
worker.node2.host=192.168.1.2
worker.node2.port=8009
worker.node2.lbfactor=1

# Define the load balancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2

# Sticky session configuration
worker.loadbalancer.sticky_session=true

3. 配置Tomcat的AJP连接器

确保每个Tomcat实例的server.xml文件中配置了AJP连接器。以下是一个示例:

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

4. 配置session replication(可选)

虽然粘性会话不需要会话复制,但为了实现高可用性,你仍然可以配置会话复制。以下是一个示例,配置在每个Tomcat实例的server.xml中:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
  <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"/>
  </Channel>
  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.jsp"/>
  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

完整示例

httpd.conf
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so

# Configure mod_jk
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info

# Mount your applications
JkMount /myapp/* loadbalancer
workers.properties
# Define workers
worker.list=loadbalancer

# Define Node1
worker.node1.type=ajp13
worker.node1.host=192.168.1.1
worker.node1.port=8009
worker.node1.lbfactor=1

# Define Node2
worker.node2.type=ajp13
worker.node2.host=192.168.1.2
worker.node2.port=8009
worker.node2.lbfactor=1

# Define the load balancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2

# Sticky session configuration
worker.loadbalancer.sticky_session=true

测试粘性会话

  1. 访问应用:通过Apache HTTP Server的IP地址和端口访问你的Web应用。例如,http://<apache_server_ip>/myapp
  2. 创建会话:在应用中创建会话,比如登录操作。
  3. 验证粘性会话:在一个节点上创建会话后,所有后续请求应发送到同一节点。查看mod_jk日志(mod_jk.log)和Tomcat日志,确认会话粘性生效。
  4. 故障转移测试:停止处理请求的Tomcat实例,查看是否新的实例接管会话,并观察会话是否保持一致。

通过以上配置,你可以在Tomcat集群中实现粘性会话,从而保证用户会话的一致性和高效性。

标签:Tomcat,worker,会话,63,jk,node1,node2,mod
From: https://blog.csdn.net/qq_43012298/article/details/139167359

相关文章

  • 按键 芯片pcf50633 linux 驱动程序
    /*NXPPCF50633InputDriver*©2006-2008byOpenmoko,Inc.Allrightsreserved.BrokendownfrommonstrousPCF50633drivermainlybyHaraldWelte,AndyGreenandWernerAlmesbergerThisprogramisfreesoftware;youcanredistributeitand/ormodifyitun......
  • 力扣 630课程表iii
     原题链接题解反悔贪心,或者说是贪心+优先队列。code classSolution{public:staticboolcmp(vector<int>a,vector<int>b){if(a[1]!=b[1])returna[1]<b[1];returna[0]<b[0];}intscheduleCourse(vector<vector<int>......
  • tomcat服务器的下载与安装
    安装安装地址:tomcat.apache.org并解压上面的tomcat服务器软件。介绍tomcat目录结构启动web服务器如果你出现了一闪而过,查看logs.一般出现这种错误的原因:你没有配置JAVA_HOME.你把软件放在中文目录下。访问tomcat服务器http://服务器所在的ip:8080......
  • LeetCode 263[丑数]
    题目链接LeetCode263[丑数]详情实例提示题解思考题目对丑数的定义:只包含质因数2、3、5的正整数条件一:只包含质因数2、3、5条件二:正整数 对于条件二很好筛选:如果给定值n小于1,即给定值为0或者是负数,此时条件二不满足,则返回false该部分的代码实现如下:......
  • 洛谷题单指南-线段树-P1637 三元上升子序列
    原题链接:https://www.luogu.com.cn/problem/P1637题意解读:统计序列a[1]~a[n]中三元上升子序列的个数,三元上升子序列是指对于1<=i<j<k<=n有a[i]<a[j]<a[k],(a[i],a[j],a[k])成为一组上升子序列。解题思路:1、先思考一下暴力,通过三重循环枚举i,j,k找到所有i<j<k时符合a[i]<a[j]<a[k]......
  • P6394 樱花,还有你
    P6394樱花,还有你樱花,还有你题目背景DearLing,  呐,你知道吗?听说樱花飘落的速度是秒速五厘米哦。  ……所以,再等等吧!三月,武汉大学,樱花就快来了呢。  你一定会陪我一起看吧,在酥软的阳光下,我会悄悄牵起你的手,感受你熟悉的温度,糟糕,脸儿也不小心被粉嫩嫩的樱花映红的呢。......
  • P5631 最小mex生成树
    P5631最小mex生成树题目背景这是一道经典题。题目描述给定\(n\)个点\(m\)条边的无向连通图,边有边权。设一个自然数集合\(S\)的\(\text{mex}\)为:最小的、没有出现在\(S\)中的自然数。现在你要求出一个这个图的生成树,使得其边权集合的\(\text{mex}\)尽可能小。......
  • P6329 【模板】点分树 | 震波
    P6329【模板】点分树|震波来补点分树模板的题解了:先明确一下点分树的定义:又很多个重心构成的一棵树,且树上的层数关系对应重心的大小那么我们为什么要建这一颗树呢:因为我们要处理多组询问并且又修改.然后点分树的建树方式其实在定义中就几乎给出了,就是在求重心时将新老重心......
  • requests - 会话保持
    使用场景:后台启用会话,登录之后,只要保持会话,就可以持续访问接口。需要注意会话保持,登录之后不要断线;为了防止CSRF攻击,登录参数除了账号密码,有时候还会有个token,这个要通过爬虫抓取;importrequests#目标网站的登录URLlogin_url='http://example.com/login'#创建一......
  • P2863 [USACO06JAN] The Cow Prom S
    https://www.luogu.com.cn/problem/P2863[USACO06JAN]TheCowPromS题目描述有一个n个点,m条边的有向图,请求出这个图点数大于1的强连通分量个数。输入格式第一行为两个整数n和m。第二行至m+1行,每一行有两个整数a和b,表示有一条从a到b的有向边。输出格式......