Redis儲存Tomcat集群的Session

2022-09-14 07:24:12 字數 1921 閱讀 9280

redis儲存tomcat集群的session

如何

做到把新開發的**推送到到生產系統中部署,生產系統要能夠零宕機、對使用使用者零影響。

設想

那麼問題來了

在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。

下面

我們用例項來說明此方案。我們的例子使用了一台nginx做負載均衡,後端掛接了兩台tomcat,且每台tomcat的session會話 都儲存到redis資料庫中。其中,nginx配置為non-sticky執行模式,也即每乙個請求都可以被分配到集群中的任何節點。當要上線新**時, 只需簡單地取下tomcat例項,此時所有的訪問使用者會被路由到活動的tomcat例項中去,而且由於會話資料都是儲存在redis資料庫中,所以活躍用 戶並不會受影響。當tomcat更新完畢,又可以把此節點加入到nginx中。

安裝nginx

# sudo rpm -ivh nginx-1.4.2-1.el6.ngx.x86_64.rpm

修改配置檔案/etc/nginx/nginx.conf,並新增下面的內容:

修改配置檔案/etc/nginx/conf.d/default

.conf並替換location部分的內容:

location /

重啟nginx

# sudo service nginx restart

接下來

安裝兩個tomcat例項。由於我們是在同一臺伺服器上做的演示,要讓兩台tomcat不發生衝突,需要修改第二個tomcat例項的埠

號。由於nginx配置為non-sticky執行模式,對每個請求採用的是round-robin負載均衡方式,這意味著它會為每個請求都**乙個新會

話。最後

我們需要配置tomcat,讓tomcat把會話session儲存到redis資料庫。

我們要使用tomcat-redis-session-manager這樣的第三方庫,主頁見:

注意

pool2-2.2.jar和jedis-2.6.1.jar依賴庫。要記住把這些jar檔案複製到每乙個tomcat例項的lib子目錄下。

這幾個jar包拷貝到tomcat7的lib目錄下

。並在修改每乙個tomcat例項的context.xml配置檔案:

"

com.orangefunction.tomcat.redissessions.redissessionhandlervalve

" />

"com.orangefunction.tomcat.redissessions.redissessionmanager

"host="

localhost

"port="

6379

"database="0"

maxinactiveinterval="

60" />

重啟tomcat例項

可以檢查到redis確實儲存了tomcat的會話。然後我們對tomcat例項取下或恢復時,訪問使用者確實沒受影響。

用Redis儲存Tomcat集群的Session

前段時間,我花了不少時間來尋求一種方法,把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。那麼問題來了,在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下面,我們用例項來說明此方案。我們的例子使用了一台nginx做...

用Redis儲存Tomcat集群的Session

前段時間,我花了不少時間來尋求一種方法,把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。那麼問題來了,在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下面,我們用例項來說明此方案。我們的例子使用了一台nginx做...

用Redis儲存Tomcat集群的Session

前段時間,我花了不少時間來尋求一種方法,把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。那麼問題來了,在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下 面,我們用例項來說明此方案。我們的例子使用了一台nginx...