Nginx的負載均衡功能是經過upstream模塊實現的,因此它的負載均衡機制實現也簡單。它是一個基於內容和應用的7層交換負載均衡實現的。Nginx自己有健康檢測的能力,可是不強。僅僅侷限於端口的檢測,少許機器下負載能力表現比較好。若是有大量節點的話,因爲訪問請求都是從一臺服務器進出,因此很容易發生請求堵塞的問題。
html
1、Nginx負載均衡算法nginx
目前支持4種調度算法:web
輪詢(默認) | 每一個請求按時間順序逐一分配到不一樣的後端服務器 |
weight(輪詢值) | weight的值越大,分配的訪問概率就越高。通常用於後端服務器性能不均衡的狀況 |
ip_hash | 每一個請求按訪問IP的哈希結果分配,來自同一個IP的訪客固定訪問一臺服務器,能夠解決session共享的問題 |
fair | 依據頁面大小和加載時間長短智能的進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。注意:Nginx自己是不支持fair算法的,要下載upstream_fair模塊 |
url_hash | 按照訪問URL的哈希結果來分配請求。使得每一個URL定向到同一臺後端服務器,能夠進一步提升後端緩存服務器的效率。注意:Nginx自己是不支持url_hash算法的,要安裝hash軟件包 |
在http upstream模塊中,能夠經過server命令指定後端服務器的IP地址和端口,同時能夠設定每臺後端服務器在負載均衡中的調度狀態。經常使用的狀態有以下:算法
down | 表示當前的server不參與負載均衡 |
backup | 預留的備份機器。當其餘非backup機器出現故障的時候,就會請求backup機器 |
max_fails | 容許請求失敗的次數,默認爲1,當超過最大請求數的時候,返回proxy_next_upstream模塊定義的錯誤 |
fail_timeout | 在經歷了max_fails失敗後,暫停服務的時間。 |
注意:當負載均衡的算法爲ip_hash的時候,後端服務器在負載均衡調度中的狀態不能是weight和backup後端
2、Nginx負載均衡配置實例緩存
http { upstream myserver { server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s; server 192.168.12.182:80 weight=3 max_fails=3 fail_timeout=20s; server 192.168.12.183:80 weight=3 max_fails=3 fail_timeout=20s; } server { listen 80; server_name www.domain.com 192.168.12.189; index index.htm index.html root /ixdba/web/root; } location / { proxy_pass http://myserver; proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header; include /opt/nginx/conf/proxy.conf; } }
在上面的配置中,經過upstream命令指定了一個負載均衡器的名稱爲:myserver。這個名稱是任意指定的,在後面直接調用就能夠了。bash
另外,proxy_next_upstream參數是用來定義故障轉移策略的,當後端服務節點返回500,502,503的時候,自動將請求轉發到upstream負載均衡組中的另外一臺服務器,從而實現故障轉移。服務器