Session 黏性和复制集群|学习笔记

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 快速学习 Session 黏性和复制集群

开发者学堂课程【Tomcat 服务器入门详解Session 黏性和复制集群】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/654/detail/10848


Session 黏性和复制集群


1、负载均衡配置说明

下面是它的指令,主要是设定 Balancer 成员,要负载均衡、调度,就需要列出相关成员。

配置代理到balancer

ProxyPass [path] !|url [key=value [key=value …]]

Balancer成员

BalancerMember [balancerur] url [key=value [key=value …]]

设置Balancer或参数

ProxySet url key=value [key=value …]

ProxyPass和BalancerMember指令参数

参数

缺省值

说明

min

0

连接池最小容量

max

1 – n

连接池最大容量

retry

60

apache请求发送到后端服务器错误后等待的时间秒数。0表示立即重试

参数

缺省值

说明

loadfactor

 

定义负载均衡后端服务器权重,取值范围1-100 

lbmethod

byrequests

负载均衡调度方法

byrequests基于权重的统计请求个数进行调度; byrequests基于权重的统计请求个数进行调度; bybusyness通过考量每个后端服务器当前负载进行调度

maxattempts

1

放弃请求前实现故障转移的次数,默认为1,其最大值不应该大于总的节点数

nofailover

Off

如果后端服务器没有Session副本,可以设置为On不允许故障转移。Off故障可以转移

stickysession

 

调度器的sticky session名字,根据web后台编程语言不同,可以设置为JSESSIONID或PHPSESSIONID

Blancer参数

ProxySet指令也可以使用上面的参数。

为了方便大家观察,我们要在t 1、t 2的tomcat 配置中分别增加jvmRoute,这样SessionID,

就变成了SessionID=9c94FA4AFCBE9337F5F0669548BD4DF.To

mcat2,我们就可以看出sessionID属于谁。

我们要打开conf.d/vhosts.conf,这个在讲Tomcat session集群时有用处,打开之后内容如下:image.pngloadfactor设置为1:2,便于观察。观察调度的结果是轮询的。

2、使用 session 粘性

修改conf.d/vhosts.conf

image.png

3、ajp 调度

修改conf.d/vhosts.conf

image.png如果要用ajp,要把

HeaderaddSet-Cookie “ROUTEID=.%{BALANCER_WORKER_ROUTE}e;path=/”e

nv=BALANCER_ROUTE_CHANGED删掉,

再改ajp、8009两处

proxyset stickysession=ROUTEID先禁用看看切换效果,开启后看看黏住效果。

开启后,发现session不变,一直找同一个Tomcat服务器。

image.png虽然,上面的做法实现客户端在一段时间内找同一台Tomcat,从而避免切换后导致的Session丢失。但是如果Tomcat节点挂掉,那么Session依旧丢失。

假设有A、B两个节点,都把Session做了持久化。如果Tomcat A服务下线期间用户切换到了Tomcat B上,就获得了Tomcat B的Session,就算持久化Session的Tomcat A上线了,也是没用了。

上面的方案具有局限,为了解决这种问题,我们要从服务器入手,从服务器入手,就要从Tomcat想办法,什么办法呢?

就是我们开始时说的:一种是复制集群,一种是共享服务器

五、Tomcat Session集群

参考:

https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html 中的For the impatient

我们直接打开网址Apache Tomcat,想要的东西在这基本都能找到

Receiver我们要注意一下,指的是单波复制  address=“auto”这个在大多数情况下都要改,因为auto自动绑定的是127.0.0.1,因为你是被动接收,所以地址要选择别人能访问到的,不要用auto

两个拦截器TcpFailureDetector,MessageDispatchInterceptor

我已经整理出文档,同学们照着这个做不会有太大问题

以下是文档:

Cluster 集群配置
Manager 会话管理器配置
Channel 信道配置
Membership 成员判定。使用什么多播地址、端口多少、间隔时长ms、超时时长ms。同一个多播地址和端口认为同属一个组。使用时修改这个多播地址,以防冲突。Receiver 接收器,多线程接收多个其他节点的心跳、会话信息。默认会从4000到4100依次尝试可用端口。
address=“auto”,auto可能绑定到127.0.0.1上,所以一定要改为可以用的IP上去
Sender 多线程发送器,内部使用了tcp连接池。
Interceptor 拦截器
Valve
ReplicationValve 检测哪些请求需要检测Session,Session数据是否有了变化,需要启动复制过程
ClusterListener
ClusterSessionListener 集群session侦听器
使用
添加到 所有虚拟主机都可以启用Session复制
添加到 ,该虚拟主机可以启用Session复制
最后,在应用程序内部启用之后才可以使用

前提:
时间同步,确保NTP或Chrony服务正常运行。

# systemctl status chronyd
防火墙规则。# systemctl stop firewalld
主机名 t 0 服务为调度器 nginx httpd IP:192.168.32.7
主机名 t 1 服务为Tomcat1 JDK8、Tomcat8 IP:192.168.32.17
主机名 t 2 服务为Tomcat2 JDK8、Tomcat8 IP:192.168.32.27
本次把多播复制的配置放到缺省虚拟主机里面, 即Host之下。
特别注意修改Receiver的address属性为一个本机可对外的IP地址。
要在Tomcat 8容器中运行会话复制,应完成以下步骤:
所有会话属性都必须实现 java.io.Serializable
取消注释Clusterserver.xml中的元素
如果定义了自定义集群阀,请确保ReplicationValve 在server.xml的Cluster元素下也有定义

如果您的Tomcat实例在同一台机器上运行,

请确保Receiver.port 每个实例的属性都是唯一的,在大多数情况下,Tomcat足够聪明,可以通过自动检测4000-4100范围内的可用端口自行解决此问题。

确保你的web.xml有 <distributable/>元素
如果您使用的是mod_jk,

请确保在Engine上设置<Engine name="Catalina" jvm

Route="node01" > 了jvmRoute属性,并且jvmRoute属性值与worker.properties中的工作程序名称匹配。

确保所有节点都具有相同的时间并与NTP服务同步!确保将您的负载均衡器配置为粘性会话模式。
[root@node1 tomcat]#cat conf/web.xml |tail -10
<!-- here, so be sure to include any of the default values that you wish  -->
<!-- to use within your application.       -->

<welcome-file-list>
<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>    
<distributable/>  #表示开启集群  一定要添加
</web-app>
t1的server.xml中,如下
<Host name="t1.likai.com" appBase="/data/webapps" autoDeploy="true" >

其他略去
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.32.17"  #修改对应的ip地址
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>

t2的server.xml中,如下
<Host name="t2.likai.com" appBase="/data/webapps" autoDeploy="true" >
其他略去
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.32.27"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>

Tomcat重启后,ss命令能看到tomcat监听在4000端口上
尝试使用刚才配置过得负载均衡(移除Session黏性),测试发现Session还是变来变去。
准备 web.xml
在应用中增加 WEB-INF,从全局复制一个 web.xml 过来
#mkdir /data/webapps/ROOT/WEB-INF/
# cp /usr/local/tomcat/conf/web.xml /data/webapps/ROOT/WEB-INF/
为 web.xml 的 标签增加子标签 来开启该应用程序的分布式。
重启全部 Tomcat,通过负载均衡调度到不同节点,返回的 SessionID 不变了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
5月前
|
Android开发 开发者
Android利用SVG实现动画效果
本文介绍了如何在Android中利用SVG实现动画效果。首先通过定义`pathData`参数(如M、L、Z等)绘制一个简单的三角形SVG图形,然后借助`objectAnimator`实现动态的线条绘制动画。文章详细讲解了从配置`build.gradle`支持VectorDrawable,到创建动画文件、关联SVG与动画,最后在Activity中启动动画的完整流程。此外,还提供了SVG绘制原理及工具推荐,帮助开发者更好地理解和应用SVG动画技术。
245 30
|
10月前
|
监控 测试技术
slb测试会话保持功能
slb测试会话保持功能
322 6
|
11月前
|
安全 前端开发 API
反向海淘客户案例:hoobuy淘宝代购集运系统搭建攻略介绍
这份攻略详细介绍了如何搭建 Hoobuy 淘宝代购集运系统。首先,通过市场调研与定位,明确目标客户和竞争态势,确定市场定位。接着,选择合适的技术栈,包括后端、前端和数据库,构建稳定高效的系统架构。核心功能涵盖 API 集成、商品展示、购物车管理、物流追踪等,确保用户体验。此外,注重安全与合规,保障用户数据和支付安全,遵守相关法律法规。最后,通过 SEO 优化、社交媒体营销和建立合作伙伴关系,推动系统的推广与运营。
|
存储 前端开发 安全
前端轮询问题之在setTimeout版轮询中,如何避免旧请求的响应继续触发定时
前端轮询问题之在setTimeout版轮询中,如何避免旧请求的响应继续触发定时
218 1
|
算法 决策智能
【MATLAB】LMD分解+FFT+HHT组合算法
【MATLAB】LMD分解+FFT+HHT组合算法
496 0
|
缓存 索引
ES的删除和更新,旧数据到低是如何处理的?
根据ES的读写入原理,大家都知道ES写入时每秒从内存缓冲区(memory buffer)生成小的segment,将其递交给系统缓存(OS filesystem cache)中,后台会定期的对这些小的segment 合并成一个大的segment段
706 0
ES的删除和更新,旧数据到低是如何处理的?
|
机器学习/深度学习 移动开发 前端开发
淘宝直播零代码弹窗生产方案总结
本文将介绍,淘宝直播前端团队为提升业务触达效率而设计的零代码弹窗动态化方案。
766 0
淘宝直播零代码弹窗生产方案总结
|
存储 Ubuntu Unix
使用croc命令在Linux系统电脑之间传输文件和文件夹
使用croc命令在Linux系统电脑之间传输文件和文件夹
534 0
使用croc命令在Linux系统电脑之间传输文件和文件夹
|
机器学习/深度学习 数据采集 人工智能
面向开放智能,蚂蚁集团揭秘隐私计算框架
最近一段时间,隐私计算成为了众多科技公司的研究方向,它或许将成为数据市场化的重要基础设施。
798 0
面向开放智能,蚂蚁集团揭秘隐私计算框架
|
机器人 API UED
Py之itchat:python库之itchat的简介、安装、使用方法之详细攻略
Py之itchat:python库之itchat的简介、安装、使用方法之详细攻略
Py之itchat:python库之itchat的简介、安装、使用方法之详细攻略