您好,登錄后才能下訂單哦!
小編給大家分享一下怎么用Redis存儲Tomcat集群的Session,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前段時(shí)間,我花了不少時(shí)間來尋求一種方法,把新開發(fā)的代碼推送到到生產(chǎn)系統(tǒng)中部署,生產(chǎn)系統(tǒng)要能夠零宕機(jī)、對使用用戶零影響。 我的設(shè)想是使用集群來搞定,通過通知負(fù)載均衡Nginx,取下集群中的Tomcat節(jié)點(diǎn),然后對Tomcat上的應(yīng)用進(jìn)行升級,再通知負(fù)載均衡Nginx,把Tomcat節(jié)點(diǎn)重新加載上去。依次這么做,把集群中的所有Tomcat都替換一次即可。 那么問題來了,在取下Tomcat節(jié)點(diǎn)和加載新Tomcat節(jié)點(diǎn)時(shí)如何做到對用戶無影響呢?方法很簡單,共享Session。 下面,我們用實(shí)例來說明此方案。我們的例子使用了一臺Nginx做負(fù)載均衡,后端掛接了兩臺Tomcat,且每臺Tomcat的Session會話都保存到Redis數(shù)據(jù)庫中。其中,Nginx配置為non-sticky運(yùn)行模式,也即每一個(gè)請求都可以被分配到集群中的任何節(jié)點(diǎn)。當(dāng)要上線新代碼時(shí),只需簡單地取下Tomcat實(shí)例,此時(shí)所有的訪問用戶會被路由到活動的Tomcat實(shí)例中去,而且由于會話數(shù)據(jù)都是保存在Redis數(shù)據(jù)庫中,所以活躍用戶并不會受影響。當(dāng)Tomcat更新完畢,又可以把此節(jié)點(diǎn)加入到Nginx中。 安裝Nginx
# sudo rpm -ivh nginx-1.4.2-1.el6.ngx.x86_64.rpm
修改配置文件/etc/nginx/nginx.conf,并添加下面的內(nèi)容:
http { upstream tomcat { server localhost:8080; server localhost:8081; } include /etc/nginx/mime.types; default_type application/octet-stream;
修改配置文件/etc/nginx/conf.d/default.conf并替換location部分的內(nèi)容:
location / { proxy_pass http://tomcat; }
重啟Nginx
# sudo service nginx restart
接下來,安裝兩個(gè)Tomcat實(shí)例。由于我們是在同一臺服務(wù)器上做的演示,要讓兩臺Tomcat不發(fā)生沖突,需要修改第二個(gè)Tomcat實(shí)例的端口號。由于Nginx配置為non-sticky運(yùn)行模式,對每個(gè)請求采用的是Round-robin負(fù)載均衡方式,這意味著它會為每個(gè)請求都抽獎(jiǎng)一個(gè)新會話。
接著,下載并安裝Redis。步驟省略,很簡單。
最后,我們需要配置Tomcat,讓Tomcat把會話Session保存到Redis數(shù)據(jù)庫。
我們要使用tomcat-redis-session-manager這樣的第三方庫,主頁見:
https://github.com/jcoleman/tomcat-redis-session-manager 要注意此庫并非開箱即用的,使用時(shí)需要做一些調(diào)整。你需要下載源碼,并在更新了依賴庫的版本后,重建項(xiàng)目。比如我使用了commons-pool2-2.2.jar和jedis-2.6.1.jar依賴庫。要記住把這些jar文件復(fù)制到每一個(gè)Tomcat實(shí)例的lib子目錄下。 在更新了commons-pool、jedis和tomcat版本這些庫后,你可以使用build.gradle來構(gòu)建整個(gè)項(xiàng)目。構(gòu)建完畢后,復(fù)制新生成的tomcat-redis-session-manager-1.2.jar到每一個(gè)Tomcat實(shí)例的lib子目錄下。并在修改每一個(gè)Tomcat實(shí)例的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實(shí)例。可以檢查到Redis確實(shí)保存了Tomcat的會話。然后我們對Tomcat實(shí)例取下或恢復(fù)時(shí),訪問用戶確實(shí)沒受影響。
以上是“怎么用Redis存儲Tomcat集群的Session”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。