侧边栏壁纸
博主头像
清如许博主等级

努力成长为一颗大树,一半洒落阴凉,一半沐浴阳光,非常沉默非常骄傲,从不依靠从不寻找

  • 累计撰写 80 篇文章
  • 累计创建 44 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

tomcat集群环境下如何保证session一致性.md

清如许
2020-04-25 / 0 评论 / 0 点赞 / 409 阅读 / 1,661 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-12-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

## 为什么集群环境下,会出现session不一致问题?

答:使用nginx的负载均衡之后,不确定访问哪个tomcat,导致客户端存储的jsessionid携带到集群环境下的其他tomcat是无效的。
在这里插入图片描述

关于集群环境下,解决session不一致问题?

方式1:负载均衡的策略ip黏着:在nginx的default.conf配置ip_hash,这样客户端会固定的访问某一台服务器

方式2:使用redis管理集群环境的session,session对象不在存储在tomcat服务器,而是redis数据库中,如下图所示:
在这里插入图片描述
实现原理描述:
客户端访问nginx,分配到tomcat-1服务器,创建session对象,jsessionid,将jsessionid作为key,session对象作为value存到redis数据库中,随着响应将jsessionid返回给客户端浏览器,该客户端浏览器向nginx在次发出请求,写cookie(包含jsessionid),到nginx后被分配到tomcat-2服务器,tomcat-2获取cookie中的jsessionid,去redis数据库查找对应的session对象并且返回使用

实现步骤:

1.将下边三个jar上传到tomcat服务器中的lib目录下
要重写tomcat的session实现方法,将session管理到redis服务器中
如下图所示:
在这里插入图片描述
2. 修改tomcat中conf目录下的context.xml
原因1:我们上传的jar中的类,替换了tomcat中的代码,需要让tomcat知道我们的类叫什么名字
原因2:配置redis数据库所在服务器的ip地址和redis数据库的端口号

在这里插入图片描述
3. 重启tomcat服务
进入bin目录 ,先执行./shutdown.sh 再执行./startup.sh

注意:以上操作集群中的tomcat(有几个就操作几个)都是相同的操作

4,测试
做一个登陆页面,测试一下上面的操作有没有成功

0

评论区