5.Nginx的session一致性(共享)問題配置方案1


1:Session共享

  為什么要實現共享,如果你的網站是存放在一個機器上,那么會話數據就在這台機器,但是如果你使用了負載均衡把請求分發到不同的機器呢?這個時候會話

id在客戶端是沒有問題的,但是如果用戶的兩次請求到了兩台不同的機器,而它的session數據可能存在其中一台機器,這個時候就會出現取不到session數據的情

況,於是session的共享就成了一個問題。

2:Session一致性(共享)解決方案

  1、session復制:tomcat 本身帶有復制session的功能
  2、共享session
    – 需要專門管理session的軟件memcached
    – memcached 緩存服務,可以和tomcat整合,幫助tomcat共享管理session

2.1:Linux安裝memcached

  1.Linux系統安裝memcached,首先要先安裝libevent庫:yum install libevent libevent-deve

  2.安裝 Memcached:.yum -y install memcached

  3.Memcached 啟動運行:service memcached start

  4.Memcached 測試連接:使用telnet 命令並指定主機ip和端口來連接 Memcached 服務。語法:telnet HOST PORT,HOSTPORT 為運行

Memcached 服務的 IP 和 端口

  實例演示如何連接到 Memcached 服務並執行簡單的 set 和 get 命令

         本實例的 Memcached 服務運行的主機為 127.0.0.1(本機) 、端口為 11211

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set foo 0 0 3                                             保存命令   3為長度 0為存活時間
bar                                                             數據
STORED                                                    結果
get foo                                                        取得命令
VALUE foo 0 3                                           數據
bar                                                              數據
END                                                             結束行
quit                                                            退出

   

2.2:Tomcat配置名稱和session一致性配置(tomcat整合,讓Tomcat從該緩從數據庫中取session)

  5.拷貝https://pan.baidu.com/s/1j8A5QbqZM7uZoCR0IHLRBQ中lib下的jar包到tomcat的lib下(分別是200和201web服務器連接Memcached的jar包)

  6.修改Engine標簽:tomcatserver.xml配置jvmRoute屬性(分別是200和201服務器)方便查看sessionid里面帶有的Tomcat名字

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat200">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat201">

  7.Tomcat首頁面index.jsp配置(分別是200和201服務器)

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>     -----根據情況加,我加了報錯了,去掉就好了
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%> 
<br/>
<h1>tomcatxxx page</h1>

  進行訪問:http://192.168.232.201:8080/                     

  

  進行訪問:http://192.168.232.200:8080/

  

  進行訪問:http://shizhan2:8888/,通過域名訪問192.168.232.201,使用反向代理繼而訪問201和200的Tomcat服務器,不斷刷新頁面,發現

sessionid是不斷變化的,所以下面配置Memchched緩存數據庫(啟動Memchched服務)

  8.修改Tomcat的context.xml文件,配置Manager

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
   #配置memcachedNodes屬性:配置memcached數據庫的IP和端口,默認11211,多個用空格隔開,目的讓Tomcat從memcached緩從里面取放session memcachedNodes="n1:192.168.232.201:11211"
#我們的memcached安裝在192.168.232.201服務器上 sticky="false" lockingMode="auto" sessionBackupAsync="false" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

   配置好后使用域名進行訪問:http://shizhan2:8888/

  

5.利用redis實現session共享

  安裝redis緩存數據庫:yum -y install redis

  修改配置文件vi /etc/redis.conf,將bind的127.0.0.1修改為本機地址(192.168.232.201:安裝了redis),否則只能通過localhost訪問了

  導入redislib中三個jar包到tomcat中(201和200),包連接:https://pan.baidu.com/s/1L1ytXRW4ig4YCukg3j-oZQ

  

  在tomcat/conf下的context.xml中添加配置(201和200):

 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
 <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
           host="192.168.232.201"
           port="6379"
           database="0"
           maxInactiveInterval="60" />

  

  

 

  

  

  

 

  

  

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM