1. 程式人生 > >Nginx + Tomcat 配置負載均衡集群

Nginx + Tomcat 配置負載均衡集群

term 機器 ati lis 官網下載 規則 ron mar 服務器性能

一、Hello world

1、前期環境準備

準備兩個解壓版tomcat,如何同時啟動兩個tomcat,請看我的另一篇文章《一臺機器同時啟動多個tomcat》。

nginx官網下載解壓版nginx。

創建一個簡單的web項目。為了直觀的區分訪問的哪個tomcat,在頁面寫上標記8081、8082。
技術分享圖片
分別部署到對應的tomcat下。如圖:
技術分享圖片
技術分享圖片
2、配置nginx

進入nginx-1.10.1conf路徑,修改配置文件nginx.conf。

1、配置服務器組,在http{}節點之間添加upstream配置。(註意不要寫localhost,不然訪問速度會很慢)

upstream nginxDemo {

server 127.0.0.1:8081;   #服務器地址1

server 127.0.0.1:8082;   #服務器地址2

}

2、修改nginx監聽的端口號80,改為8080。

server {

listen       8080;

......

}

3、在location{}中,利用proxy_pass配置反向代理地址;此處“http://”不能少,後面的地址要和第一步upstream定義的名稱保持一致。

location / {

        root   html;

        index  index.html index.htm;

        proxy_pass http://nginxDemo; #配置方向代理地址

    }

如下圖:
技術分享圖片
3、啟動nginx和tomcat,訪問

我是Windows系統,所以直接在nginx-1.10.1目錄下雙擊nginx.exe即可。

可在任務管理器中查看

技術分享圖片
最後在瀏覽器輸入地址:http://localhost:8080/nginxDemo/index.jsp,每次訪問就會輪流訪問tomcat了(如果F5刷新不管用,建議試試鼠標指針放到地址欄,點擊Enter鍵)。

技術分享圖片
技術分享圖片
到這裏,一個非常簡單的負載均衡就配置完成了,是不是很簡單呢,O(∩_∩)O

二、nginx負載均衡策略

1、輪詢(默認)

每個web請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

upstream nginxDemo {

    server 127.0.0.1:8081;

    server 127.0.0.1:8082;

}

2、最少鏈接

web請求會被轉發到連接數最少的服務器上。

upstream nginxDemo {

    least_conn;

    server 127.0.0.1:8081;

    server 127.0.0.1:8082;

}

3、weight 權重

指定輪詢幾率,weight和訪問比率成正比,用於後端服務器性能不均的情況,weight默認是1。

#服務器A和服務器B的訪問比例為:2-1;比如有3個請求,前兩個會訪問A,三個訪問B,其它規則和輪詢一樣。

upstream nginxDemo {

    server 127.0.0.1:8081 weight=2; #服務器A

    server 127.0.0.1:8082; #服務器B

}

4、ip_hash

每個請求按訪問ip的hash值分配,這樣同一客戶端連續的Web請求都會被分發到同一服務器進行處理,可以解決session的問題。當後臺服務器宕機時,會自動跳轉到其它服務器。

upstream nginxDemo {

    ip_hash;

    server 127.0.0.1:8081 weight=2; #服務器A

    server 127.0.0.1:8082; #服務器B

}

基於weight的負載均衡和基於ip_hash的負載均衡可以組合在一起使用。

5、url_hash(第三方)

url_hash是nginx的第三方模塊,nginx本身不支持,需要打補丁。

nginx按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器為緩存服務器、文件服務器、靜態服務器時比較有效。缺點是當後端服務器宕機的時候,url_hash不會自動跳轉的其他緩存服務器,而是返回給用戶一個503錯誤。

upstream nginxDemo {

    server 127.0.0.1:8081; #服務器A

    server 127.0.0.1:8082; #服務器B

    hash $request_url;

}

6、fair(第三方)

按後端服務器的響應時間來分配請求,響應時間短的優先分配。

upstream nginxDemo {

    server 127.0.0.1:8081; #服務器A

    server 127.0.0.1:8082; #服務器B

    fair;

}

Nginx + Tomcat 配置負載均衡集群