Nginx-upstream模塊


Nginx反向代理之 upstream 模塊

upstream模塊的內容應放於 nginx.conf 配置的 http{} 標簽內,其默認的調度算法是rr (輪循 round-robin)

ngx_http_upstream_module模塊官方文檔

upstream 模塊內部 server 標簽參數說明

提示:以上的參數和專業的 haproxy 參數類似,但不如 haproxy 的參數易懂。

upstream 模塊調度算法

調度算法一般分為兩類:

第一類為靜態調度算法,即負載均衡器根據自身設定的規則進行分配,不需要考慮后端節點服務器的情。例如:rr、wrr、ip_hash等都屬於靜態調度算法。

第二類為動態調度算法,即負載均衡器會根據后端節點的當前狀態來決定是否分發請求,例如:連接數少的有限獲得請求,響應時間短的優先獲得請求。例如:least_conn、fair 等都屬於動態調度算法。

常見的調度算法:

1)rr 輪循 (round robin 默認調度算法,靜態調度算法)

  按客戶端請求順序把客戶端的請求逐一分配到不同的后端節點服務器,這相當於 LVS 中的 rr 算法,如果后端節點服務器宕機(默認情況下nginx 只檢測80端口)。宕機的服務器會自動從節點服務器池中剔除,以便客戶端的用戶訪問不受影響。新的請求會分配給正產的服務器。

    upstream myapp1 {
        server 192.168.3.103;
        server 192.168.3.104;
     }

2)wrr (weight 權重輪循,靜態調度算法)

  在 rr 輪循算法的基礎上加上權重,即為權重輪循算法,當使用該算法時,權重和用戶訪問成正比,權重值越大,被轉發的請求也就越多。可以根據服務器的配置和性能指定權重值大小,有效解決新舊服務器性能不均帶來的請求分配問題。

    upstream myapp1 {
        server 192.168.3.103 weight=1;
        server 192.168.3.104 weight=2;
     }

3)ip_hash(靜態調度算法)

  每個請求按客戶端 IP 的 hash 結果分配,當新的請求到達時,先將其客戶端IP通過哈希算法哈希出一個值,在隨后的客戶端請求中,客戶 IP 的哈希值只要相同,就會被分配至同一台服務器,該調度算法可以解決動態網頁的 session 共享問題,但有時會導致請求分配不均,即無法保證 1:1 的負載均衡,因為在國內大多數公司都是 NAT 上網模式,多個客戶端會對應一個外部 IP,所以,這些客戶端都會被分配到同一節點服務器,從而導致請求分配不均。LVS 負載均衡的 -P 參數、keepalived 配置里的 persistence_timeout 50 參數都類似這個 Nginx 里的 ip_hash 參數,其功能均為解決動態網頁的 session 共享問題。注意:當負載調度算法為 ip_hash時,后端服務器在負載均衡調度中的狀態不能有 weight 和 backup ,即使有也不會生效。

    upstream myapp1 {
        ip_hash;
        server 192.168.3.103;
        server 192.168.3.104;
     }

4)fair(動態調度算法)

  fair 調度算法會根據后端節點服務器的響應時間來分配請求,響應時間端的優先分配。這是更加智能的調度算法。此種算法可以依據頁面大小和加載時間長短只能地進行負載均衡,也就是根據后端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx 本身是不支持 fair 調度算法的,如果需要使用這種調度算法,必須下載 Nginx 的相關模塊 upstream_fair。

    upstream myapp1 {
        fair;
        server 192.168.3.103;
        server 192.168.3.104;
     }

5)least_conn (動態調度算法)

  least_conn 調度算法會根據后端節點的連接數來決定分配情況,哪個機器連接數少就分發。

    upstream myapp1 {
        least_conn;
        server 192.168.3.103;
        server 192.168.3.104;
     }

6)url_hash 算法

  url_hash 按訪問 URL 的 hash 結果來分配請求,使每個 URL 定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率命中率。(多用於后端服務器為緩存時的場景下)Nginx 本身是不支持 rul_hash的,如果需要使用這種調度算法,必須安裝 Nginx 的hash 模塊軟件包。

    upstream myapp1 {
        server 192.168.3.103;
        server 192.168.3.104;
        hash $request_uri;
        hash_method crc32;
     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM