什么是会话保留?
会话是最终用户与交互系统通信的过程。例如,将帐户密码输入操作系统以退出操作系统是会话过程。会话在网络上使用得更多。 TCP的三次握手创建会话。 TCP关闭连接。
Http协议是无状态协议,因此您需要使用会话机制来保存用户的状态,例如登录状态,公共信息等。
会话用于保存有关会话的信息,并且可以在多个页面之间共享。
例如:你打开淘宝登录个人账号,即使你浏览了很多店铺宝物,切换了很多页面,用户名不变,这就是Session的作用。在关闭浏览器并且会话被销毁之前,先前的登录记录将被删除。
今天,我与大家分享了“Nginx + tomcat实现负载均衡会话保留”的方法:如果网站的加载节点挂起,请求被分配给新节点会话也将被同步以实现会话保留,从而确保用户不知道。浏览。
实施原则
使用Manager对象实现HTTP会话管理
DeltaManager作为会话管理器
用户访问nginx,nginx负载均衡到tomcat。 Tomcat集群的会话管理器将所有会话会话更改同步到集群中的每个节点,以实现会话复制。
实验配置
Nginx配置
测试环境有两个用于单个服务器的tomcats,一个用于8080端口,另一个用于8090端口。
创建TomcatA TomcatB并单独配置tomcat server.xml。
将以下内容复制到引擎
添加此模块:
备注:
1.classname配置tomcat集群在传递信息时要使用的类。
Channelsendoptions可以设置为2,4,8.10
2-Confirm Send 4-Synchronous TX 8-Asynchronous Send
10-在异步模式下,通过添加Acknowledge可以提高可靠性2.Manager决定如何管理集群的会话信息。
className - 指定实现org.apache.catalina.ha.ClusterManager接口的类,以便管理信息。
expireSessionsOnShutdown - 设置为true时,将关闭一个节点,这将导致群集下的所有Sessions失败。
notifyListenersOnReplication-会话复制和删除集群中节点之间的操作,是否通知会话侦听器
3. Channel是Tomcat节点之间通信的工具。
频道包括5个组成部分:会员,接收者,发送者,传输,拦截器
4.Membership维护群集的可用节点列表。用于检测新节点和已删除的节点
地址 - 组播地址(任意定义的组播地址),如果需要阿里巴巴云ECS来部署tomcat,因为ECS不支持组播,建议使用memcache或redis存储会话来实现会话维护。
端口组播端口(两个tomcat组播端口必须相同)
frequency - 发送心跳的时间间隔(以: ms为单位)(UDP数据包发送到多播地址)。默认值为500
dropTime-Membership不会从dropTime中的节点(单元:毫秒)收到心跳,然后从可用节点列表中删除该节点。默认值为3000
5.Receiver:接收器
收到的消息的地址 - 地址(默认自动,但在虚拟机上打开tomcat会报告错误,建议配置本地IP地址)
端口 - 接收消息的端口(如果在一台服务器上配置了多个tomcats,则需要区分端口)
autoBind-port更改间隔
如果端口为4000且autoBind为100,则接收器将采用4000-4099之间的端口进行监视。
selectorTimeout-NioReceiver轮询超时
maxThreads - 线程池中的最大线程数
6.sender:发件人负责发送邮件
7.Valve:过滤器
8.Deployer:同步集群中所有节点的一致性
9.ClusterListener:侦听器,侦听Cluster组件接收的消息。使用DeltaManager时,Cluster收到的信息将通过ClusterSessionListener传递给DeltaManager。配置web.xml
在web.xml中添加属性以告知Web容器项目属于分布式项目
将标签添加到Web项目WEB-INF目录中
会话保留验证
Webapps/ROOT/index.jsp创建一个测试页面以获取sessionID
tomcatA
TomcatA
TomcatA
会话ID
创建于
tomcatB
TomcatB
TomcatB
会话ID
创建于
浏览器访问验证
总结一下:
Tomcat执行会话维护各种实现,这里只介绍Manager对象的实现,其优点是使用tomcat自带的集群会话复制来实现方便的会话配置,缺点是像阿里云ECS不支持组播不能用这种方式实现。您也可以使用memcache或redis来存储会话会话,但这是下载与tomcat版本对应的memcache jar包。