Linux Nginx+tomcat實現(xiàn)session共享

2018-07-31 14:44 更新

防偽碼:人生沒有對錯,成功永遠(yuǎn)屬于奮斗者

一、如何保持session會話

目前,為了使web能適應(yīng)大規(guī)模的訪問,需要實現(xiàn)應(yīng)用的集群部署。集群最有效的方案就是負(fù)載均衡,而實現(xiàn)負(fù)載均衡用戶每一個請求都有可能被分配到不固定的服務(wù)器上,這樣我們首先要解決session的統(tǒng)一來保證無論用戶的請求被轉(zhuǎn)發(fā)到哪個服務(wù)器上都能保證用戶的正常使用,即需要實現(xiàn)session的共享機制。

在集群系統(tǒng)下實現(xiàn)session統(tǒng)一的有如下幾種方案:

1、請求精確定位:sessionsticky,例如基于訪問ip的hash策略,即當(dāng)前用戶的請求都集中定位到一臺服務(wù)器中,這樣單臺服務(wù)器保存了用戶的session登錄信息,如果宕機,則等同于單點部署,會丟失,會話不復(fù)制。

2、session復(fù)制共享:sessionreplication,如tomcat自帶session共享,主要是指集群環(huán)境下,多臺應(yīng)用服務(wù)器之間同步session,使session保持一致,對外透明。 如果其中一臺服務(wù)器發(fā)生故障,根據(jù)負(fù)載均衡的原理,調(diào)度器會遍歷尋找可用節(jié)點,分發(fā)請求,由于session已同步,故能保證用戶的session信息不會丟失,會話復(fù)制,。

此方案的不足之處:

必須在同一種中間件之間完成(如:tomcat-tomcat之間).

session復(fù)制帶來的性能損失會快速增加.特別是當(dāng)session中保存了較大的對象,而且對象變化較快時, 性能下降更加顯著,會消耗系統(tǒng)性能。這種特性使得web應(yīng)用的水平擴展受到了限制。

Session內(nèi)容通過廣播同步給成員,會造成網(wǎng)絡(luò)流量瓶頸,即便是內(nèi)網(wǎng)瓶頸。

在大并發(fā)下表現(xiàn)并不好

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

基于 memcache/redis緩存的 session 共享

即使用cacheDB存取session信息,應(yīng)用服務(wù)器接受新請求將session信息保存在cache DB中,當(dāng)應(yīng)用服務(wù)器發(fā)生故障時,調(diào)度器會遍歷尋找可用節(jié)點,分發(fā)請求,當(dāng)應(yīng)用服務(wù)器發(fā)現(xiàn)session不在本機內(nèi)存時,則去cache DB中查找,如果找到則復(fù)制到本機,這樣實現(xiàn)session共享和高可用。

二、本配置基于tomcat7環(huán)境,通過tomcat集群自帶的session復(fù)制,session信息將會被自動復(fù)制到各個節(jié)點。

1、案例環(huán)境:

主機操作系統(tǒng)IP地址主要軟件
Nginxcentos7.2
192.168.10.19/24Nginx1.6
MySQLcentos7.2192.168.10.22/24MySQL5.6.4
tomcat-1centos7.2
192.168.10.20/24

jdk-7u65-linux-x64.g

z

apache-tomcat-7.0.54.tar.gz

tomcat-2centos7.2
192.168.10.24/24

實驗拓?fù)洌?/span>

2、在tomcat-1和tomcat-2節(jié)點上安裝JDK

在安裝tomcat之前必須先安裝JDK,JDK的全稱是java  development kit,是sun公司免費提供的java語言的軟件開發(fā)工具包,其中包含java虛擬機(JVM),編寫好的java源程序經(jīng)過編譯可形成java字節(jié)碼,只要安裝了JDK,就可以利用JVM解釋這些字節(jié)碼文件,從而保證了java的跨平臺性。

安裝JDK,配置java環(huán)境:

將jdk-7u65-linux-x64.gz解壓

將解壓的jdk1.7.0_65目錄移致動到/usr/local/下并重命名為java

在/etc/profile文件中添加內(nèi)容如下:

通過source命令執(zhí)行profile文件,使其生效。

分別在在tomcat-1和tomcat-2節(jié)點運行java  -version命令查看java版本是否和之前安裝的一致。

至此java環(huán)境已經(jīng)配置完成

3、在tomcat-1和tomcat-2節(jié)點安裝配置tomcat

解壓apache-tomcat-7.0.54.tar.gz包

將解壓生成的文件夾移動到/usr/local/下,并改名為tomcat7

配置tomcat環(huán)境變量

/etc/profile文件內(nèi)容如下:

通過source命令執(zhí)行profile文件,使其生效。

啟動tomcat

Tomcat默認(rèn)運行在8080端口,運行netstat命令查看8080端口監(jiān)聽的信息

打開瀏覽器分別對tomcat-1和tomcat-2訪問測試

如果想關(guān)閉tomcat則運行/usr/local/tomcat7/bin/shutdown.sh命令

好了,大家可以看到訪成功。說明我們的tomcat安裝完成,下面我們來配置一下

4、修改配置文件

# vim /usr/local/tomcat7/conf/server.xml

設(shè)置默認(rèn)主機,并增加jvmRoute

定義一個虛擬主機,并將網(wǎng)站文件路徑指向/web/webapp1,在host段增加context段

<Context docBase="/web/webapp1" path="" reloadable="true"/>

增加文檔目錄與測試文件

index.jsp內(nèi)容如下:

停止tomcat運行,檢查配置文件并啟動tomcat

Tomcat-2節(jié)點與tomcat-1節(jié)點配置基本類似,只是jvmRoute不同,另外為了區(qū)分由哪個節(jié)點提供訪問,測試頁標(biāo)題也不同。其他的配置都相同。過程略

再次測試訪問一下

可以看到session會話不同

好了,到這里我們準(zhǔn)備工作就全部完成了,下面我們來配置tomcat的負(fù)載均衡,通過session復(fù)制實現(xiàn)會話保持。

5、配置會話共享集群,分別在tomcat-1和tomcat-2完成下面的操作。

配置server.xml文件

在Server.xml中,找到被注釋<Cluster/>節(jié)點,在下面添加如下內(nèi)容:

注意:上圖紅線標(biāo)記出需加“/”

以上內(nèi)容可以參考一下辦法尋找并復(fù)制粘貼:

修改應(yīng)用的web.xml文件,加入標(biāo)簽<distributable/>,如下所示:

添加標(biāo)簽<distributable/>

直接加在</web-app>之前就可以了這個是加入tomcat的session 復(fù)制的,做tomcat集群必須需要這一步,否則用戶的session 就無法正常使用。

注意:以上內(nèi)容可以參考clustering/session replication how-to


注意:tomcat主機必須要指向正確的網(wǎng)關(guān),否則tomcat會啟動失敗

重啟tomcat服務(wù)并查看端口的監(jiān)聽狀態(tài)。

Tomcat-2節(jié)點與tomcat-1配置類似,只是address要寫成tomcat-2的ip。

查看tomcat日志:/usr/local/tomcat7/logs/catalina.yyyy-mm-dd.log

6、nginx服務(wù)器配置

用nginx實現(xiàn)tomcat的負(fù)載均衡

安裝相關(guān)軟件包:#yum –y  installpcre-develzlib-devel

解壓并安裝nginx

修改nginx.conf文件,內(nèi)容如下:

啟動nginx服務(wù)

建立防火墻規(guī)則

7、下面開始測試

在客戶端使用瀏覽器訪問nginx的地址 

刷新頁面

大家可以從圖中看到,不管你怎么刷新SessionID都不會變,說明我們的Tomcat的DeltaManager集群配置完成,實現(xiàn)了多臺主機之間會話共享。

8、tomcat連接mysql數(shù)據(jù)庫

192.168.10.22作為mysql數(shù)據(jù)庫服務(wù)器

配置mysql

插入些數(shù)據(jù)

下載mysql-connector-java-5.1.22-bin.jar并復(fù)制到$CATALINA_HOME/lib目錄下

context configuration

configure the JNDI datasource in tomcat by adding a declaration for your resource to your context

保存修改并退出

web.xml configuration

保存修改并退出,重啟tomcat服務(wù)

Test code

Now create a simple test.jsp page,內(nèi)容如下:

注意:防火墻開啟3306端口

測試訪問

看到上面的結(jié)果說明訪問成功

注:以上配置可以參考tomcat docs


謝觀看,真心的希望能幫到您!


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號