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,HOST 和 PORT 為運行
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標簽:tomcat的server.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" />