天天看點

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

一:redis介紹

redis資料庫:是一個非關系型資料庫。是一個開源的使用C語言編寫支援網絡,可基于記憶體可持久化得日志型的資料庫。為了保證效率,資料都是緩存在記憶體中。

redis伺服器程式是單程序模型,可以在一台伺服器上同時啟動多個redis程序,實際處理速度完全依靠主程序的執行效率。

那麼我們先了解一下關系型資料庫與非關系型資料庫。

(1)關系型資料庫:是一個結構化的資料庫,建立在關系模型基礎上,一般面向記錄。它借助于集合代數等數學概念來處理資料庫中的資料。SQL語句就是一種基于關系型資料庫的語言,用來執行對關系型資料庫中資料的檢索和操作。

主流的關系型資料庫包括:oracle MySQL SQLserver DB2等。

(2)非關系型資料庫:除主流的關系型資料庫以外都是非關系型資料庫。

主流的Nosql(非關系型資料庫)有:redis Monbd hbase等。

非關系型資料庫優勢:非關系型,分布式,開源和橫向擴充。

2>>>>>>:關系型資料庫現有的問題:

1:對資料庫高并發讀寫需求

2:對海量資料高效存儲與通路需求

3:對資料庫高擴充性與高可用性需求

關系型資料庫關注在關系上,非關系型資料庫關注在存儲上。

3>>>>>>:redis優點:

(1):具有極高的資料讀寫速度;資料讀取速度最高可達每秒11萬次。

(2):支援資料類型豐富;

(3):支援資料持久化,可将記憶體中的資料儲存在磁盤中,重新開機的時候可以再次加載進行使用。

(4):支援資料備份。

二、如何保持session會話:

在叢集系統下實作session統一的有如下幾種方案:

1、請求精确定位:sessionsticky,例如基于通路ip的hash政策,即目前使用者的請求都集中定位 到一台伺服器中,這樣單台伺服器儲存了使用者的session登入資訊,如果當機,則等同于單點部 署,會丢失,會話不複制。

2、session複制共享:sessionreplication,如tomcat自帶session共享,主要是指叢集環境下, 多台應用伺服器之間同步session,使session保持一緻,對外透明。 如果其中一台伺服器發生 故障,根據負載均衡的原理,排程器會周遊尋找可用節點,分發請求,由于session已同步,故 能保證使用者的session資訊不會丢失,會話複制,。 此方案的不足之處: 必須在同一種中間件之間完成(如:tomcat-tomcat之間). session複制帶來的性能損失會快速增加.特别是當session中儲存了較大的對象,而且對象變化 較快時, 性能下降更加顯著,會消耗系統性能。這種特性使得web應用的水準擴充受到了限制。 Session内容通過廣播同步給成員,會造成網絡流量瓶頸,即便是内網瓶頸。在大并發下表現并 不好

3、基于cache DB緩存的session共享

 基于memcache/redis緩存的 session 共享 即使用cacheDB存取session資訊,應用伺服器接受新請求将session資訊儲存在cache DB中,當 應用伺服器發生故障時,排程器會周遊尋找可用節點,分發請求,當應用伺服器發現session不 在本機記憶體時,則去cache DB中查找,如果找到則複制到本機,這樣實作session共享和高可用。

三、nginx+tomcat+redis實作負載均衡、session共享

1、實驗環境

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

2、實驗拓撲:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

在這個圖中,nginx做為反向代理,實作靜動分離,将客戶動态請求根據權重随機配置設定給兩台tomcat 伺服器,redis做為兩台tomcat的共享session資料伺服器,mysql做為兩台tomcat的後端資料庫。

3、nginx安裝配置

使用Nginx作為Tomcat的負載平衡器,Tomcat的會話Session資料存儲在Redis,能夠實作零當機的 7x24效果。因為将會話存儲在Redis中,是以Nginx就不必配置成stick粘貼某個Tomcat方式,這樣 才能真正實作背景多個Tomcat負載平衡。

安裝nginx:(之前我們有寫過怎樣安裝nginx及各種優化可看之前的博文)

(1):先使用yum安裝缺少的依賴:

[[email protected] ~]# yum -y install pcre-devel

[[email protected] ~]# yum -y install pcre-devel

(2):下載下傳nginx源碼包并編譯安裝:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

[[email protected] ~]# tar zxf nginx-1.10.2.tar.gz

[[email protected] ~]#cd nginx-1.10.2/

[[email protected] nginx-1.10.2]# ./configure

[[email protected] nginx-1.10.2]# make && make install

優化nginx程式的執行路徑并啟動:

[[email protected] nginx-1.10.2]  ln -s /usr/local/nginx1.10/sbin/nginx /usr/local/sbin/

[[email protected] nginx-1.10.2] nginx

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享
Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

配置nginx反向代理:反向代理+負載均衡+健康探測:

[[email protected] nginx-1.10.2] vim  /usr/local/nginx1.10/conf/nginx.conf

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享
Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

重新開機nginx服務,使修改生效:

[[email protected] nginx-1.10.2] nginx   -s   reload

4、安裝部署tomcat應用程式伺服器(下載下傳安裝tomcat源碼包并編譯安裝)

Tomcat 1 和tomcat 2 配置都要相同:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

[[email protected] ~]#tar zxf apache-tomcat-8.5.35.tar.gz

将解壓生成的檔案夾移動到/usr/local/下,并改名為tomcat

 [[email protected] ~]#  mv apache-tomcat-8.5.35 /usr/local/tomcat

 [[email protected] ~]#  cd /usr/local/tomcat/

[[email protected] tomcat ~]# /usr/local/tomcat/bin/startup.sh

 [[email protected] tomcat ~]#  netstat -anput | grep 8080

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

防火牆規則配置:

[[email protected] ~]# firewall-cmd --permanent --add-port=8080/tcp

success

[[email protected] ~]# firewall-cmd --reload

success

按照相同方法在tomcat-2也安裝。

打開浏覽器分别對tomcat-1和tomcat-2通路測試

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

如果想關閉tomcat則運作/usr/local/tomcat7/bin/shutdown.sh指令 好了,大家可以看到訪成功。說明我們的tomcat安裝完成,下面我們來修改配置檔案

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml

修改預設虛拟主機,并将網站檔案路徑指向/web/webapp1,在host段增加context段

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

增加文檔目錄與測試檔案:

[[email protected] ~]# mkdir -p /web/webapp1

 [[email protected] ~]# cd /web/webapp1/

[root@ tomcat webapp1]# vi index.jsp

index.jsp内容如下:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

停止tomcat運作,檢查配置檔案并啟動tomcat

Tomcat-2節點與tomcat-1節點配置基本類似,隻是jvmRoute不同,另外為了區分由哪個節點 提供通路,測試頁标題也不同(生産環境兩個tomcat伺服器提供的網頁内容是相同的)。其 他的配置都相同。

用浏覽器通路nginx主機,驗證負載均衡 第一次通路的結果

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

第二次通路的結果:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

從上面的結果能看出兩次通路,nginx把通路請求分别分發給了後端的tomcat-1和tomcat-2, 用戶端的通路請求實作了負載均衡,但sessionid并不一樣。是以,到這裡我們準備工作就全 部完成了,下面我們來配置tomcat通過redis實作會話保持。

5、安裝redis

下載下傳redis源碼,并進行相關操作,如下: wget http://download.redis.io/releases/redis-3.2.3.tar.gz

解壓安裝redis

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

[[email protected] ~]#tar zxf redis-4.0.14.tar.gz

[[email protected] ~]#cd redis-4.0.14/

[[email protected] redis-4.0.14 ~]# make&& make install

[email protected] redis-4.0.14 ~]#cd utils/

[email protected] utlis~]# ./install_server.sh

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

通過上圖,我們可以很容易的看出,redis安裝到 /usr/local,/usr/local/bin,/usr/local/share,/usr/local/include,/usr/local/lib,/usr/l ocal/share/man目錄下。

然後再切換到utils目錄下,執行redis初始化腳本install_server.sh,如下:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

修改redis配置檔案:

[[email protected] utils]# vim /etc/redis/6379.conf

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享
Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

重新啟動redis服務:

[[email protected] ~]# systemctl restart redis_6379.service

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

redis配置檔案配置完畢後,我們來啟動redis并進行簡單的操作。如下:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

關于redis-cli -h 192.168.1.50 -p 6379 -a 123.com的參數解釋 這條指令是說要連接配接redis伺服器,IP是192.168. 1.50,端口是6379,密碼是123.com。 keys *是檢視redis所有的鍵值對。

6、配置tomcat session redis同步(回到tomcat兩台操作相同)

回到tomcat的lib目錄下添加:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

修改tomcat的context.xml:

[[email protected] lib]# vim /usr/local/tomcat/conf/context.xml

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

重新開機tomcat服務:

說明:

maxInactiveInterval="60":session的失效時間

tomcat-2執行和tomcat-1相同的操作

通過浏覽器通路http://192.168.1.10/index.jsp測試頁

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

重新整理頁面

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

可以看出,分别通路了不同的tomcat,但是得到的session卻是相同的,說明達到了叢集的目的。

檢視redis是否有儲存session會話:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

7、tomcat連接配接資料庫:

192.168.1.40作為mysql資料庫伺服器

[[email protected] ~]# mysql –u root -p123

mysql> grant all on *.* to javauser@'192.168.1.%' identified by '123.com';

Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> create database javatest;

 Query OK, 1 row affected (0.01 sec)

mysql> use javatest;

Database changed

mysql> create table testdata(id int not null auto_increment primary key,foo varchar(25),bar int);

 Query OK, 0 rows affected (0.02 sec)

插入些資料:

mysql> insert into testdata(foo,bar) values

('lvranbo','123456'),('lrb','654321');

Query OK, 2 rows affected (0.04 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from testdata;

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

mysql防火牆配置

# firewall-cmd –-permanent –add-port=3306/tcp

# firewall-cmd –reload

配置tomcat伺服器連接配接mysql資料庫(回到tomcat)

[[email protected] lib]# vim /usr/local/tomcat/conf/context.xml

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

儲存修改并退出:

[[email protected] ~]# mkdir /web/webapp1/WEB-INF

[[email protected] ~]# vi /web/webapp1/WEB-INF/web.xml

添加内容如下:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

儲存修改并退出,重新開機tomcat服務(tomcat2相同配置)

[[email protected] ~]# vim /web/webapp1/test.jsp

添加内容如下:

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

通過浏覽器通路http://192.168.1.10/test.jsp測試頁

Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享
Linux學習筆記--- redis緩存伺服器(linux+nginx+mysql+redis+tomcat)實作session會話共享

總結:這篇博文告訴我們session會話如何保持一緻性。

繼續閱讀