Nginx+tomcat實現叢集跟負載均衡

天府雲創發表於2017-04-13

nginx負載均衡多臺tomcat,session共享,session丟失

使用Nginx實現Tomcat叢集負載均衡

  1. 概述
  2. 要解決的問題
  3. 環境準備以及問題解決思路
  4. 配置
  5. 測試
  6. 小結

一、概述

  使用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



相關文章