1. 程式人生 > >nginx叢集負責均衡利用redis實現共享session會話狀態,針對tomcat8

nginx叢集負責均衡利用redis實現共享session會話狀態,針對tomcat8

當前是隻針對tomcat8的部署,

如果你們的伺服器是tomcat7.x或7以下的版本,請看這個帖子:https://blog.csdn.net/hua1586981/article/details/78132710

目的

搭建好nginx負載均衡後,實現反向代理的叢集功能,當用戶訪問網站時,負載均衡會自動在多臺伺服器之間來回交替的呼叫,以確保達到負載均衡的效果,

問題

但是這裡有一個問題,就是session會話的儲存,筆者在搭建好nginx集群后,訪問網站是沒問題的,但登入之後再重新整理頁面,發現還是沒登陸的狀態,就這樣反覆登入了幾次都是未登入的狀態,百度瞭解到,原來是session會話的問題,你在A伺服器登入的,當你重新整理頁面後,nginx自動代理到了B伺服器,但是你的session會話在A伺服器中是已登入的狀態,在B伺服器是未登入的。所以就需要你在登入一次。

如圖:

解決辦法就是利用redis快取來統一儲存各服務的session會話,使用者訪問A服務後,伺服器會將使用者的會話狀態儲存到redis快取中,這時候使用者重新整理頁面,切換到B服務,B伺服器會先去redis快取中找是否已經有這個使用者的會話狀態,如果有了,直接取出來用,如果沒有 在建立一個

文字描述到此結束,上教程。。。

利用redis實現會話共享

1、說明

此demo用的是tomcat8,不同的tomcat版本會有不同的jar包。將會給到tomcat7的jar包和tomcat8的jar包。因為現在網上外掛不支援tomcat8。我提供的外掛jar包是更改原始碼後的jar。所以是OK的啦。此處注意:下載的jar包是放在tomcat/lib目錄下哦,並非工程的lib目錄下呢~

也可自行修改 RedisSessionManager.java    檔案

原始碼下載地址:https://github.com/jcoleman/tomcat-redis-session-manager

2、下載jar包

  點我下載

3、配置

更改tomcat/conf下context.xml檔案【context】節點下加如下程式碼【兩個tomcat配置檔案都要改哦】:
注:這是配置redis的連結資訊,如果沒有密碼可以把passowrd項去掉
注:這裡是tomcat8的配置程式碼,也就是此部落格所用到的配置

<Valve className="com.demo.redis_session.RedisSessionHandlerValve" />
        <Manager className="com.demo.redis_session.RedisSessionManager"
        #這裡是redis伺服器地址
        host="192.168.50.140"
        #這裡是redis埠,redis預設埠是6379
        port="6379"
        #這裡是redis資料庫中的標識,標識第0個,預設使用0即可
        database="0"            
        #redis過期時間預設設定為60,單位是秒,session過期時間為30分鐘,所以設定為1800對應30分鐘
        maxInactiveInterval="1800"/>

配置完記得重啟伺服器。

4、執行檢視效果

填寫test.jsp頁面已驗證是否成功

這是阿里雲伺服器上jsp

<html>
    <head>
    </head>
    <body>
        <h4 style="margin:10px;">11aliyun-sessionId = <%=session.getId() %> </h4>
    </body>
</html>

這是騰訊雲伺服器上的jsp

<html>
    <head>
    </head>
    <body>
        <h4 style="margin:10px;">tenxunyun-sessionId = <%=session.getId() %> </h4>
    </body>
</html>

檢視頁面效果,第一次重新整理,是阿里雲的伺服器

第二次重新整理,是騰訊雲的

我們可以看到,他們的sessionid是一樣的,這樣就實現了session共享

 

轉載於https://blog.csdn.net/hua1586981/article/details/78132710