Nginx之負載均衡算法

Nginx其中一大特性就是負載均衡,它可以通過擴展它代理的連接來保護你的上游服務器免於過載等問題。

負載均衡算法

upstream模塊能夠使用3種負載均衡:

1. 輪詢 rountd-robin ):
在默認情況下,使用輪詢算法,它可以不需要配置指令來啓用它。該算法選擇下一個服務器,基於先前選擇,在配置文件中哪一個是下一個服務器,以及每一個服務器的負載權重。輪詢算法是基於在隊列中誰是下一個的原理確保將訪問量均勻地分配給每一個上游服務器的。
2. IP哈希(IP hash):
通過ip_hash指令啓用它,從而將某些IP地址映射到同一個上游服務器。Nginx通過IPv4地址的前3個字節或整個IPv6地址作爲哈希鍵來實現,同一個IP地址池地址總是被映射到同一個上游服務器,所以,這個機制的目的不是要確保公平分配給每一個上游服務器,而是在客戶端和上游服務器之間實現一致映射,在上游服務器中,主要應用在具有會話的應用中非常有用。
3. 最少連接數(Least Connection):
通過least_conn指令啓用,該算法的目的是通過選擇一個活躍的最少連接數服務器,然後將負載均衡均勻分配給上游服務器。如果上游服務器服務器的處理器能力不相同,那麼可以爲server指令使用weight參數來控制權重,該算法主要應用在不同服務器配置中。

示例如下:

    upstream servers {
            server 127.0.0.1:8080 weith=1 max_fails=3 fail_timeout=1;
            server 127.0.0.1:8081 weith=2 max_fails=3 fail_timeout=1;
            server 127.0.0.1:8082 down;     # 下線(不可用)
            server 127.0.0.1:8083 backup;   # 備份 
    }
    server {
            location / {
                # 獲取客戶端真實ip地址
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # 針對超時無響應的上游服務器應該被迅速處理掉,具體看應用程序
                proxy_connect_timeout   5;
                proxy_read_timeout      10;
                proxy_send_timeout      10;
                proxy_pass http://servers;
            }
    }

upstream模塊還能夠爲每一個上游服務器設置狀態值,這些狀態值的含義分別例如以下:

  • down 表示該server臨時不參與負載;
  • weight 默認值爲1,當weight越大,負載的權重就越大;
  • max_fails 表示同時請求失敗的次數爲1,當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.
  • fail_timeout 表示max_fails次失敗後,暫停的時間;
  • backup 表示當其他全部的非backup機器down或者忙的時候,纔會去請求backup機器,所以這臺機器壓力會最輕。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章