541
技術社區[雲棲]
Nginx幾種負載均衡算法及配置實例
Nginx負載均衡(工作在七層“應用層”)功能主要是通過upstream模塊實現,Nginx負載均衡默認對後端服務器有健康檢測的能力,僅限於端口檢測,在後端服務器比較少的情況下負載均衡能力表現突出。
Nginx的幾種負載均衡算法:
1、輪詢(默認):每個請求按時間順序逐一分配到不同的後端服務器,如果後端某台服務器宕機,則自動剔除故障機器,使用戶訪問不受影響。
2、weight:指定輪詢權重,weight值越大,分配到的幾率就越高,主要用於後端每台服務器性能不均衡的情況。
3、ip_hash:每個請求按訪問IP的哈希結果分配,這樣每個訪客固定訪問一個後端服務器,可以有效的解決動態網頁存在的session共享問題。
4、fair(第三方):更智能的一個負載均衡算法,此算法可以根據頁麵大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。如果想要使用此調度算法,需要Nginx的upstream_fair模塊。
5、url_hash(第三方):按訪問URL的哈希結果來分配請求,使每個URL定向到同一台後端服務器,可以進一步提高後端緩存服務器的效率。如果想要使用此調度算法,需要Nginx的hash軟件包。
在upstream模塊中,可以通過server命令指定後端服務器的IP地址和端口,同時還可以設置每台後端服務器在負載均衡調度中的狀態,常用的狀態有以下幾種:
1、down:表示當前server暫時不參與負載均衡。
2、backup:預留的備份機,當其他所有非backup機器出現故障或者繁忙的時候,才會請求backup機器,這台機器的訪問壓力最輕。
3、max_fails:允許請求的失敗次數,默認為1,配合fail_timeout一起使用
4、fail_timeout:經曆max_fails次失敗後,暫停服務的時間,默認為10s(某個server連接失敗了max_fails次,則nginx會認為該server不工作了。同時,在接下來的 fail_timeout時間內,nginx不再將請求分發給失效的server。)
下麵是一個負載均衡的配置示例,這裏隻列出http配置段,省略了其他部分配置:
http { upstream whsirserver { server 192.168.0.120:80 weight=5 max_fails=3 fail_timeout=20s; server 192.168.0.121:80 weight=1 max_fails=3 fail_timeout=20s; server 192.168.0.122:80 weight=3 max_fails=3 fail_timeout=20s; server 192.168.0.123:80 weight=4 max_fails=3 fail_timeout=20s; } server { listen 80; server_name blog.whsir.com; index index.html index.htm; root /data/www; location / { proxy_pass https://whsirserver; proxy_next_upstream http_500 http_502 error timeout invalid_header; } } }
upstream負載均衡開始,通過upstream指定了一個負載均衡器的名稱為whsirserver,這個名稱可以自己定義,在後麵proxy_pass直接調用即可。
proxy_next_upstream參數用來定義故障轉移策略,當後端服務器節點返回500、502和執行超時等錯誤時,自動將請求轉發到upstream負載均衡器中的另一台服務器,實現故障轉移。
最後更新:2017-07-03 11:02:35