1. 程式人生 > >如何解決Nginx的session一致性問題

如何解決Nginx的session一致性問題

【需求】
如下圖,當用戶傳送請求的時候,經過nginx伺服器,nginx使用負載均衡把請求分發到不同的機器tomcat1或者tomcat2裡,這個時候會話id 在客戶端是沒有問題的,但是如果使用者的兩次請求到了兩臺不同的機器,而它的session資料可能存在其中一臺機器,這個時候就會出現取不到session資料的情況。

這裡寫圖片描述

【解決】

方案一:會話保持模組,即通過cookie實現客戶端與後端伺服器的會話保持, 在一定條件下可以保證同一個客戶端訪問的都是同一個後端伺服器,即可解決session取不到、session不一致的問題。

方案二:Session共享(推薦使用),即伺服器在分發請求到了一臺機器的時候,會先去session快取資料庫檢視是否有該使用者的session,如果有則取出,否則新建一個。那麼這個Session共享如何解決呢?共有2種方法:1、memcached快取方案。2、redis快取方案。下面重點介紹session共享的問題:

1、memcached快取方案
memcached快取資料庫是專門管理session的,memcached 快取服務可以和tomcat整合,幫助tomcat 共享管理session。
安裝memcached:

# yum –y install memcached

啟動memcached(預設埠是11211):

# service memcached start

通過telnet測試memcached資料庫

# telnet localhost 11211

測試

set abc 0 0 5
12345
get abc
quit

在tomcat的server.xml中配置jvmRoute

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

在tomcat的context.xml的Context配置Manager

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
    memcachedNodes="n1:192.168.17.4:11211" 
    sticky="false" 
    lockingMode="auto"
    sessionBackupAsync
="false" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

為了方便測試,index.jsp也配置下,檔案在/tomcat安裝目錄/webapps/ROOT/index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%> 
<br/>
<h1>tomcat2 page</h1>

測試

2、redis快取方案
安裝redis:

# yum –y install redis

啟動redis

# service redis start

測試(redis的預設埠是6379):

# telnet localhost 6379

修改配置檔案vi /etc/redis.conf,將bind的127.0.0.1修改為本機地址,否則只能本機訪問了

在tomcat的context.xml的Context配置Manager

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

相關推薦

Centos7下Nginx+Tomcat配置反向代理,使用memcached解決session一致性問題

新版本 desc secure conn prot 多臺 for body 我們 一、session一致性問題 使用集群方案解決網站高並發問題時,就會部署多臺應用服務器。當用戶第一次通過客戶端(如:瀏覽器)訪問服務器時,服務器會創建對應的session, 使用

Centos7下Nginx+Tomcat配置反向代理,使用redis解決session一致性問題

localhost 第一次 方案 days tom gin align title 瀏覽器 一、session一致性問題 使用集群方案解決網站高並發問題時,就會部署多臺應用服務器。當用戶第一次通過客戶端(如:瀏覽器)訪問服務器時,服務器會創建對應的sessio

分散式事務 解決資料一致性(一)事務原則與實現:事務、sql事務

事務: 定義:       是以一種可靠、一致的方式,訪問和操作資料庫中資料的程式單元。 原則:      *a、 原子性   * b、一致性  * c、隔離性 &nbs

nginx 解決session一致性

session 粘滯性 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。  upstream backserver { ip_hash; server 192.168.0.14:88; serv

分散式事務實踐 解決資料一致性(雲盤下載)

第1章 課程介紹 介紹該課程的內容、學習成果、例項,還有學習所需的前提知識。 1-1 導學-分散式事務實踐 第2章 事務原則與實現 介紹了事務的四大原則,並通過例項介紹資料庫實現事務的方法,以及使用JDBC實現事務的方法。 2-1 事務原則與實現:事務 2-2 事務原則與

分散式事務實踐 解決資料一致性已完結(雲盤下載)

第1章 課程介紹 介紹該課程的內容、學習成果、例項,還有學習所需的前提知識。 1-1 導學-分散式事務實踐 第2章 事務原則與實現 介紹了事務的四大原則,並通過例項介紹資料庫實現事務的方法,以及使用JDBC實現事務的方法。 2-1 事務原則與實現:事務 2-2 事務原則與

記憶體模型是怎麼解決快取一致性問題的?

我們在文章中提到過,由於CPU和主存的處理速度上存在一定差別,為了匹配這種差距,提升計算機能力,人們在CPU和主存之間增加了多層快取記憶體。每個CPU會有L1、L2甚至L3快取,在多核計算機中會有多個CPU,那麼就會存在多套快取,那麼這多套快取之間的資料就可能

記憶體模型是怎麼解決快取一致性

我們在文章中提到過,由於CPU和主存的處理速度上存在一定差別,為了匹配這種差距,提升計算機能力,人們在CPU和主存之間增加了多層快取記憶體。每個CPU會有L1、L2甚至L3快取,在多核計算機中會有多個CPU,那麼就會存在多套快取,那麼這多套快取之間的資料就可能出現不一

解決分散式一致性問題的基礎理論

ACID:資料庫的四個特性 CAP:帽子理論 BASE:對應帽子理論的解決思想理論   一,ACID特性 什麼是ACID,一般關係型資料庫都會保證ACID這個特性,那麼ACID對於一致性來說,就是一種最直接且最有效的強一致性。 如果在資料量較小的情況下,可以利用關係型資料庫的強一致性解決

記憶體模型如何解決快取一致性問題

前言 我們都知道,由於CPU和主存的處理速度上存在一定差別,為了匹配這種差距,提升計算機能力,人們在CPU和主存之間增加了多層快取記憶體。每個CPU會有L1、L2甚至L3快取,在多核計算機中會有多個CPU,那麼就會存在多套快取,那麼這多套快取之間的資料就可能出

2019分散式事務實踐 解決資料一致性

第1章 課程介紹 介紹該課程的內容、學習成果、例項,還有學習所需的前提知識。 1-1 導學-分散式事務實踐 第2章 事務原則與實現 介紹了事務的四大原則,並通過例項介紹資料庫實現事務的方法,以及使用JDBC實現事務的方法。 2-1 事務原則與實現:事務 2-2 事務原則與實現:SQL事務 2-

nginx 解決session一致性

session 粘滯性 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解

Nginx+iis 中搭建的站點解決session 一致性解決方案

模擬負載均衡站點已經搭建完畢,那麼問題來了,兩個站點也許在不同的機器下使用不同ip和埠號,即使部署在同一機器下面,埠號也肯定不同。現在有很多的資訊儲存在session中,那麼session資訊的一致性該如何解決呢? Session 儲存在伺服器中,

分布式事務解決方案-柔性事務(可靠消息保證最終一致性

png ges blog 分布 事務 分布式事務 src 最終 一致性 1. 2. 分布式事務解決方案-柔性事務(可靠消息保證最終一致性)

數據異構解決方案緩存一致性和跨服務器查詢

cati 如何 java.net meta mixed 解壓 -m tar 都是 緩存一致性和跨服務器查詢的數據異構解決方案canal   當你的項目數據量上去了之後,通常會遇到兩種情況,第一種情況應是最大可能的使用cache來對抗上層的高並發,第二種情

解決業務代碼裏的分布式事務一致性問題

http sid pos ide htm 介紹 class nbsp lan 參考1:https://zhuanlan.zhihu.com/p/25346771 參考2:介紹ACID,CAP,BASE解決一致性的問題文章 http://www.10ti

sql執行內部操作期間檢測到不一致性解決方案

服務 repair false 重啟 html -- 不一致 備註 操作 解決方法:重啟下SQL服務,把下面腳本運行即可。運行後,壞掉的數據庫可能會丟失。 --mydb 為壞了的數據庫名--mytable 為壞了的據庫表--master 這裏不需要更改 use mydb

分布式系統事務一致性解決方案

基本 插入 關系型 悲劇 win 比較 -1 返回結果 轉賬 開篇 在OLTP系統領域,我們在很多業務場景下都會面臨事務一致性方面的需求,例如最經典的Bob給Smith轉賬的案例。傳統的企業開發,系統往往是以單體應用形式存在的,也沒有橫跨多個數據庫。我們通常只需借助開發平臺

巧用CAS解決數據一致性問題

成功 一個 沒有 -s ado .cn 這一 gpo rtg 緣起:在高並發的分布式環境下,對於數據的查詢與修改容易引發一致性問題,本文將分享一種非常簡單但有效的優化方法。 一、業務場景 業務場景為,購買商品的過程要對余額進行查詢與修改,大致的業務流程如下: (1)從數

分布式系統事務一致性解決方案(轉)

跨庫 sources body 情況下 jpg 分庫 ability 開源 數據 本文首發於InfoQ,版權所有,請勿轉載!!!http://www.infoq.com/cn/articles/solution-of-distributed-system-transacti