用Redis儲存Tomcat集群的Session

2021-08-20 23:46:35 字數 1623 閱讀 1906

前段時間,我花了不少時間來尋求一種方法,把新開發的**推送到到生產系統中部署,生產系統要能夠零宕機、對使用使用者零影響。

那麼問題來了,在取下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這樣的第三方庫,主頁見:

在 更新了commons-pool、jedis和tomcat版本這些庫後,你可以使用build.gradle來構建整個專案。構建完畢後,複製新生成的 tomcat-redis-session-manager-1.2.jar到每乙個tomcat例項的lib子目錄下。並在修改每乙個tomcat例項 的context.xml配置檔案:

<

valve

classname

="com.orangefunction.tomcat.redissessions.redissessionhandlervalve"

/>

<

manager

classname

="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儲存Tomcat7集群的Session

redis儲存tomcat7集群的session 首先請先安裝redis,請參考文章 然後,將下面的4個jar檔案放到tomcat的lib目錄下 我上傳了乙份在下面的附件中 commons pool2 2.2.jar jedis 2.5.2.jar tomcat juli.jar tomcat re...