使用Tomcat+Redis來實現集群部署中的Session共享問題

chris2011 8年前發布 | 43K 次閱讀 Tomcat 應用服務器

來自: http://my.oschina.net/kolbe/blog/618167


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

1、使用數據庫來存儲Session

2、使用Cookie來存儲Session

3、使用Redis來存儲Sesssion


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

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

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

注:

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

2)maxInactiveInterval設置不生效,暫時找不到原因,在部署中發現Session失效的間隔一直都是讀取tomcat/conf/web.xml中的session-config節點中配置的session-timeout屬性值,且都是以秒為單位(如有知道問題原因所在的,麻煩告訴我一聲,非常感謝)


2、添加相關的jar包到tomcat/lib目錄下,需要的jar包如下:

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

注:

1)我將這些jar包上傳到了百度云盤中,有需要的可以點擊下載:http://pan.baidu.com/s/1bokMOVH


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

http {
  upstream myServer {
    server 192.168.1.2:8080;
    server 192.168.1.3:8080;
  }
  server {
    listen 80;
    server_name www.kolbe.cn;
    location / {
      proxy_pass http://myServer;
    }
}

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

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

當然,也可以到Redis庫中直接查看


注:

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

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


 本文由用戶 chris2011 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!