(1)舉個簡單的例子,以tomcat爲例,咱們都知道session存在於服務器端,對於不是分佈式部署,整個系統的session都會是這惟一的服務器來管理。這點 沒問題。可是對於分佈式部署來講,假設有tomcatA與tomcatB,但用戶user訪問系統時,經過負載均衡,此user訪問了位於tomcatA上的應用。系統給此用戶分配了一個session來標識用戶身份,並返回sessionID給瀏覽器。這時user又向服務器發送個請求。假設這時候負載均衡到了tomcatB,可是此時tomcatB上並無存有user相應的session信息。根據通常應用的設置,會提示user從新登陸,試想下user就這樣一直登陸,一直被提示未登陸,這樣確定行不通。這就是session保持的問題。nginx
解決session保持有幾種方法,例如nginx自帶的ip_hash模塊,session複製,以及使用相似redis這種緩存數據庫來實現對session的統一管理。在這裏介紹的是粘性session;redis
(2) 粘性session的概念:數據庫
用戶在持續訪問系統時,根據粘性session,仍會被分配到上一次訪問的服務器中。瀏覽器
(3)粘性session的配置:緩存
1.給nginx添加 nginx_upstream_jvm_route 模塊tomcat
下載: http://down.51cto.com/data/910451服務器
安裝 : 解壓後,首先執行patch -p0 < /nginx_upstream_jvm_route/jvm_route.patch 補丁文件cookie
而後在./configure nginx時,–add-module=/nginx_upstream_jvm_routesession
2.配置nginx.conf負載均衡
server 192.168.10.63:8081 srun_id=tomcat0;
server 192.168.10.63:8088 srun_id=tomcat1;
jvm_route $cookie_JSESSIONID|sessionid reverse;
3.配置tomcat
在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat0">處,添加 jvmRoute="tomcat0";
注:此處的jvmRoute的值應同nginx.conf中的srun_id的值 相對應。
4.從新啓動nginx與tomcat,配置完成
(4)負載均衡優化配置
server 192.168.10.63:8081 srun_id=tomcat0 max_fails=3 fail_timeout=60s 上面max_fails=3 fail_timeout=15s兩個參數表明在15s,如有3次失敗鏈接,則在下個15s內再也不訪問該服務器。