Nginx + Tomcat + Redis 架構的負載均衡及會話保持

1、系統架構

Nginx + Tomcat + Redis 架構的負載均衡及會話保持

2、服務器情況

 服務器 1:nginx(80)、redis(6379)

 服務器 2:tomcat1(8080)、tomcat2(8080)

 服務器 3:mysql(3306)

3、Nginx 主要配置

http {
 ......
 upstream tomcat {
 ip_hash;
 server tomcat1:8080 max_fails=3 fail_timeout=15s;
 server tomcat2:8080 max_fails=3 fail_timeout=15s;
 }
 server {
 ......
 location /tomcat {
 proxy_pass http://tomcat;
 }
 }
}

4、會話保持的幾個方案說明

1. nginx 的 ip_hash 算法

實現原理就是同一個客戶端的所有請求只調度給同一個後臺 tomcat,這樣會話就能保持在同一臺服務器上。

優點:配置最簡單,在 nginx的 upstream 調度里加一句ip_hash 即可。

缺點:後端 tomcat 宕機,用戶 session 會丟失。

2. tomcat 的 session 複製集群

多臺 tomcat 通過組播互相溝通會話信息,以保持不同tomcat 之間的會話一致性。

優點:後端 tomcat 宕機,用戶 session 不丟失。

缺點:使用組播將信息複製到多個 tomcat 節點,網絡開

銷大。

3. 緩存集中式管理 session

session 可以保存在文件、數據庫和內存中,利用 redis 或 memcached 將 session 信息緩存,以達到會話信息不丟失,也不影響負載均衡的目的。

優點:只要緩存服務器沒問題,用戶 session 不會丟,也沒有額外的網絡開銷。

缺點:太依賴緩存服務器,需要額外的緩存服務器,成本也高,當然要求維護人員技術水平也較高,適合於性能要求高的大型環境。

5、測試功能

1. 啟動好相關服務;

2. 通過 nginx 登陸後臺,並確定連接的是哪個 tomcat;

3. 關閉目前使用的 tomcat,刷新後臺頁面,確認是否存在掉線情況;

4. 啟動已關閉的 tomcat,關閉另外一個 tomcat,確認是否還在登陸狀態。


分享到:


相關文章: