nginx負載均衡多臺tomcat,session共享,session丟失
使用Nginx實現Tomcat叢集負載均衡
使用Nginx主要是來解決高併發情況下的負載均衡問題。
1、最主要是負載均衡請求分發。
2、檔案上傳功能,只能上傳到一個Tomcat上,下載檔案或者圖片的時候就有可能發生404錯誤。
3、多個Tomcat之間Session共享問題,否則會出現不斷要求登入的情況。
1、第一個問題肯定就是使用Nginx來做負載均衡。安裝Nginx,請參考:Linux Centos 6.5_x86安裝Nginx。
2、第二個問題思路有兩個:
a)在Linux上搭建NFS伺服器來實現檔案共享,參考:Tomcat 叢集 檔案上傳下載的共享問題 NFS配置。
b)利用Nginx的負載均衡,請求轉發功能,將關於圖片的上傳和下載請求全部轉到一臺Tomcat上。具體配置參考下邊配置一節。本文使用的是這種方式。
3、上述提到的第三個問題即Session共享問題選擇是Tomcat-Redis-Session_manager來解決的,具體請參考:使用Tomcat-redis-session-manager來實現Tomcat叢集部署中的Session共享。
3、一臺Linux安裝多個Tomcat請參考:linux系統下安裝兩個或多個tomcat。
start nginx
//啟動
nginx -t
//測試nginx配置是否正確
nginx -s stop
//結束nginx程式
nginx -s reload
//重啟nginx程式
一. 配置負載均衡
自己嘗試的例子:
訪問:
發現請求被根據權重weight分發到兩個Tomcat中。其中一個Down掉後也會切換到另一個上。
註釋掉可使用#號也可使用down:
upstream localhost2 { # server localhost:8080 weight=1; server localhost:28080 weight=2; } upstream localhost2 { server localhost:8080 down; server localhost:28080 weight=2; }
QC:
window下權重 weight設定為一樣時,切換無法成功,原因未知
配置多個:
server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } } server { listen 80; server_name t.test.com; charset utf-8; access_log logs/hostzs.access.log; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; server_name www.test.com; charset utf-8; access_log logs/hostzs.access.log; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
二. 實現Session共享
多個tomcat要一起協同工作有幾種辦法,可以考慮的方案有以下幾個:
1. 使用tomcat自帶的cluster方式,多個tomcat間自動實時複製session資訊,配置起來很簡單。但這個方案的效率比較低,在大併發下表現並不好。
2. 利用nginx的基於訪問ip的hash路由策略,保證訪問的ip始終被路由到同一個tomcat上,這個配置更簡單。但如果應用是某一個區域網大量使用者同時登入,這樣負載均衡就沒什麼作用了。
3. 利用memcached把多個tomcat的session集中管理,前端在利用nginx負載均衡和動靜態資源分離,在兼顧系統水平擴充套件的同時又能保證較高的效能。
小結
1、此時Nginx只有一臺,如果這臺Nginx訪問不了了,整個叢集就無法提供服務,所以為了實現Nginx的高可用,需要實現Nginx的failover,實現方式參考:Nginx+Keepalived實現站點高可用。
2、Redis的問題同上,參考:keepalived+redis 高可用redis主從解決方案。
【更詳細的參考文件】
1、Nginx+Tomcat7+Mencached負載均衡叢集部署筆記 - 海濤的CSDN部落格 - 部落格頻道 - CSDN.NET http://blog.csdn.net/zht666/article/details/38515147
2、使用Nginx實現Tomcat叢集負載均衡 - 502studio - 部落格園 http://www.cnblogs.com/machanghai/p/5957086.html