一、Nginx負載均衡算法
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務,如果後端某臺服務器死機,自動剔除故障系統,使用戶訪問不受影響。
2、weight(輪詢權值)
weight的值越大分配到的訪問概率越高,主要用於後端每臺服務器性能不均衡的情況下。或者僅僅爲在主從的情況下設置不同的權值,達到合理有效的地利用主機資源。
3、ip_hash
每個請求按訪問IP的哈希結果分配,使來自同一個IP的訪客固定訪問一臺後端服務器,並且可以有效解決動態網頁存在的session共享問題。
4、fair
比 weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間 來分配請求,響應時間短的優先分配。Nginx本身不支持fair,如果需要這種調度算法,則必須安裝upstream_fair模塊。
5、url_hash
按訪問的URL的哈希結果來分配請求,使每個URL定向到一臺後端服務器,可以進一步提高後端緩存服務器的效率。Nginx本身不支持url_hash,如果需要這種調度算法,則必須安裝Nginx的hash軟件包。
二、Nginx負載均衡調度狀態
在Nginx upstream模塊中,可以設定每臺後端服務器在負載均衡調度中的狀態,常用的狀態有:
1、down,表示當前的server暫時不參與負載均衡
2、backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,纔會請求backup機器,因此這臺機器的訪問壓力最低
3、max_fails,允許請求失敗的次數,默認爲1,當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤。
4、fail_timeout,請求失敗超時時間,在經歷了max_fails次失敗後,暫停服務的時間。max_fails和fail_timeout可以一起使用。
三、Nginx負載均衡配置
在Nginx配置文件的HTTP層添加upstream模塊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | http { upstream webserver { server 192.168.1.209:80 weight=2 max_fails=3 fail_timeout=10s; server 192.168.1.250:80 weight=1 max_fails=3 fail_timeout=10s; } server { listen 80; server_name www.huangming.org 192.168.1.21; index index.html index.htm index.php index.jsp; location / { proxy_pass http: //webserver ; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header; } } |
1 2 3 4 5 6 7 8 | [root@www ~] # curl www.huangming.org web2 [root@www ~] # curl www.huangming.org web2 [root@www ~] # curl www.huangming.org web1 [root@www ~] # curl www.huangming.org web2 |
上面的例子中的兩臺RealServer分別爲:
192.168.1.209
192.168.1.250
兩臺RealServer都安裝Nginx作爲後端web服務器
Nignx 負載均衡功能是通過upstream模塊實現的,是基於內容和應用的7層交換負載均衡。Nginx負載均衡默認對後端服務器有健康檢測能力,但是檢測能力 較弱,僅限於端口檢測,在後端服務器比較少的情況下(10臺及以下)負載均衡能力表現突出。與LVS負載均衡相比,LVS是基於四層的IP負載均衡技術, 具有高性能、高可用、吞吐量大等優點,LVS在集羣中表現更佳。