cent 8.0 安装tomcat 9.0_nginx+tomcat会话保持方案探讨
tomcat做為輕量級(jí)的java應(yīng)用服務(wù)器,對(duì)靜態(tài)頁面和大并發(fā)的處理并不是很好。所以現(xiàn)在流行的做法是使用nginx+tomcat來實(shí)現(xiàn)動(dòng)靜分離與負(fù)載均衡, 做負(fù)載均衡集群就要考慮會(huì)話保持。
一、Session概述
1、什么是會(huì)話(session)?
答: Session是在無狀態(tài)的HTTP協(xié)議下,服務(wù)端記錄用戶狀態(tài)時(shí)用于標(biāo)識(shí)具體用戶的機(jī)制。
http協(xié)議是無狀態(tài)的,無狀態(tài)就表明每一次客戶端的訪問請(qǐng)求是無關(guān)聯(lián)的。比如張三在一個(gè)網(wǎng)站上有多次訪問請(qǐng)求,李四也在這個(gè)網(wǎng)站上有多次訪問請(qǐng)求,他們的請(qǐng)求順序與時(shí)間是無規(guī)則的。那么網(wǎng)站服務(wù)器是不知道到底哪些是張三的請(qǐng)求,哪些是李四的請(qǐng)求。如果在他們請(qǐng)求時(shí)服務(wù)器都有一個(gè)固定的標(biāo)簽跟蹤,就能分辨了。這個(gè)標(biāo)簽就可以看做是session.
2、為什么要會(huì)話保持?
答: 因?yàn)樨?fù)載均衡集群會(huì)將同一個(gè)用戶的請(qǐng)求通過算法調(diào)度給多臺(tái)服務(wù)器,變成了一對(duì)多的局面。就好像我要給父母打電話,父母原來使用同一個(gè)電話變成了父母各使用一個(gè)電話,我說的話,被一半一半的調(diào)度給父母各自持有的電話上。那么最終的結(jié)果就是父母各聽了一半,根本不知道我要說什么。
所以負(fù)載均衡和會(huì)話保持是矛盾的,但又必須得共存。
二、會(huì)話保持的幾個(gè)方案:
1、nginx的ip_hash算法
實(shí)現(xiàn)原理就是同一個(gè)客戶端的所有請(qǐng)求只調(diào)度給同一個(gè)后臺(tái)tomcat,這樣會(huì)話就能保持在同一臺(tái)服務(wù)器上。
注:其它的負(fù)載均衡軟件也有類似算法:如LVS的sh算法,haproxy的source算法等。
優(yōu)點(diǎn):配置最簡(jiǎn)單,在nginx的upstream調(diào)度里加一句ip_hash即可
缺點(diǎn):后端tomcat宕機(jī),用戶session會(huì)丟失
2、tomcat的session復(fù)制集群
多臺(tái)tomcat通過組播互相溝通會(huì)話信息,以保持不同tomcat之間的會(huì)話一致性。
優(yōu)點(diǎn):后端tomcat宕機(jī),用戶session不丟失
缺點(diǎn):使用組播將信息復(fù)制到多個(gè)tomcat節(jié)點(diǎn),網(wǎng)絡(luò)開銷大
3、緩存集中式管理session
session可以保存在文件,數(shù)據(jù)庫和內(nèi)存中,利用memcached或redis將session信息緩存,以達(dá)到會(huì)話信息不丟失,也不影響負(fù)載均衡的目的。
優(yōu)點(diǎn):只要緩存服務(wù)器沒問題,用戶session不會(huì)丟.也沒有額外的網(wǎng)絡(luò)開銷
缺點(diǎn):太依賴緩存服務(wù)器;需要額外的緩存服務(wù)器,成本也高;當(dāng)然要求維護(hù)人員技術(shù)水平也較高,適合于性能要求高的大型環(huán)境。
三、使用MSM實(shí)現(xiàn)nginx+tomcat集群的會(huì)話保持
1、MSM是什么?
MSM(memcached-session-manager)就是緩存集中式管理session的一種方案 ,它可以把tomcat的會(huì)話信息保存在緩存服務(wù)器memcached中,實(shí)現(xiàn)在負(fù)載均衡調(diào)度時(shí)還能保持會(huì)話一致。
2、實(shí)驗(yàn)準(zhǔn)備:
① 靜態(tài)ip
10.1.1.11 http://nginx.cluster.com
10.1.1.12 http://tomcat1.cluster.com
10.1.1.13 http://tomcat2.cluster.com
10.1.1.14 http://memcached.cluster.com
② 主機(jī)名綁定
③ 關(guān)閉防火墻和Selinux
④ 時(shí)間同步
⑤ yum源(centos7安裝完系統(tǒng)后的默認(rèn)yum源就OK)
3、實(shí)驗(yàn)過程
第1步: 在所有tomcat節(jié)點(diǎn)上安裝
首先在官網(wǎng)下載二進(jìn)制版tomcat
下載地址: https://tomcat.apache.org/download-90.cgi
在centos7上確認(rèn)openjdk已經(jīng)安裝
# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
直接解壓下載好的二進(jìn)制版tomcat安裝并啟動(dòng)
# tar xf /root/Desktop/apache-tomcat-9.0.14.tar.gz -C /usr/local/
# mv /usr/local/apache-tomcat-9.0.14/ /usr/local/tomcat
# /usr/local/tomcat/bin/startup.sh
第2步:在所有tomcat節(jié)點(diǎn)(tomcat1和tomcat2)的家目錄里創(chuàng)建一個(gè)顯示session信息的代碼文件
注:文件內(nèi)容是一模一樣的
[root@tomcat1 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp
SessionID:
SessionIP:
SessionPort:
[root@tomcat2 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp
SessionID:
SessionIP:
SessionPort:
第3步: 安裝并配置nginx配置文件,實(shí)現(xiàn)nginx+tomcat的動(dòng)靜分離與負(fù)載均衡。
[root@nginx ~]# yum install epel-release -y
[root@nginx ~]# yum install nginx -y
[root@nginx ~]# vim /etc/nginx/nginx.conf
將下面一段加到http {}配置段里但是不要在server {}配置段里
upstream tomcat {
server 10.1.1.12:8080 weight=1;
server 10.1.1.13:8080 weight=1;
}
把server {}配置段里下面一段修改
location / {
}
修改成
location ~ .*.jsp$ {
proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
最終結(jié)果如下圖所示:
第4步:啟動(dòng)nginx服務(wù)
[root@vm1 ~]# systemctl restart nginx
[root@vm1 ~]# systemctl enable nginx
第5步: 下載MSM相關(guān)的jar包,并拷貝到所有tomcat節(jié)點(diǎn)的/usr/local/tomcat/lib/目錄下
第6步: 確認(rèn)jar包都拷貝完成后,配置所有tomcat節(jié)點(diǎn)(tomcat1和tomcat2都一樣配置)
把下面一段加到context.xml配置文件最后一行前面; 也就是標(biāo)簽中間;10.1.1.14為memcached服務(wù)器IP
# vim /usr/local/tomcat/conf/context.xml
memcachedNodes="n1:10.1.1.14:11211"
lockingMode="auto"
sticky="false"
requestUriIgnorePattern= ".*.(png|gif|jpg|css|js)$"
sessionBackupAsync= "false"
sessionBackupTimeout= "100"
copyCollectionsForSerialization="true"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
第7步: 所有tomcat節(jié)點(diǎn)重啟tomcat服務(wù)
# /usr/local/tomcat/bin/shutdown.sh
# /usr/local/tomcat/bin/startup.sh
第8步: 在memcached服務(wù)器上安裝,并啟動(dòng)服務(wù)
[root@vm4 ~]# yum install memcached -y
[root@vm4 ~]# systemctl restart memcached
[root@vm4 ~]# systemctl enable memcached
[root@vm4 ~]# lsof -i:11211
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 4224 memcached 26u IPv4 44869 0t0 TCP *:memcache (LISTEN)
memcached 4224 memcached 27u IPv6 44870 0t0 TCP *:memcache (LISTEN)
memcached 4224 memcached 28u IPv4 44873 0t0 UDP *:memcache
memcached 4224 memcached 29u IPv6 44874 0t0 UDP *:memcache
第9步: 使用瀏覽器訪問測(cè)試
至此,會(huì)話保持就成功了。
總結(jié)
以上是生活随笔為你收集整理的cent 8.0 安装tomcat 9.0_nginx+tomcat会话保持方案探讨的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .mb是什么文件_神经网络长什么样不知道
- 下一篇: hbase查询语句_Sqoop实操|Sq