nginx實現負載均衡

dalaoyang發表於2018-12-29

本篇文章介紹Nginx實現負載均衡,本文使用Nginx和兩個SpringBoot簡單Web應用實現。

1.準備工作。

結合本文場景,需要安裝Nginx和Java環境(執行SpringBoot專案)。

1.1 關於Linux系統安裝Nginx可以參考我的文章---(傳送門)。

1.2 由於只是測試,SpringBoot只是對映了根路徑,埠分別是10001和10002,分別返回demo1和demo2字串作為區分。

2.Nginx負載均衡的集中方式介紹

2.1 輪詢

輪詢方式是Nginx負載預設的方式,顧名思義,所有請求都按照時間順序分配到不同的服務上,如果服務Down掉,可以自動剔除,如下配置後輪訓10001服務和10002服務。

upstream  dalaoyang-server {
       server    localhost:10001;
       server    localhost:10002;
}
複製程式碼

2.2 權重

指定每個服務的權重比例,weight和訪問比率成正比,通常用於後端服務機器效能不統一,將效能好的分配權重高來發揮伺服器最大效能,如下配置後10002服務的訪問比率會是10001服務的二倍。

upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}
複製程式碼

2.3 iphash

每個請求都根據訪問ip的hash結果分配,經過這樣的處理,每個訪客固定訪問一個後端服務,如下配置(ip_hash可以和weight配合使用)。

upstream  dalaoyang-server {
       ip_hash; 
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}
複製程式碼

2.4 最少連線

將請求分配到連線數最少的服務上。

upstream  dalaoyang-server {
       least_conn;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}
複製程式碼

2.5 fair

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

upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;  
}
複製程式碼

3.Nginx配置

以輪訓為例,如下是nginx.conf完整程式碼。

worker_processes  1;

events {
    worker_connections  1024;
}


http {
   upstream  dalaoyang-server {
       server    localhost:10001;
       server    localhost:10002;
   }

   server {
       listen       10000;
       server_name  localhost;

       location / {
        proxy_pass http://dalaoyang-server;
        proxy_redirect default;
      }

    }

}
複製程式碼

4.測試

重啟nginx,第一次訪問http://localhost:10000如圖所示,

nginx實現負載均衡

在次訪問如圖所示

nginx實現負載均衡

如果要修改負載均衡演算法修改對應upstream模組即可。

相關文章