razor 怎样使用session变量_Nginx负载均衡解决session一致性问题
【145】
前言:
http協議是無狀態的,即你連續訪問某個網頁100次和訪問1次對服務器來說是沒有區別對待的,因為它記不住你。 那么,在一些場合,確實需要服務器記住當前用戶怎么辦?比如用戶登錄郵箱后,接下來要收郵件、寫郵件,總不能每次操作都讓用戶輸入用戶名和密碼吧,為了解決這個問題,session的方案就被提了出來,事實上它并不是什么新技術,而且也不能脫離http協議以及任何現有的web技術
session的常見實現形式是會話cookie(session cookie),即未設置過期時間的cookie,這個cookie的默認生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。實現機制是當用戶發起一個請求的時候,服務器會檢查該請求中是否包含sessionid,如果未包含,則系統會創造一個名為JSESSIONID的輸出 cookie返回給瀏覽器(只放入內存,并不存在硬盤中),并將其以HashTable的形式寫到服務器的內存里面;當已經包含sessionid時,服務端會檢查找到與該session相匹配的信息,如果存在則直接使用該sessionid,若不存在則重新生成新的 session。這里需要注意的是session始終是有服務端創建的,并非瀏覽器自己生成的。 但是瀏覽器的cookie被禁止后session就需要用get方法的URL重寫的機制或使用POST方法提交隱藏表單的形式來實現
Session共享 首先我們應該明白,為什么要實現共享,如果你的網站是存放在一個機器上,那么是不存在這個問題的,因為會話數據就在這臺機器,但是如果你使用了負載均衡把請求分發到不同的機器呢?這個時候會話id在客戶端是沒有問題的,但是如果用戶的兩次請求到了兩臺不同的機器,而它的session數據可能存在其中一臺機器,這個時候就會出現取不到session數據的情況,于是session的共享就成了一個問題。
Session一致性解決方案
1、共享session 需要專門管理session的軟件,memcached 緩存服務,可以和tomcat整合,幫助tomcat共享管理session。
搭建步驟:
復現nginx負載均衡 會出現的session一致性問題:
準備三臺機器 hadoop001(192.168.198.11) hadoop002(192.168.198.12) hadoop003(192.168.198.13) 安裝tomcat jdk ngxin
1:每臺安裝tomcat 并安裝jdk 配置jdk的環境變量,修改tomcat下webapps 下的ROOT下的index.jsp,記得備份index.jsp文件
index.jsp要修改的內容如下
2:安裝nginx、tomcat 并分別啟動服務后做下測試。
http://192.168.198.11 http://192.168.198.12 http://192.168.198.13 可以看到nginx啟動成功 http://192.168.198.11:8080/ http://192.168.198.12:8080/ http://192.168.198.13:8080/ 可以看到tomcat啟動成功3:在hadoop001機器上配置負載均衡
在瀏覽器下訪問我們配置地址,http://192.168.198.11/oxox 會把我們的請求負載到12 13機器上。但是頁面顯示的session會不停的變化。
接下來我們就要用memcached和tomcat整合解決session不一致問題。(其實也可以用redis解決)
1:首先安裝memcached yum install memcached -y (在001機器上)
2:啟動memcached
memcached -d -m 128m -p 11211 -l 192.168.9.11 -u root -P /tmp/
-d:后臺啟動服務
-m:緩存大小
-p:端口
-l:IP
-P:服務器啟動后的系統進程ID,存儲的文件
-u:服務器啟動是以哪個用戶名作為管理用戶
3.拷貝jar包到tomcat的lib下
4:
配置tomcat,每個tomcat里面的context.xml中加入
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.198.11:11211"sticky="false"lockingMode="auto"sessionBackupAsync="false" requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />重新啟動每臺tomcat和Nginx
http://192.168.198.11/oxox 負載均衡服務器 然后分發到12 13 機器上
可以看到session在其他兩臺機器上是一致的
總結
以上是生活随笔為你收集整理的razor 怎样使用session变量_Nginx负载均衡解决session一致性问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 决策树准确率低原因_机器学习决策树算法-
- 下一篇: 多进程并发环境下的磁盘调度性能分析_来说