在伺服器叢集中,Nginx扮演一個代理伺服器的角色(即反向代理),為了避免單獨一個伺服器壓力過大,將來自使用者的請求轉送給不同的伺服器。
Nginx負載平衡策略
負載平衡用於從「upstream」模組定義的後端伺服器清單中選取一台伺服器接受使用者的請求。一個最基本的upstream模組是這樣的,模組內的server是伺服器清單:
#动态服务器组 upstream dynamic_zuoyu { server localhost:8080; #tomcat 7.0 server localhost:8081; #tomcat 8.0 server localhost:8082; #tomcat 8.5 server localhost:8083; #tomcat 9.0 }
在upstream模組設定完成後,要讓指定的存取反向代理到伺服器清單:
#其他页面反向代理到tomcat容器 location ~ .*$ { index index.jsp index.html; proxy_pass http://dynamic_zuoyu; }
這就是最基本的負載平衡實例,但這不足以滿足實際需求;
目前Nginx伺服器的upstream模組支援6種方式的分配:
#輪詢的方式,它是upstream模組預設的負載平衡預設策略。每個請求會依時間順序逐一分配到不同的後端伺服器。
權重方式,在輪詢策略的基礎上指定輪詢的幾率。
ip_hash,指定負載平衡器按照基於客戶端IP的分配方式,這個方法確保了相同的客戶端的請求一直發送到相同的伺服器,以保證session會話。這樣每個訪客都固定存取一個後端伺服器,可以解決session不能跨伺服器的問題。
least_conn,把請求轉送給連線數較少的後端伺服器。輪詢演算法是把請求平均的轉送給各個後端,使它們的負載大致相同;但是,有些請求佔用的時間很長,會導致其所在的後端負載較高。在這種情況下,least_conn這種方式就可以達到更好的負載平衡效果。
第三方的負載平衡策略的實作需要安裝第三方外掛程式。
fair,依照伺服器端的回應時間來分配請求,回應時間短的優先分配。
url_hash,按存取url的hash結果來分配請求,使每個url定向到同一個後端伺服器,要配合快取命中來使用。同一個資源多次請求,可能會到達不同的伺服器上,導致不必要的多次下載,快取命中率不高,以及一些資源時間的浪費。而使用url_hash,可以使得同一個url(也就是同一個資源請求)會到達同一台伺服器,一旦快取住了資源,再此收到請求,就可以從快取中讀取。
更多Nginx相關技術文章,請造訪Nginx使用教學欄位進行學習!
以上是nginx負載平衡策略有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!