前段時間,我花了不少時間來尋求一種方法,把新開發的**推送到到生產系統中部署,生產系統要能夠零宕機、對使用使用者零影響。
那麼問題來了,在取下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配置檔案:
<重啟tomcat例項。可以檢查到redis確實儲存了tomcat的會話。然後我們對tomcat例項取下或恢復時,訪問使用者確實沒受影響。valve
classname
="com.orangefunction.tomcat.redissessions.redissessionhandlervalve"
/>
<
manager
classname
="com.orangefunction.tomcat.redissessions.redissessionmanager"
host
="localhost"
port
="6379"
database
="0"
maxinactiveinterval
="60"
/>
**:
用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...