前段時間,我花了不少時間來尋求一種方法,把新開發的**推送到到生產系統中部署,生產系統要能夠零宕機、對使用使用者零影響。
那麼問題來了,在取下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,並新增下面的內容:
include /etc/nginx/mime.types;修改配置檔案/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配置檔案:
classname="com.orangefunction.tomcat.redissessions.redissessionhandlervalve" />
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...