tomcat+nginx 分散式叢集 redis實現session共享
同一域名下的網站的cookie都是一樣的。所以無論幾臺伺服器,無路請求分配到哪一臺伺服器上同一使用者的cookie是
不變的。也就是說cookie對應的session也是唯一的。
lib
下即可:commons-pool2-2.2.jarjedis-2.5.2.jartomcat-redis-session-manage-tomcat7.jar2、配置tomcat配置檔案conf/context.xml<ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /><ManagerclassName="com.orangefunction.tomcat.redissessions.RedisSessionManager"port="6379" <!-- Redis埠 -->
password="123456" <!-- Redis密碼 -->
database="0" <!-- 儲存Session的Redis庫編號 -->
maxInactiveInterval="60" <!-- Session失效的間隔(秒) -->
/>這樣一來我們的tomcat即可把session的管理交由我們配置的redis來處理。需要注意的是,如果在Tomcat8下按照上述部署,會在啟動時報錯,筆者檢視過原因,是
tomcat-redis-session-manager
最後更新的年代相隔較久,程式碼中使用的Tomcat api出現了過時刪去的情況,在Tomcat8下會出現問題,如果想在Tomcat8下使用,需要自行對過時的api進行修改,替換成新的Tomcat api。(以上即可解決session共享問題,第四點是關於redis叢集,使系統更穩定的設定)四、基於sentinel的redis叢集搭建上文介紹的方法其實已經可以搭建一個完整的Tomcat叢集了,如果系統想要一個更安全可靠的環境,那麼nginx其實也可以做叢集,這裡略去不說,我們想要說的是redis叢集。
上面我們已經說到redis是session的公共儲存區,如果redis不幸掛掉的話將會導致致命的問題,因為無session源可取,Tomcat中有session讀取的介面會直接報錯。所以搭建一個redis叢集還是很有必要的,幸好redis對分散式HA的搭建支援得很好,原生即有一套sentinel哨兵機制即可用。
以sentinel模式啟動的redis例項起到了監控者的作用,redis叢集以master-slave的模式啟動,訊息不再直接發給redis例項,而是發給sentinel,由sentinel同步至所有的redis例項,如果出現redismaster例項掛掉的情況,會由sentinel發現,根據配置還可以由sentinel自己組成的叢集去選舉產生新的master,新的master將會承擔起作用,起到了災難自動回恢復的作用。
這裡來說一下sentinel叢集的配置:
我們使用兩個redis例項來組成master-slave,需要三個sentinel組成哨兵叢集來監控兩個redis例項,在master出現問題的時候選舉產生新的master。
路徑假設如下:redis1
redis2
sentinel1
sentinel2
sentinel3
配置redis1/redis.conf
為master:
bind 127.0.0.1
port 6379
配置redis2/redis.conf
為redis1的slave:
bind 127.0.0.1
port 6379
slaveof <redis1_ip> 6379
配置sentinel1/redis-sentinel.conf
:
port 26379
sentinel monitor mymaster <redis1_ip> 6379 2
指定redis1為master,slave資訊會在啟動後被sentinel監聽到並自動寫入到配置檔案中,因此不需要手動寫入,最後的quorum表示當有2個sentinel判斷master掛掉的時候即可選舉slave為新的master。
sentinel2
,sentinel3
配置相同。
這樣之後啟動redis和sentinel叢集,即可構建一個高可用的redis叢集。可以嘗試一下把redis1
這個master掛掉,sentinel就會探查到並且在2個sentinel都探查到的時候即會選舉產生新的master:
# +monitor master mymaster <redis1-ip> 6379 quorum 2
# +sdown master mymaster <redis1-ip> 6379
同時我們的Tomcat配置也將改為使用sentinel叢集的版本:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
sentinelMaster="mymaster"
sentinels="<sentinel1-ip>:26379,<sentinel2-ip>:26379,<sentinel3-ip>:26379"
maxInactiveInterval="60"/>
這個叢集搭建完成後,我們的系統將會更為穩定:
相關推薦
tomcat+nginx 分散式叢集 redis實現session共享
一、理解session、cookie首先要明確session和cookie的區別。瀏覽器端 存的是cookie每次瀏覽器發請求到服務端是http 報文頭是會自動加上你的cookie資訊的。服務端拿著使用者的cookie作為key去儲存裡找對應的value(session).同
Nginx+Tomcat搭建叢集,Spring Session+Redis實現Session共享
小夥伴們好久不見!最近略忙,部落格寫的有點少,嗯,要加把勁。OK,今天給大家帶來一個JavaWeb中常用的架構搭建,即Nginx+Tomcat搭建服務叢集,然後通過Spring Session+Redis實現Session共享。 閱讀本文需要有如下知識點:
Nginx+Tomcat+Redis實現session共享
linux nginx tomcat redis session 通過Nginx作為前端的負載,把請求分發到後端的Tomcat服務器上,提高並發數;但是單純的通過Nginx的ip_hash負載是很多問題的。只要用戶一切換網絡或者後端Tomcat主機宕機session就失效;架構圖:基本環境
springboot專案Nginx+Tomcat實現負載均衡結合Redis實現session共享問題
對於分散式使用Nginx+Tomcat實現負載均衡,當同一個使用者登入後,再次訪問可能分發到不同的服務,這樣我們就取不到之前登入session,出現未登入現象。所以我們必須解決共享session問題。 方式一:儲存在資料庫中 , 使用者登入時,把session資訊儲存在資
nginx+redis實現session共享 .NET分布式架構
serve 1.4 應用程序 mode itl provider disco rtu htaccess 上兩篇文件介紹了如何安裝和封裝redis 本篇主要是記錄下怎麽實現 nginx+redis實現session共享 目前session問題點 又愛又恨的Session
我的tomcat+redis實現session共享配置之路
2、在myeclipse 新建一個maven專案【maven-archetype-quickstart】 原始檔新建包名com.orangefunction.tomcat.redissessions 講下載下來的java類拷貝到該包之下(這些java類只
tomcat叢集redis配置session共享
針對之前的nginx+tomcat的負載均衡機制,因為會出現session丟失的問題,特研究了下redis的session共享;下載JDK7、tomcat7以備後續測試; 這裡要對tomcat-redis-session打包做一下特殊記錄: 上圖中的構建pom.xm
springBoot+redis 實現session共享理解,應用場景單點登入,分散式應用。
Springboot+redis 實現session共享也是利用了cookie在域名,路徑相同的情況下可以共享內容。第一次請求會將SESSION儲存在redis中,並將SESSIONID返回到瀏覽器的cookie中,第二次請求會攜帶上第一次請求的JSESSIONID。服務端拿
tomcat + redis 實現session共享
實現原理很簡單 1、需要幾個包放在tomcat/lib下面 tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar(tomcat7) tomcat-r
Tomcat 使用redis實現session共享
測試架構:準備工作:1.安裝nginx nginx.conf的編輯:2.同一臺機器配置兩個tomcat ,修改埠3.修改 tomcat\tomcat8080\apache-tomcat-7.0.86\webapps\ROOT\index.jsp新增:測試統一請求沒有sessi
php分布式redis實現session共享
code handler database auth 內容 cnblogs markdown pat edi 方法一:找到配置文件php.ini,修改為下面內容,保存並重啟服務 session.save_handler = redis session.save_path =
Tomcat集群使用Memcached實現Session共享
tomcatSession是什麽?用戶訪問服務器資源主要分成兩類,一類是無狀態訪問,例如請求一張圖片。另一類是有狀態訪問,這種情況下,服務器需要記錄追蹤用戶狀態,並根據用戶所處狀態做出不同響應,典型的例子是購物車。Session的作用就是在Web服務器上保持用戶的狀態信息。Tomcat集群為什麽需要Sessi
Spring Session Data Redis實現session共享
web.xml odi 數據庫 tails spool ima 配置步驟 配置文件 work 1.前言 在開發中遇到一個關於用戶體驗的問題,每次當運維進行更新重啟服務器時,都會導致會員平臺中已登錄的用戶掉線。這是因為每個用戶的會話信息及狀態都是由session來保存的,
CentOS7 PHP+Redis實現Session共享
先yum簡單的安裝redis wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install redis 簡單配置一下: vim /etc/redis.conf d
Spring-Session+Redis實現session共享
1、新增依賴 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId>
使用redis實現session共享(基於Spring Boot)
Session 共享 什麼是 Session 由於 HTTP 協議是無狀態的協議,所以服務端需要記錄使用者的狀態時,就需要用某種機制來識具體的使用者。Session 是另一種記錄客戶狀態的機制,不同的是 Cookie 儲存在客戶端瀏覽器中,而 Session 儲存在伺服器上。客戶端瀏覽器訪問
使用Spring-Session Redis實現Session共享
知其然,還要知其所以然 ! 本篇介紹Spring-Session的整個實現的原理。以及對核心的原始碼進行簡單的介紹! 實現原理介紹 實現原理這裡簡單說明描述: 就是當Web伺服器接收到http請求後,當請求進入對應的Filter進行過濾,將原本需要由web伺服器
springboot+springsession+redis實現session共享
專案結構 1、springboot整合Redis以及springSession,需要在POM檔案中增加依賴 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/P
SpringBoot+SpringSession+Redis實現session共享及單點登入
最近在學習springboot,session這個點一直困擾了我好久,今天把這些天踩的坑分享出來吧,希望能幫助更多的人。 一、pom.xml配置 <dependency> <groupId>org.springframework.boot
SprinMvc+Redis 實現session共享
一.session共享的應用場景 每個客戶端與伺服器互動時生成會話的sessionID是唯一,同個客戶端在訪問不同的域名:主域名、子域名、跨站點域名或跨伺服器域名,會有不同的sessionID,有些應用程式會在session存放使用者的狀態和資訊,同個應用程式的客戶端