Nginx實現tomcat集群進行負載均衡
一、背景
隨著業務量和用戶數量的激增,單一的tomcat部署應用已經無法滿足性能需求,而且對於每次發布項目期間服務不可用的問題也凸顯,既然出現了這個問題,那麽我們本文就借助nginx來完美的解決這個問題。
二、基本概念
1.說明:關於Nginx的概念和介紹以及Centos7下安裝步驟,請移步:Centos7安裝Nginx實戰
2.正向代理和反向代理
假設我們給定客戶端A、代理服務器B、以及最終服務器C
正向代理:代理服務器B來代替客戶端A來訪問最終服務器C並將最終結果轉發給客戶端A,站在客戶端A的角度上,代理服務器代理的是客戶端A,這個過程是正向的,所以叫正向代理。(正向代理需要客戶端A設置代理服務器的ip和提供代理服務的端口)
反向代理:客戶端A直接訪問代理服務器B,由代理服務器B來決定將請求轉發到哪個最終服務器進行真正處理,並將最終服務器的處理結果轉發給客戶端A,也就是代理服務器代理的是最終服務器C,站在客戶端A的角度上,這個過程是反向的,所以叫反向代理。(反向代理不需要客戶端A進行任何設置)
關於正向代理和反向代理,這裏有一片不錯的文章:圖解正向代理、反向代理、透明代理
3.負載均衡(Load Balance)
所謂負載均衡就是將一批可以提供相同服務的服務器組成一個服務器集合,每臺服務器都可以單獨向外部提供相同的服務,通過某種負載分擔技術,按照用戶指定的負載均衡策略將外部請求分配到服務器集合中的具體的某一臺來進行處理的技術。以此來提高並發、增加吞吐量、提高處理能力、增加服務可用性。
三、實現步驟
1.首先將項目部署在不同的服務器上,並記錄下服務的IP地址和端口
2.在nginx的config文件中進行如下設置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
# ‘$status $body_bytes_sent "$http_referer" ‘
# ‘"$http_user_agent" "$http_x_forwarded_for"‘;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream tomcats{
# server 192.168.85.131:8080 weight=5;
server 192.168.85.131:8080;
server 192.168.85.131:8081;
}
server {
listen 80;
server_name tomcat.hafiz.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcats;
index index.html index.htm;
}
}
}
3.說明:其中標紅的地方是最關鍵的地方,upstream指定了集群服務的各個服務的地址,可以使用weight來增加某個服務器的權重,也就意味著請求會被多轉發到這個服務器上。server_name用來指定暴露給用戶的地址,用戶訪問這個地址,這個地址再將請求按照策略進行轉發。
4.有了集群提供負載均衡,如果是web項目就涉及到sesstion在集群中共享的問題,要解決這個問題,請移步:Shrio+Redis實現tomcat集群共享session
四、總結
通過本文,我們就清楚了什麽叫正向代理和反向代理以及負載均衡,還有如何使用nginx來完成負載均衡。以前感覺部署集群提供負載均衡很牛,現在看來其實也沒啥,挺簡單的。
Nginx實現tomcat集群進行負載均衡