日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

一、工作中因為要使用到Tomcat集群部署,此時就涉及到了Session共享問題,主要有三種解決方案:

  1、使用數據庫來存儲Session

  2、使用Cookie來存儲Session

  3、使用Redis來存儲Sesssion

  4、使用Tomcat的session復制

  5、使用Memcached來存儲Session

二、本文中主要講一下第3種方案,也就是使用Redis來存儲Session,Github中已經有該開源組件(Tomcat-redis-session-manager),下面講一下配置的步驟:

  1、環境準備

    Tomcat7 下載地址:http://tomcat.apache.org/download-70.cgi

    Tomcat-redis-session-manager 下載地址:http://pan.baidu.com/s/1bokMOVH

    本文使用的Nginx來做的Tomcat集群。

? ? ? ? ? ?Nginx安裝參考:Linux Centos 6.5_x86安裝Nginx

    Redis安裝參考:轉:Centos6.5_x86安裝Redis

  2、配置tomcat配置文件context.xml

<!-- host="192.168.159.129" Redis地址 --><!-- port="6379" Redis端口 --><!-- password="123456" Redis密碼 --><!-- database="0" 存儲Session的Redis庫編號 --><!-- maxInactiveInterval="60" Session失效的間隔(秒) --><Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="192.168.159.129" port="6379" password="123456" database="0" maxInactiveInterval="60" />

注:

  1)Manager節點中的className屬性為必選項,其它均為可選項

  2)maxInactiveInterval設置不生效,暫時找不到原因,在部署中發現Session失效的間隔一直都是讀取tomcat/conf/web.xml中的session-config節點中配置的session-timeout屬性值,且都是以秒為單位,(這個地方maxInactiveInterval好像不起作用,和web.xml中配置的session-config優先級有關?)

  3、添加Tomcat-redis-session-manager的jar包到tomcat/lib目錄下,需要的jar包如下:

    commons-pool2-2.2.jar
    jedis-2.5.2.jar
    tomcat-redis-session-manage-tomcat7.jar

3、在nginx中配置負載均衡,配置文件為nginx.conf

http {upstream myServer {server 192.168.1.2:8080;server 192.168.1.3:8080;}server {listen 80;server_name localhost;location / {proxy_pass http://myServer;}}}

 配置完后,訪問localhost的請求都將被轉發到192.168.1.2:8080以及192.168.1.3:8080中去,可以在Jsp頁面中打印一下Session?Id驗證一下:

  Session Id : <%= request.getSession().getId() %>

?  如果在同一個瀏覽器頁面上不斷刷新訪問,SessionId的值不變化的話,說明配置正確,此時獲取的是同一個Session對象。

  ?也可以通過redis客戶端連接到Redis庫中直接查看:查看會顯示有 “56E2FAE376A47F1C0961D722326B8423” key的 session 數據,value為序列化數據。

  

  注:

  1)GitHub中該開源組件(Tomcat-redis-session-manager)的主頁:https://github.com/jcoleman/tomcat-redis-session-manager

  2)該組件目前不支持Tomcat8,我用的是Tomcat 7.0.68版本

  3)在程序中將對象放到Redis里時,該對象必須實現java.io.Serializable接口,否則將報錯,如果對象中有其它對象的引用,該引用對象也需實現java.io.Serializable接口,所以在使用request.getSession().setAttribute()方法時,一定要注意一下這一個細節。

  4)因為要把Tomcat-redis-session-manager的jar包放到Tomcat/lib中,對Tomcat的部署造成了侵入,可以使用Spring Session來替代,spring-session使用攔截器重新包裝了request從而替換session實現

  5)因為所有集群的Tomcat中配置的Redis地址是一個,如果Redis崩潰了,那么Session就不可用了,所以需要部署Redis集群,實現故障自動切換,高可用的目標。

  keepalived+redis 高可用redis主從解決方案

?

文章參考自:

    1.https://my.oschina.net/kolbe/blog/618167

    2.http://www.cnblogs.com/lengfo/p/4260363.html

轉載于:https://my.oschina.net/ydsakyclguozi/blog/3014775

總結

以上是生活随笔為你收集整理的使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。