一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - 服務(wù)器知識(shí) - 3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

2019-08-15 07:30拜托了王教授老王 服務(wù)器知識(shí)

會(huì)話是指一個(gè)終端用戶與交互系統(tǒng)進(jìn)行通訊的過(guò)程,比如從輸入賬戶密碼進(jìn)入操作系統(tǒng)到退出操作系統(tǒng)就是一個(gè)會(huì)話過(guò)程。會(huì)話較多用于網(wǎng)絡(luò)上,TCP的三次握手就創(chuàng)建了一個(gè)會(huì)話,TCP關(guān)閉連接就是關(guān)閉會(huì)話。

什么是會(huì)話保持

會(huì)話是指一個(gè)終端用戶與交互系統(tǒng)進(jìn)行通訊的過(guò)程,比如從輸入賬戶密碼進(jìn)入操作系統(tǒng)到退出操作系統(tǒng)就是一個(gè)會(huì)話過(guò)程。會(huì)話較多用于網(wǎng)絡(luò)上,TCP的三次握手就創(chuàng)建了一個(gè)會(huì)話,TCP關(guān)閉連接就是關(guān)閉會(huì)話。

Http協(xié)議是一種無(wú)狀態(tài)協(xié)議,所以需要使用Session機(jī)制來(lái)保存用戶的狀態(tài),比如登錄狀態(tài)、常用信息等。

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

Session用于保存一次會(huì)話的相關(guān)信息,可以實(shí)現(xiàn)在多個(gè)頁(yè)面之間共享這些數(shù)據(jù)。

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

例如:你打開(kāi)淘寶登錄了個(gè)人賬號(hào),即使你瀏覽了再多的店鋪寶貝,切換了很多的頁(yè)面,用戶名是不變的,這個(gè)就是Session起的作用。直到你關(guān)閉瀏覽器,Session被銷毀,才會(huì)清除掉之前的登錄記錄。

今天和大家分享“Nginx+tomcat實(shí)現(xiàn)負(fù)載均衡的會(huì)話保持”就是實(shí)現(xiàn):如果網(wǎng)站某個(gè)負(fù)載節(jié)點(diǎn)掛掉,請(qǐng)求被分配到新節(jié)點(diǎn)Session也會(huì)同步過(guò)來(lái),實(shí)現(xiàn)會(huì)話保持,由此保證用戶無(wú)感知的瀏覽。

實(shí)現(xiàn)原理

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

使用Manager對(duì)象實(shí)現(xiàn)HTTP會(huì)話管理

DeltaManager作為會(huì)話管理器

用戶訪問(wèn)nginx,nginx負(fù)載均衡到tomcat,用于Tomcat集群的會(huì)話管理器,將所有session會(huì)話的改變同步給集群中的每一個(gè)節(jié)點(diǎn),實(shí)現(xiàn)會(huì)話復(fù)制。

實(shí)驗(yàn)配置

Nginx配置

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

測(cè)試環(huán)境單臺(tái)服務(wù)器開(kāi)了兩個(gè)tomcat,一臺(tái)對(duì)應(yīng)8080端口,另一臺(tái)對(duì)應(yīng)8090端口。

創(chuàng)建TomcatA TomcatB,分別配置tomcat server.xml

復(fù)制以下內(nèi)容到 Engine下

添加此模塊:

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.  channelSendOptions="8">  
  3.  <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  4.  expireSessionsOnShutdown="false"  
  5.  notifyListenersOnReplication="true"/>  
  6.  <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  7.  <Membership className="org.apache.catalina.tribes.membership.McastService"  
  8.  address="228.0.0.4"  
  9.  port="45564"  
  10.  frequency="500"  
  11.  dropTime="3000"/>  
  12.  <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  13.  address="192.168.224.145"  
  14.  port="4001"  
  15.  autoBind="100"  
  16.  selectorTimeout="5000"  
  17.  maxThreads="6"/>  
  18.  <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  19.  <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  20.  </Sender>  
  21.  <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  22.  <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  23.  </Channel>  
  24.  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  25.  filter=""/>  
  26.  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  27.  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  28.  tempDir="/tmp/war-temp/"  
  29.  deployDir="/tmp/war-deploy/"  
  30.  watchDir="/tmp/war-listen/"  
  31.  watchEnabled="false"/>  
  32.  <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  33.  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  34.  </Cluster>  

備注:

1.classname配置tomcat集群在進(jìn)行信息傳遞時(shí)互相使用什么類來(lái)進(jìn)行傳遞

channelsendoptions可以設(shè)置為2,4,8.10

2-確認(rèn)發(fā)送 4-同步發(fā)送 8-異步發(fā)送

10-在異步模式下,可以通過(guò)加上確認(rèn)發(fā)送(Acknowledge)來(lái)提高可靠性

2.manager決定如何管理集群的session信息

className-指定實(shí)現(xiàn)org.apache.catalina.ha.ClusterManager接口的類,用于信息之間的管理.

expireSessionsOnShutdown-設(shè)置為true時(shí),一個(gè)節(jié)點(diǎn)關(guān)閉,將導(dǎo)致集群下的所有Session失效

notifyListenersOnReplication-集群下節(jié)點(diǎn)間的Session復(fù)制、刪除操作,是否通知session listeners

3.Channel是Tomcat節(jié)點(diǎn)之間進(jìn)行通訊的工具。

Channel包括5個(gè)組件:Membership、Receiver、Sender、Transport、Interceptor

4.Membership維護(hù)集群的可用節(jié)點(diǎn)列表。用于檢測(cè)新增節(jié)點(diǎn)及掉線節(jié)點(diǎn)

address-組播地址(任意定義組播地址),如果需要阿里云ECS部署tomcat,因?yàn)镋CS不支持組播,建議改用memcache或redis存儲(chǔ)session實(shí)現(xiàn)會(huì)話保持

port-組播端口 (兩個(gè)tomcat組播端口要一致)

frequency-發(fā)送心跳(向組播地址發(fā)送UDP數(shù)據(jù)包)的時(shí)間間隔(單位:ms)。默認(rèn)值為500

dropTime-Membership在dropTime(單位:ms)內(nèi)未收到某一節(jié)點(diǎn)的心跳,則將該節(jié)點(diǎn)從可用節(jié)點(diǎn)列表刪除。默認(rèn)值為3000

5.Receiver : 接收器

address-接收消息的地址(默認(rèn)auto,但是在虛擬機(jī)上開(kāi)啟tomcat會(huì)報(bào)錯(cuò),建議配置本機(jī)IP地址)

port-接收消息的端口(如果在一臺(tái)服務(wù)器配置多個(gè)tomcat,需區(qū)分開(kāi)端口)

autoBind-端口的變化區(qū)間

如果port為4000,autoBind為100,接收器將在4000-4099間取一個(gè)端口,進(jìn)行監(jiān)聽(tīng)

selectorTimeout-NioReceiver 輪詢超時(shí)時(shí)間

maxThreads-線程池的***線程數(shù)

6.sender:發(fā)送器負(fù)責(zé)發(fā)送消息

  1. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  2.  <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  3.  </Channel>  

7.Valve :過(guò)濾器

8.Deployer:同步集群下的所有節(jié)點(diǎn)的一致性

9.ClusterListener : 監(jiān)聽(tīng)器,監(jiān)聽(tīng)Cluster組件接收的消息,使用DeltaManager時(shí),Cluster接收的信息通過(guò)ClusterSessionListener傳遞給DeltaManager

配置web.xml

在web.xml中添加屬性,用于告訴web容器,該項(xiàng)目屬于分布式項(xiàng)目

添加標(biāo)簽到web項(xiàng)目WEB-INF目錄

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

會(huì)話保持驗(yàn)證

webapps/ROOT/index.jsp 創(chuàng)建測(cè)試頁(yè)面獲取sessionID

  1. tomcatA  
  2.  <%@ page language="java" %>  
  3.  <html>  
  4.  <head><title>TomcatA</title></head>  
  5.  <body>  
  6.  <h1><font color="red">TomcatA</font></h1>  
  7.  <table align="centre" border="1">  
  8.  <tr>  
  9.  <td>Session ID</td>  
  10.  <% session.setAttribute("TomcatA","TomcatA"); %>  
  11.  <td><%= session.getId() %></td>  
  12.  </tr>  
  13.  <tr>  
  14.  <td>Created on</td>  
  15.  <td><%= session.getCreationTime() %></td>  
  16.  </tr>  
  17.  </table>  
  18.  </body>  
  19. </html>  
  20. tomcatB  
  21. <%@ page language="java" %>  
  22. <html>  
  23.  <head><title>TomcatB</title></head>  
  24.  <body>  
  25.  <h1><font color="red">TomcatB</font></h1>  
  26.  <table align="centre" border="1">  
  27.  <tr>  
  28.  <td>Session ID</td>  
  29.  <% session.setAttribute("TomcatB","TomcatB"); %>  
  30.  <td><%= session.getId() %></td>  
  31.  </tr>  
  32.  <tr>  
  33.  <td>Created on</td>  
  34.  <td><%= session.getCreationTime() %></td>  
  35.  </tr>  
  36.  </table>  
  37.  </body>  
  38. </html>  

瀏覽器訪問(wèn)驗(yàn)證

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

3步完成Nginx+tomcat負(fù)載均衡的會(huì)話保持

總結(jié):

tomcat實(shí)現(xiàn)會(huì)話保持有多種實(shí)現(xiàn)方式,這里只介紹了Manager對(duì)象實(shí)現(xiàn),優(yōu)點(diǎn)是利用tomcat自身集群session復(fù)制實(shí)現(xiàn)會(huì)話保持配置方便,缺點(diǎn)是像阿里云ECS這種不支持組播就無(wú)法用這種方式實(shí)現(xiàn)了。也可以使用memcache或redis存儲(chǔ)session會(huì)話,但這個(gè)要下載tomcat版本相對(duì)應(yīng)的memcache jar包。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品免费tv久久久久久久 | 骚虎网站在线观看 | 大杳蕉在线影院在线播放 | 亚洲一区二区三区91 | 国内精品99| 乌克兰粉嫩摘花第一次 | 久久99国产亚洲高清观着 | www久久com| 国产免费久久精品44 | 1313午夜精品久久午夜片 | 亚洲国产在线综合018 | 网址在线观看你懂我意思吧免费的 | 国产成人精品视频午夜 | 国产精品午夜性视频网站 | 国产日韩欧美在线播放 | 日本亚洲欧洲高清有码在线播放 | 九九九九九九 | 亚洲一欧洲中文字幕在线 | 国产美女极品免费视频 | 国产欧美日韩精品高清二区综合区 | 全是女性放屁角色的手游 | 手机看片福利盒子久久 | www.日日日 | 美女露鸡鸡 | 操闺蜜| 精品麻豆| 日韩在线免费 | 欧产日产国产精品专区 | 日本一卡2卡3卡4卡乱 | 国内久久婷婷综合欲色啪 | 亚洲精品综合一二三区在线 | 甜宠巨肉h文1v1校园 | 国产精品福利久久2020 | 国产美女极品免费视频 | 欧美丝袜videohd | 五月香婷婷 | 秋霞理论一级在线观看手机版 | 97午夜| 亚洲AV永久无码精品澳门 | 免费港剧在线观看港剧 | 91xj视频|