nginx+tomcat:負載均衡配置(使用粘性session)
(1)舉個簡單的例子,以tomcat為例,我們都知道session存在于服務器端,對于不是分布式部署,整個系統的session都會是這唯一的服務器來管理。這點 沒問題。但是對于分布式部署來說,假設有tomcatA與tomcatB,但用戶user訪問系統時,通過負載均衡,此user訪問了位于tomcatA上的應用。系統給此用戶分配了一個session來標識用戶身份,并返回sessionID給瀏覽器。這時user又向服務器發送個請求。假設這時候負載均衡到了tomcatB,但是此時tomcatB上并沒有存有user相應的session信息。根據一般應用的設置,會提示user重新登錄,試想下user就這樣一直登錄,一直被提示未登錄,這樣肯定行不通。這就是session保持的問題。
解決session保持有幾種方法,例如nginx自帶的ip_hash模塊,session復制,以及使用類似redis這種緩存數據庫來實現對session的統一管理。在這里介紹的是粘性session;
(2) 粘性session的概念:
用戶在持續訪問系統時,根據粘性session,仍會被分配到上一次訪問的服務器中。
(3)粘性session的配置:
1.給nginx添加 nginx_upstream_jvm_route 模塊
下載: http://down.51cto.com/data/910451
安裝 : 解壓后,首先執行patch -p0 < /nginx_upstream_jvm_route/jvm_route.patch 補丁文件
然后在./configure nginx時,–add-module=/nginx_upstream_jvm_route
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內不再訪問該服務器。