lnmp架構(九)——nginx +tomcat+memcache實現在tomcat中的session共享

一、什麼是session

Session是指會話控制,是保存在服務器上一種機制,當客戶端訪問服務器的時候,服務器會把信息以某種形式記錄在服務器上,恰恰和Cookie相反。

Session經常用於會話過程中保證一定狀態的信息,比如,用戶在登錄的時候,需要瀏覽web應用程序,並且存儲是在頁面重新被加載的時候,Session始終保持着任何時間都可以在設備上進行訪問,但是隨着用戶的增多,Session的服務器內存也要不斷加大,Session也會使用持久方法的限制。

session和cookie的作用有點類似,都是爲了存儲用戶相關的信息。不同的是,cookie是存儲在本地瀏覽器,而session存儲在服務器。存儲在服務器的數據會更加的安全,不容易被竊取。但存儲在服務器也有一定的弊端,就是會佔用服務器的資源,但現在服務器已經發展至今,一些session信息還是綽綽有餘的。

1.1 session的工作原理

http協議是無狀態的,即你連續訪問某個網頁100次和訪問1次對服務器來說是沒有區別對待的,因爲它記不住你
在這裏插入圖片描述
當客戶端向服務器發出請求的時候,服務器會保存一個session,當session第一次被啓用時,同時也是在客戶端上形成一個cookie文件,首次使用session_start()函數,並且PHP去加載已經儲存的session變量,並且通過函數去註冊變量,當腳本執行完畢後,會自動保存到session庫中,已方便下次使用。

1.2 cookie和session結合使用

web開發發展至今,cookie和session的使用已經出現了一些非常成熟的方案。在如今的市場或者企業裏,一般有兩種存儲方式:

1、存儲在服務端:通過cookie存儲一個session_id,然後具體的數據則是保存在session中。如果用戶已經登錄,則服務器會在cookie中保存一個session_id,下次再次請求的時候,會把該session_id攜帶上來,服務器根據session_id在session庫中獲取用戶的session數據。就能知道該用戶到底是誰,以及之前保存的一些狀態信息。這種專業術語叫做server side session。

2、將session數據加密,然後存儲在cookie中。這種專業術語叫做client side session。flask採用的就是這種方式,但是也可以替換成其他形式

1.3 Nginx+tomcat+memcached

使用nginx作爲前端服務器來實現tomcat負載均衡及高可用,同時基於jsp的動態特徵,我們將引入memcache來保持網頁在連接過程中的session保持,利用memcached把多個tomcat的session集中管理 圖解:
在這裏插入圖片描述客戶端請求時nginx通過負載調度算法將請求調度至某一後端服務器;tomcat 把會話通過組播的方式複製到集羣各節點;所有節點共享會話;

當memcached有兩個時可以採用交叉存儲,可以更好的避免單點故障

在這裏插入圖片描述

二、session共享具體實現

在上一篇博客中,我們已經實現了會話保持,但是仍舊出現問題,當一臺tomcat服務器宕機,另一臺服務器無法獲取數據,造成數據丟失,現在我們就來解決這個問題。

實驗環境

主機(版本:ip) 功用
虛擬機server1(rhel6.5:172.25.2.1) lnmp環境主機+tomcat1服務器
虛擬機server2(rhel6.5:172.25.2.2) tomcat2服務器
真機(rhel7.3:172.25.2.250) 測試機

1、在server2上,安裝memcahce,並開啓服務。

[root@server2 ROOT]# yum install memcached -y
[root@server2 conf]# /etc/init.d/memcached start

在這裏插入圖片描述

在這裏插入圖片描述

2、將所需的安裝包都放到server1和server2/usr/local/tomcat/lib目錄下

[root@server2 lib]# pwd
/usr/local/tomcat/lib
[root@server2 lib]# mv jar/* .
[root@server2 lib]# rm -fr jar
[root@server2 lib]#  rm -fr  memcached-session-manager-tc6-1.6.3.jar

在這裏插入圖片描述
在這裏插入圖片描述
3、編輯配置文件context.xml

  • xml常用於數據存儲和傳輸,文件後綴爲 .xml

它是可擴展標記語言(Extensible Markup Language,簡稱XML),是一種標記語言 。

標記,指計算機所能理解的信息符號;
通過此種標記,計算機之間可以處理包含各種信息的文章等
1 、標記,指計算機所能理解的信息符號;
2、 通過此種標記,計算機之間可以處理包含各種信息的文章等。
XML設計用來傳送及攜帶數據信息,不用來表現或展示數據,所以XML用途的焦點是它說明數據是什麼,以及攜帶數據信息。而HTML語言則用來表現數據

[root@server1 lib]# cd /usr/local/tomcat/conf
[root@server1 conf]# vim  context.xml
 34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
 35 memcachedNodes="n1:172.25.2.1:11211,n2:172.25.2.2:11211"  
 36 failoverNodes="n1" (在172.25.2.2"改爲"n2"
 37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
 38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  />

在這裏插入圖片描述

在這裏插入圖片描述
server2上,

在這裏插入圖片描述
4、啓動server1和server2的tomcat和memcache

  • 注意:如果tomcat之前是開啓的,要先關閉,在開啓。
[root@server1 conf]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]# ./startup.sh
[root@server1 bin]# /etc/init.d/memcached status
[root@server1 conf]# /etc/init.d/memcached start

5、測試:訪問測試頁http://172.25.2.1/test.jsp

在這裏插入圖片描述

我們此時宕掉server2,再次訪問測試頁面,還可以看到數據

在這裏插入圖片描述在這裏插入圖片描述
也可以監控日誌,查看到數據:

cd  /usr/local/tomcat/logs/
tail -f  catalina.out

在這裏插入圖片描述

發佈了127 篇原創文章 · 獲贊 26 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章